Blame view

include/asm-generic/pgtable-nopud.h 1.96 KB
b24413180   Greg Kroah-Hartman   License cleanup: ...
1
  /* SPDX-License-Identifier: GPL-2.0 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
2
3
4
5
  #ifndef _PGTABLE_NOPUD_H
  #define _PGTABLE_NOPUD_H
  
  #ifndef __ASSEMBLY__
30ec84266   Kirill A. Shutemov   asm-generic: intr...
6
7
8
  #ifdef __ARCH_USE_5LEVEL_HACK
  #include <asm-generic/pgtable-nop4d-hack.h>
  #else
048456dcf   Kirill A. Shutemov   asm-generic: intr...
9
  #include <asm-generic/pgtable-nop4d.h>
30ec84266   Kirill A. Shutemov   asm-generic: intr...
10

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
  #define __PAGETABLE_PUD_FOLDED
  
  /*
048456dcf   Kirill A. Shutemov   asm-generic: intr...
14
15
   * Having the pud type consist of a p4d gets the size right, and allows
   * us to conceptually access the p4d entry that this pud is folded into
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
   * without casting.
   */
048456dcf   Kirill A. Shutemov   asm-generic: intr...
18
  typedef struct { p4d_t p4d; } pud_t;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19

048456dcf   Kirill A. Shutemov   asm-generic: intr...
20
  #define PUD_SHIFT	P4D_SHIFT
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
24
25
  #define PTRS_PER_PUD	1
  #define PUD_SIZE  	(1UL << PUD_SHIFT)
  #define PUD_MASK  	(~(PUD_SIZE-1))
  
  /*
048456dcf   Kirill A. Shutemov   asm-generic: intr...
26
   * The "p4d_xxx()" functions here are trivial for a folded two-level
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
27
   * setup: the pud is never bad, and a pud always exists (as it's folded
048456dcf   Kirill A. Shutemov   asm-generic: intr...
28
   * into the p4d entry)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
   */
048456dcf   Kirill A. Shutemov   asm-generic: intr...
30
31
32
33
34
  static inline int p4d_none(p4d_t p4d)		{ return 0; }
  static inline int p4d_bad(p4d_t p4d)		{ return 0; }
  static inline int p4d_present(p4d_t p4d)	{ return 1; }
  static inline void p4d_clear(p4d_t *p4d)	{ }
  #define pud_ERROR(pud)				(p4d_ERROR((pud).p4d))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35

048456dcf   Kirill A. Shutemov   asm-generic: intr...
36
  #define p4d_populate(mm, p4d, pud)		do { } while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
  /*
048456dcf   Kirill A. Shutemov   asm-generic: intr...
38
   * (puds are folded into p4ds so this doesn't get actually called,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
40
   * but the define is needed for a generic inline function.)
   */
048456dcf   Kirill A. Shutemov   asm-generic: intr...
41
  #define set_p4d(p4dptr, p4dval)	set_pud((pud_t *)(p4dptr), (pud_t) { p4dval })
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
42

048456dcf   Kirill A. Shutemov   asm-generic: intr...
43
  static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
44
  {
048456dcf   Kirill A. Shutemov   asm-generic: intr...
45
  	return (pud_t *)p4d;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
  }
048456dcf   Kirill A. Shutemov   asm-generic: intr...
47
48
  #define pud_val(x)				(p4d_val((x).p4d))
  #define __pud(x)				((pud_t) { __p4d(x) })
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49

048456dcf   Kirill A. Shutemov   asm-generic: intr...
50
51
  #define p4d_page(p4d)				(pud_page((pud_t){ p4d }))
  #define p4d_page_vaddr(p4d)			(pud_page_vaddr((pud_t){ p4d }))
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52
53
54
  
  /*
   * allocating and freeing a pud is trivial: the 1-entry pud is
048456dcf   Kirill A. Shutemov   asm-generic: intr...
55
   * inside the p4d, so has no extra memory associated with it.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
   */
  #define pud_alloc_one(mm, address)		NULL
5e5419734   Benjamin Herrenschmidt   add mm argument t...
58
  #define pud_free(mm, x)				do { } while (0)
9e1b32caa   Benjamin Herrenschmidt   mm: Pass virtual ...
59
  #define __pud_free_tlb(tlb, x, a)		do { } while (0)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
60
61
62
63
64
  
  #undef  pud_addr_end
  #define pud_addr_end(addr, end)			(end)
  
  #endif /* __ASSEMBLY__ */
30ec84266   Kirill A. Shutemov   asm-generic: intr...
65
  #endif /* !__ARCH_USE_5LEVEL_HACK */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
  #endif /* _PGTABLE_NOPUD_H */