Rev 6934 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6934 | Rev 7143 | ||
---|---|---|---|
1 | #ifndef _ASM_X86_PGTABLE_32_H |
1 | #ifndef _ASM_X86_PGTABLE_32_H |
2 | #define _ASM_X86_PGTABLE_32_H |
2 | #define _ASM_X86_PGTABLE_32_H |
3 | 3 | ||
4 | #include |
4 | #include |
5 | 5 | ||
6 | /* |
6 | /* |
7 | * The Linux memory management assumes a three-level page table setup. On |
7 | * The Linux memory management assumes a three-level page table setup. On |
8 | * the i386, we use that, but "fold" the mid level into the top-level page |
8 | * the i386, we use that, but "fold" the mid level into the top-level page |
9 | * table, so that we physically have the same two-level page table as the |
9 | * table, so that we physically have the same two-level page table as the |
10 | * i386 mmu expects. |
10 | * i386 mmu expects. |
11 | * |
11 | * |
12 | * This file contains the functions and defines necessary to modify and use |
12 | * This file contains the functions and defines necessary to modify and use |
13 | * the i386 page table tree. |
13 | * the i386 page table tree. |
14 | */ |
14 | */ |
15 | #ifndef __ASSEMBLY__ |
15 | #ifndef __ASSEMBLY__ |
16 | #include |
16 | #include |
- | 17 | #include |
|
17 | #include |
18 | #include |
18 | 19 | ||
19 | #include |
20 | #include |
20 | #include |
21 | #include |
21 | #include |
22 | #include |
22 | 23 | ||
23 | struct mm_struct; |
24 | struct mm_struct; |
24 | struct vm_area_struct; |
25 | struct vm_area_struct; |
25 | 26 | ||
26 | extern pgd_t swapper_pg_dir[1024]; |
27 | extern pgd_t swapper_pg_dir[1024]; |
27 | extern pgd_t initial_page_table[1024]; |
28 | extern pgd_t initial_page_table[1024]; |
28 | 29 | ||
29 | static inline void pgtable_cache_init(void) { } |
30 | static inline void pgtable_cache_init(void) { } |
30 | static inline void check_pgt_cache(void) { } |
31 | static inline void check_pgt_cache(void) { } |
31 | void paging_init(void); |
32 | void paging_init(void); |
32 | 33 | ||
33 | /* |
34 | /* |
34 | * Define this if things work differently on an i386 and an i486: |
35 | * Define this if things work differently on an i386 and an i486: |
35 | * it will (on an i486) warn about kernel memory accesses that are |
36 | * it will (on an i486) warn about kernel memory accesses that are |
36 | * done without a 'access_ok(VERIFY_WRITE,..)' |
37 | * done without a 'access_ok(VERIFY_WRITE,..)' |
37 | */ |
38 | */ |
38 | #undef TEST_ACCESS_OK |
39 | #undef TEST_ACCESS_OK |
39 | 40 | ||
40 | #ifdef CONFIG_X86_PAE |
41 | #ifdef CONFIG_X86_PAE |
41 | # include |
42 | # include |
42 | #else |
43 | #else |
43 | # include |
44 | # include |
44 | #endif |
45 | #endif |
45 | 46 | ||
46 | #if defined(CONFIG_HIGHPTE) |
47 | #if defined(CONFIG_HIGHPTE) |
47 | #define pte_offset_map(dir, address) \ |
48 | #define pte_offset_map(dir, address) \ |
48 | ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ |
49 | ((pte_t *)kmap_atomic(pmd_page(*(dir))) + \ |
49 | pte_index((address))) |
50 | pte_index((address))) |
50 | #define pte_unmap(pte) kunmap_atomic((pte)) |
51 | #define pte_unmap(pte) kunmap_atomic((pte)) |
51 | #else |
52 | #else |
52 | #define pte_offset_map(dir, address) \ |
53 | #define pte_offset_map(dir, address) \ |
53 | ((pte_t *)page_address(pmd_page(*(dir))) + pte_index((address))) |
54 | ((pte_t *)page_address(pmd_page(*(dir))) + pte_index((address))) |
54 | #define pte_unmap(pte) do { } while (0) |
55 | #define pte_unmap(pte) do { } while (0) |
55 | #endif |
56 | #endif |
56 | 57 | ||
57 | /* Clear a kernel PTE and flush it from the TLB */ |
58 | /* Clear a kernel PTE and flush it from the TLB */ |
58 | #define kpte_clear_flush(ptep, vaddr) \ |
59 | #define kpte_clear_flush(ptep, vaddr) \ |
59 | do { \ |
60 | do { \ |
60 | pte_clear(&init_mm, (vaddr), (ptep)); \ |
61 | pte_clear(&init_mm, (vaddr), (ptep)); \ |
61 | __flush_tlb_one((vaddr)); \ |
62 | __flush_tlb_one((vaddr)); \ |
62 | } while (0) |
63 | } while (0) |
63 | 64 | ||
64 | #endif /* !__ASSEMBLY__ */ |
65 | #endif /* !__ASSEMBLY__ */ |
65 | 66 | ||
66 | /* |
67 | /* |
67 | * kern_addr_valid() is (1) for FLATMEM and (0) for |
68 | * kern_addr_valid() is (1) for FLATMEM and (0) for |
68 | * SPARSEMEM and DISCONTIGMEM |
69 | * SPARSEMEM and DISCONTIGMEM |
69 | */ |
70 | */ |
70 | #ifdef CONFIG_FLATMEM |
71 | #ifdef CONFIG_FLATMEM |
71 | #define kern_addr_valid(addr) (1) |
72 | #define kern_addr_valid(addr) (1) |
72 | #else |
73 | #else |
73 | #define kern_addr_valid(kaddr) (0) |
74 | #define kern_addr_valid(kaddr) (0) |
74 | #endif |
75 | #endif |
75 | 76 | ||
76 | #endif /* _ASM_X86_PGTABLE_32_H */ |
77 | #endif /* _ASM_X86_PGTABLE_32_H */ |