Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5270 | serge | 1 | #ifndef _PGTABLE_NOPUD_H |
2 | #define _PGTABLE_NOPUD_H |
||
3 | |||
4 | #ifndef __ASSEMBLY__ |
||
5 | |||
6 | #define __PAGETABLE_PUD_FOLDED |
||
7 | |||
8 | /* |
||
9 | * Having the pud type consist of a pgd gets the size right, and allows |
||
10 | * us to conceptually access the pgd entry that this pud is folded into |
||
11 | * without casting. |
||
12 | */ |
||
13 | typedef struct { pgd_t pgd; } pud_t; |
||
14 | |||
15 | #define PUD_SHIFT PGDIR_SHIFT |
||
16 | #define PTRS_PER_PUD 1 |
||
17 | #define PUD_SIZE (1UL << PUD_SHIFT) |
||
18 | #define PUD_MASK (~(PUD_SIZE-1)) |
||
19 | |||
20 | /* |
||
21 | * The "pgd_xxx()" functions here are trivial for a folded two-level |
||
22 | * setup: the pud is never bad, and a pud always exists (as it's folded |
||
23 | * into the pgd entry) |
||
24 | */ |
||
25 | static inline int pgd_none(pgd_t pgd) { return 0; } |
||
26 | static inline int pgd_bad(pgd_t pgd) { return 0; } |
||
27 | static inline int pgd_present(pgd_t pgd) { return 1; } |
||
28 | static inline void pgd_clear(pgd_t *pgd) { } |
||
29 | #define pud_ERROR(pud) (pgd_ERROR((pud).pgd)) |
||
30 | |||
31 | #define pgd_populate(mm, pgd, pud) do { } while (0) |
||
32 | /* |
||
33 | * (puds are folded into pgds so this doesn't get actually called, |
||
34 | * but the define is needed for a generic inline function.) |
||
35 | */ |
||
36 | #define set_pgd(pgdptr, pgdval) set_pud((pud_t *)(pgdptr), (pud_t) { pgdval }) |
||
37 | |||
38 | static inline pud_t * pud_offset(pgd_t * pgd, unsigned long address) |
||
39 | { |
||
40 | return (pud_t *)pgd; |
||
41 | } |
||
42 | |||
43 | #define pud_val(x) (pgd_val((x).pgd)) |
||
44 | #define __pud(x) ((pud_t) { __pgd(x) } ) |
||
45 | |||
46 | #define pgd_page(pgd) (pud_page((pud_t){ pgd })) |
||
47 | #define pgd_page_vaddr(pgd) (pud_page_vaddr((pud_t){ pgd })) |
||
48 | |||
49 | /* |
||
50 | * allocating and freeing a pud is trivial: the 1-entry pud is |
||
51 | * inside the pgd, so has no extra memory associated with it. |
||
52 | */ |
||
53 | #define pud_alloc_one(mm, address) NULL |
||
54 | #define pud_free(mm, x) do { } while (0) |
||
55 | #define __pud_free_tlb(tlb, x, a) do { } while (0) |
||
56 | |||
57 | #undef pud_addr_end |
||
58 | #define pud_addr_end(addr, end) (end) |
||
59 | |||
60 | #endif /* __ASSEMBLY__ */ |
||
61 | #endif /* _PGTABLE_NOPUD_H */><> |