Merge tag 'audit-pr-20230829' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoor...
[linux-2.6-microblaze.git] / include / linux / pgtable.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_PGTABLE_H
3 #define _LINUX_PGTABLE_H
4
5 #include <linux/pfn.h>
6 #include <asm/pgtable.h>
7
8 #define PMD_ORDER       (PMD_SHIFT - PAGE_SHIFT)
9 #define PUD_ORDER       (PUD_SHIFT - PAGE_SHIFT)
10
11 #ifndef __ASSEMBLY__
12 #ifdef CONFIG_MMU
13
14 #include <linux/mm_types.h>
15 #include <linux/bug.h>
16 #include <linux/errno.h>
17 #include <asm-generic/pgtable_uffd.h>
18 #include <linux/page_table_check.h>
19
20 #if 5 - defined(__PAGETABLE_P4D_FOLDED) - defined(__PAGETABLE_PUD_FOLDED) - \
21         defined(__PAGETABLE_PMD_FOLDED) != CONFIG_PGTABLE_LEVELS
22 #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED
23 #endif
24
25 /*
26  * On almost all architectures and configurations, 0 can be used as the
27  * upper ceiling to free_pgtables(): on many architectures it has the same
28  * effect as using TASK_SIZE.  However, there is one configuration which
29  * must impose a more careful limit, to avoid freeing kernel pgtables.
30  */
31 #ifndef USER_PGTABLES_CEILING
32 #define USER_PGTABLES_CEILING   0UL
33 #endif
34
35 /*
36  * This defines the first usable user address. Platforms
37  * can override its value with custom FIRST_USER_ADDRESS
38  * defined in their respective <asm/pgtable.h>.
39  */
40 #ifndef FIRST_USER_ADDRESS
41 #define FIRST_USER_ADDRESS      0UL
42 #endif
43
44 /*
45  * This defines the generic helper for accessing PMD page
46  * table page. Although platforms can still override this
47  * via their respective <asm/pgtable.h>.
48  */
49 #ifndef pmd_pgtable
50 #define pmd_pgtable(pmd) pmd_page(pmd)
51 #endif
52
53 /*
54  * A page table page can be thought of an array like this: pXd_t[PTRS_PER_PxD]
55  *
56  * The pXx_index() functions return the index of the entry in the page
57  * table page which would control the given virtual address
58  *
59  * As these functions may be used by the same code for different levels of
60  * the page table folding, they are always available, regardless of
61  * CONFIG_PGTABLE_LEVELS value. For the folded levels they simply return 0
62  * because in such cases PTRS_PER_PxD equals 1.
63  */
64
65 static inline unsigned long pte_index(unsigned long address)
66 {
67         return (address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1);
68 }
69
70 #ifndef pmd_index
71 static inline unsigned long pmd_index(unsigned long address)
72 {
73         return (address >> PMD_SHIFT) & (PTRS_PER_PMD - 1);
74 }
75 #define pmd_index pmd_index
76 #endif
77
78 #ifndef pud_index
79 static inline unsigned long pud_index(unsigned long address)
80 {
81         return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1);
82 }
83 #define pud_index pud_index
84 #endif
85
86 #ifndef pgd_index
87 /* Must be a compile-time constant, so implement it as a macro */
88 #define pgd_index(a)  (((a) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
89 #endif
90
91 #ifndef pte_offset_kernel
92 static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
93 {
94         return (pte_t *)pmd_page_vaddr(*pmd) + pte_index(address);
95 }
96 #define pte_offset_kernel pte_offset_kernel
97 #endif
98
99 #ifdef CONFIG_HIGHPTE
100 #define __pte_map(pmd, address) \
101         ((pte_t *)kmap_local_page(pmd_page(*(pmd))) + pte_index((address)))
102 #define pte_unmap(pte)  do {    \
103         kunmap_local((pte));    \
104         rcu_read_unlock();      \
105 } while (0)
106 #else
107 static inline pte_t *__pte_map(pmd_t *pmd, unsigned long address)
108 {
109         return pte_offset_kernel(pmd, address);
110 }
111 static inline void pte_unmap(pte_t *pte)
112 {
113         rcu_read_unlock();
114 }
115 #endif
116
117 void pte_free_defer(struct mm_struct *mm, pgtable_t pgtable);
118
119 /* Find an entry in the second-level page table.. */
120 #ifndef pmd_offset
121 static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
122 {
123         return pud_pgtable(*pud) + pmd_index(address);
124 }
125 #define pmd_offset pmd_offset
126 #endif
127
128 #ifndef pud_offset
129 static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
130 {
131         return p4d_pgtable(*p4d) + pud_index(address);
132 }
133 #define pud_offset pud_offset
134 #endif
135
136 static inline pgd_t *pgd_offset_pgd(pgd_t *pgd, unsigned long address)
137 {
138         return (pgd + pgd_index(address));
139 };
140
141 /*
142  * a shortcut to get a pgd_t in a given mm
143  */
144 #ifndef pgd_offset
145 #define pgd_offset(mm, address)         pgd_offset_pgd((mm)->pgd, (address))
146 #endif
147
148 /*
149  * a shortcut which implies the use of the kernel's pgd, instead
150  * of a process's
151  */
152 #ifndef pgd_offset_k
153 #define pgd_offset_k(address)           pgd_offset(&init_mm, (address))
154 #endif
155
156 /*
157  * In many cases it is known that a virtual address is mapped at PMD or PTE
158  * level, so instead of traversing all the page table levels, we can get a
159  * pointer to the PMD entry in user or kernel page table or translate a virtual
160  * address to the pointer in the PTE in the kernel page tables with simple
161  * helpers.
162  */
163 static inline pmd_t *pmd_off(struct mm_struct *mm, unsigned long va)
164 {
165         return pmd_offset(pud_offset(p4d_offset(pgd_offset(mm, va), va), va), va);
166 }
167
168 static inline pmd_t *pmd_off_k(unsigned long va)
169 {
170         return pmd_offset(pud_offset(p4d_offset(pgd_offset_k(va), va), va), va);
171 }
172
173 static inline pte_t *virt_to_kpte(unsigned long vaddr)
174 {
175         pmd_t *pmd = pmd_off_k(vaddr);
176
177         return pmd_none(*pmd) ? NULL : pte_offset_kernel(pmd, vaddr);
178 }
179
180 #ifndef pmd_young
181 static inline int pmd_young(pmd_t pmd)
182 {
183         return 0;
184 }
185 #endif
186
187 /*
188  * A facility to provide lazy MMU batching.  This allows PTE updates and
189  * page invalidations to be delayed until a call to leave lazy MMU mode
190  * is issued.  Some architectures may benefit from doing this, and it is
191  * beneficial for both shadow and direct mode hypervisors, which may batch
192  * the PTE updates which happen during this window.  Note that using this
193  * interface requires that read hazards be removed from the code.  A read
194  * hazard could result in the direct mode hypervisor case, since the actual
195  * write to the page tables may not yet have taken place, so reads though
196  * a raw PTE pointer after it has been modified are not guaranteed to be
197  * up to date.  This mode can only be entered and left under the protection of
198  * the page table locks for all page tables which may be modified.  In the UP
199  * case, this is required so that preemption is disabled, and in the SMP case,
200  * it must synchronize the delayed page table writes properly on other CPUs.
201  */
202 #ifndef __HAVE_ARCH_ENTER_LAZY_MMU_MODE
203 #define arch_enter_lazy_mmu_mode()      do {} while (0)
204 #define arch_leave_lazy_mmu_mode()      do {} while (0)
205 #define arch_flush_lazy_mmu_mode()      do {} while (0)
206 #endif
207
208 #ifndef set_ptes
209 /**
210  * set_ptes - Map consecutive pages to a contiguous range of addresses.
211  * @mm: Address space to map the pages into.
212  * @addr: Address to map the first page at.
213  * @ptep: Page table pointer for the first entry.
214  * @pte: Page table entry for the first page.
215  * @nr: Number of pages to map.
216  *
217  * May be overridden by the architecture, or the architecture can define
218  * set_pte() and PFN_PTE_SHIFT.
219  *
220  * Context: The caller holds the page table lock.  The pages all belong
221  * to the same folio.  The PTEs are all in the same PMD.
222  */
223 static inline void set_ptes(struct mm_struct *mm, unsigned long addr,
224                 pte_t *ptep, pte_t pte, unsigned int nr)
225 {
226         page_table_check_ptes_set(mm, ptep, pte, nr);
227
228         arch_enter_lazy_mmu_mode();
229         for (;;) {
230                 set_pte(ptep, pte);
231                 if (--nr == 0)
232                         break;
233                 ptep++;
234                 pte = __pte(pte_val(pte) + (1UL << PFN_PTE_SHIFT));
235         }
236         arch_leave_lazy_mmu_mode();
237 }
238 #endif
239 #define set_pte_at(mm, addr, ptep, pte) set_ptes(mm, addr, ptep, pte, 1)
240
241 #ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
242 extern int ptep_set_access_flags(struct vm_area_struct *vma,
243                                  unsigned long address, pte_t *ptep,
244                                  pte_t entry, int dirty);
245 #endif
246
247 #ifndef __HAVE_ARCH_PMDP_SET_ACCESS_FLAGS
248 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
249 extern int pmdp_set_access_flags(struct vm_area_struct *vma,
250                                  unsigned long address, pmd_t *pmdp,
251                                  pmd_t entry, int dirty);
252 extern int pudp_set_access_flags(struct vm_area_struct *vma,
253                                  unsigned long address, pud_t *pudp,
254                                  pud_t entry, int dirty);
255 #else
256 static inline int pmdp_set_access_flags(struct vm_area_struct *vma,
257                                         unsigned long address, pmd_t *pmdp,
258                                         pmd_t entry, int dirty)
259 {
260         BUILD_BUG();
261         return 0;
262 }
263 static inline int pudp_set_access_flags(struct vm_area_struct *vma,
264                                         unsigned long address, pud_t *pudp,
265                                         pud_t entry, int dirty)
266 {
267         BUILD_BUG();
268         return 0;
269 }
270 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
271 #endif
272
273 #ifndef ptep_get
274 static inline pte_t ptep_get(pte_t *ptep)
275 {
276         return READ_ONCE(*ptep);
277 }
278 #endif
279
280 #ifndef pmdp_get
281 static inline pmd_t pmdp_get(pmd_t *pmdp)
282 {
283         return READ_ONCE(*pmdp);
284 }
285 #endif
286
287 #ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
288 static inline int ptep_test_and_clear_young(struct vm_area_struct *vma,
289                                             unsigned long address,
290                                             pte_t *ptep)
291 {
292         pte_t pte = ptep_get(ptep);
293         int r = 1;
294         if (!pte_young(pte))
295                 r = 0;
296         else
297                 set_pte_at(vma->vm_mm, address, ptep, pte_mkold(pte));
298         return r;
299 }
300 #endif
301
302 #ifndef __HAVE_ARCH_PMDP_TEST_AND_CLEAR_YOUNG
303 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG)
304 static inline int pmdp_test_and_clear_young(struct vm_area_struct *vma,
305                                             unsigned long address,
306                                             pmd_t *pmdp)
307 {
308         pmd_t pmd = *pmdp;
309         int r = 1;
310         if (!pmd_young(pmd))
311                 r = 0;
312         else
313                 set_pmd_at(vma->vm_mm, address, pmdp, pmd_mkold(pmd));
314         return r;
315 }
316 #else
317 static inline int pmdp_test_and_clear_young(struct vm_area_struct *vma,
318                                             unsigned long address,
319                                             pmd_t *pmdp)
320 {
321         BUILD_BUG();
322         return 0;
323 }
324 #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG */
325 #endif
326
327 #ifndef __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
328 int ptep_clear_flush_young(struct vm_area_struct *vma,
329                            unsigned long address, pte_t *ptep);
330 #endif
331
332 #ifndef __HAVE_ARCH_PMDP_CLEAR_YOUNG_FLUSH
333 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
334 extern int pmdp_clear_flush_young(struct vm_area_struct *vma,
335                                   unsigned long address, pmd_t *pmdp);
336 #else
337 /*
338  * Despite relevant to THP only, this API is called from generic rmap code
339  * under PageTransHuge(), hence needs a dummy implementation for !THP
340  */
341 static inline int pmdp_clear_flush_young(struct vm_area_struct *vma,
342                                          unsigned long address, pmd_t *pmdp)
343 {
344         BUILD_BUG();
345         return 0;
346 }
347 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
348 #endif
349
350 #ifndef arch_has_hw_nonleaf_pmd_young
351 /*
352  * Return whether the accessed bit in non-leaf PMD entries is supported on the
353  * local CPU.
354  */
355 static inline bool arch_has_hw_nonleaf_pmd_young(void)
356 {
357         return IS_ENABLED(CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG);
358 }
359 #endif
360
361 #ifndef arch_has_hw_pte_young
362 /*
363  * Return whether the accessed bit is supported on the local CPU.
364  *
365  * This stub assumes accessing through an old PTE triggers a page fault.
366  * Architectures that automatically set the access bit should overwrite it.
367  */
368 static inline bool arch_has_hw_pte_young(void)
369 {
370         return false;
371 }
372 #endif
373
374 #ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR
375 static inline pte_t ptep_get_and_clear(struct mm_struct *mm,
376                                        unsigned long address,
377                                        pte_t *ptep)
378 {
379         pte_t pte = ptep_get(ptep);
380         pte_clear(mm, address, ptep);
381         page_table_check_pte_clear(mm, pte);
382         return pte;
383 }
384 #endif
385
386 static inline void ptep_clear(struct mm_struct *mm, unsigned long addr,
387                               pte_t *ptep)
388 {
389         ptep_get_and_clear(mm, addr, ptep);
390 }
391
392 #ifdef CONFIG_GUP_GET_PXX_LOW_HIGH
393 /*
394  * For walking the pagetables without holding any locks.  Some architectures
395  * (eg x86-32 PAE) cannot load the entries atomically without using expensive
396  * instructions.  We are guaranteed that a PTE will only either go from not
397  * present to present, or present to not present -- it will not switch to a
398  * completely different present page without a TLB flush inbetween; which we
399  * are blocking by holding interrupts off.
400  *
401  * Setting ptes from not present to present goes:
402  *
403  *   ptep->pte_high = h;
404  *   smp_wmb();
405  *   ptep->pte_low = l;
406  *
407  * And present to not present goes:
408  *
409  *   ptep->pte_low = 0;
410  *   smp_wmb();
411  *   ptep->pte_high = 0;
412  *
413  * We must ensure here that the load of pte_low sees 'l' IFF pte_high sees 'h'.
414  * We load pte_high *after* loading pte_low, which ensures we don't see an older
415  * value of pte_high.  *Then* we recheck pte_low, which ensures that we haven't
416  * picked up a changed pte high. We might have gotten rubbish values from
417  * pte_low and pte_high, but we are guaranteed that pte_low will not have the
418  * present bit set *unless* it is 'l'. Because get_user_pages_fast() only
419  * operates on present ptes we're safe.
420  */
421 static inline pte_t ptep_get_lockless(pte_t *ptep)
422 {
423         pte_t pte;
424
425         do {
426                 pte.pte_low = ptep->pte_low;
427                 smp_rmb();
428                 pte.pte_high = ptep->pte_high;
429                 smp_rmb();
430         } while (unlikely(pte.pte_low != ptep->pte_low));
431
432         return pte;
433 }
434 #define ptep_get_lockless ptep_get_lockless
435
436 #if CONFIG_PGTABLE_LEVELS > 2
437 static inline pmd_t pmdp_get_lockless(pmd_t *pmdp)
438 {
439         pmd_t pmd;
440
441         do {
442                 pmd.pmd_low = pmdp->pmd_low;
443                 smp_rmb();
444                 pmd.pmd_high = pmdp->pmd_high;
445                 smp_rmb();
446         } while (unlikely(pmd.pmd_low != pmdp->pmd_low));
447
448         return pmd;
449 }
450 #define pmdp_get_lockless pmdp_get_lockless
451 #define pmdp_get_lockless_sync() tlb_remove_table_sync_one()
452 #endif /* CONFIG_PGTABLE_LEVELS > 2 */
453 #endif /* CONFIG_GUP_GET_PXX_LOW_HIGH */
454
455 /*
456  * We require that the PTE can be read atomically.
457  */
458 #ifndef ptep_get_lockless
459 static inline pte_t ptep_get_lockless(pte_t *ptep)
460 {
461         return ptep_get(ptep);
462 }
463 #endif
464
465 #ifndef pmdp_get_lockless
466 static inline pmd_t pmdp_get_lockless(pmd_t *pmdp)
467 {
468         return pmdp_get(pmdp);
469 }
470 static inline void pmdp_get_lockless_sync(void)
471 {
472 }
473 #endif
474
475 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
476 #ifndef __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR
477 static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
478                                             unsigned long address,
479                                             pmd_t *pmdp)
480 {
481         pmd_t pmd = *pmdp;
482
483         pmd_clear(pmdp);
484         page_table_check_pmd_clear(mm, pmd);
485
486         return pmd;
487 }
488 #endif /* __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR */
489 #ifndef __HAVE_ARCH_PUDP_HUGE_GET_AND_CLEAR
490 static inline pud_t pudp_huge_get_and_clear(struct mm_struct *mm,
491                                             unsigned long address,
492                                             pud_t *pudp)
493 {
494         pud_t pud = *pudp;
495
496         pud_clear(pudp);
497         page_table_check_pud_clear(mm, pud);
498
499         return pud;
500 }
501 #endif /* __HAVE_ARCH_PUDP_HUGE_GET_AND_CLEAR */
502 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
503
504 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
505 #ifndef __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR_FULL
506 static inline pmd_t pmdp_huge_get_and_clear_full(struct vm_area_struct *vma,
507                                             unsigned long address, pmd_t *pmdp,
508                                             int full)
509 {
510         return pmdp_huge_get_and_clear(vma->vm_mm, address, pmdp);
511 }
512 #endif
513
514 #ifndef __HAVE_ARCH_PUDP_HUGE_GET_AND_CLEAR_FULL
515 static inline pud_t pudp_huge_get_and_clear_full(struct vm_area_struct *vma,
516                                             unsigned long address, pud_t *pudp,
517                                             int full)
518 {
519         return pudp_huge_get_and_clear(vma->vm_mm, address, pudp);
520 }
521 #endif
522 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
523
524 #ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL
525 static inline pte_t ptep_get_and_clear_full(struct mm_struct *mm,
526                                             unsigned long address, pte_t *ptep,
527                                             int full)
528 {
529         return ptep_get_and_clear(mm, address, ptep);
530 }
531 #endif
532
533
534 /*
535  * If two threads concurrently fault at the same page, the thread that
536  * won the race updates the PTE and its local TLB/Cache. The other thread
537  * gives up, simply does nothing, and continues; on architectures where
538  * software can update TLB,  local TLB can be updated here to avoid next page
539  * fault. This function updates TLB only, do nothing with cache or others.
540  * It is the difference with function update_mmu_cache.
541  */
542 #ifndef __HAVE_ARCH_UPDATE_MMU_TLB
543 static inline void update_mmu_tlb(struct vm_area_struct *vma,
544                                 unsigned long address, pte_t *ptep)
545 {
546 }
547 #define __HAVE_ARCH_UPDATE_MMU_TLB
548 #endif
549
550 /*
551  * Some architectures may be able to avoid expensive synchronization
552  * primitives when modifications are made to PTE's which are already
553  * not present, or in the process of an address space destruction.
554  */
555 #ifndef __HAVE_ARCH_PTE_CLEAR_NOT_PRESENT_FULL
556 static inline void pte_clear_not_present_full(struct mm_struct *mm,
557                                               unsigned long address,
558                                               pte_t *ptep,
559                                               int full)
560 {
561         pte_clear(mm, address, ptep);
562 }
563 #endif
564
565 #ifndef __HAVE_ARCH_PTEP_CLEAR_FLUSH
566 extern pte_t ptep_clear_flush(struct vm_area_struct *vma,
567                               unsigned long address,
568                               pte_t *ptep);
569 #endif
570
571 #ifndef __HAVE_ARCH_PMDP_HUGE_CLEAR_FLUSH
572 extern pmd_t pmdp_huge_clear_flush(struct vm_area_struct *vma,
573                               unsigned long address,
574                               pmd_t *pmdp);
575 extern pud_t pudp_huge_clear_flush(struct vm_area_struct *vma,
576                               unsigned long address,
577                               pud_t *pudp);
578 #endif
579
580 #ifndef __HAVE_ARCH_PTEP_SET_WRPROTECT
581 struct mm_struct;
582 static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long address, pte_t *ptep)
583 {
584         pte_t old_pte = ptep_get(ptep);
585         set_pte_at(mm, address, ptep, pte_wrprotect(old_pte));
586 }
587 #endif
588
589 /*
590  * On some architectures hardware does not set page access bit when accessing
591  * memory page, it is responsibility of software setting this bit. It brings
592  * out extra page fault penalty to track page access bit. For optimization page
593  * access bit can be set during all page fault flow on these arches.
594  * To be differentiate with macro pte_mkyoung, this macro is used on platforms
595  * where software maintains page access bit.
596  */
597 #ifndef pte_sw_mkyoung
598 static inline pte_t pte_sw_mkyoung(pte_t pte)
599 {
600         return pte;
601 }
602 #define pte_sw_mkyoung  pte_sw_mkyoung
603 #endif
604
605 #ifndef __HAVE_ARCH_PMDP_SET_WRPROTECT
606 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
607 static inline void pmdp_set_wrprotect(struct mm_struct *mm,
608                                       unsigned long address, pmd_t *pmdp)
609 {
610         pmd_t old_pmd = *pmdp;
611         set_pmd_at(mm, address, pmdp, pmd_wrprotect(old_pmd));
612 }
613 #else
614 static inline void pmdp_set_wrprotect(struct mm_struct *mm,
615                                       unsigned long address, pmd_t *pmdp)
616 {
617         BUILD_BUG();
618 }
619 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
620 #endif
621 #ifndef __HAVE_ARCH_PUDP_SET_WRPROTECT
622 #ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD
623 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
624 static inline void pudp_set_wrprotect(struct mm_struct *mm,
625                                       unsigned long address, pud_t *pudp)
626 {
627         pud_t old_pud = *pudp;
628
629         set_pud_at(mm, address, pudp, pud_wrprotect(old_pud));
630 }
631 #else
632 static inline void pudp_set_wrprotect(struct mm_struct *mm,
633                                       unsigned long address, pud_t *pudp)
634 {
635         BUILD_BUG();
636 }
637 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
638 #endif /* CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */
639 #endif
640
641 #ifndef pmdp_collapse_flush
642 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
643 extern pmd_t pmdp_collapse_flush(struct vm_area_struct *vma,
644                                  unsigned long address, pmd_t *pmdp);
645 #else
646 static inline pmd_t pmdp_collapse_flush(struct vm_area_struct *vma,
647                                         unsigned long address,
648                                         pmd_t *pmdp)
649 {
650         BUILD_BUG();
651         return *pmdp;
652 }
653 #define pmdp_collapse_flush pmdp_collapse_flush
654 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
655 #endif
656
657 #ifndef __HAVE_ARCH_PGTABLE_DEPOSIT
658 extern void pgtable_trans_huge_deposit(struct mm_struct *mm, pmd_t *pmdp,
659                                        pgtable_t pgtable);
660 #endif
661
662 #ifndef __HAVE_ARCH_PGTABLE_WITHDRAW
663 extern pgtable_t pgtable_trans_huge_withdraw(struct mm_struct *mm, pmd_t *pmdp);
664 #endif
665
666 #ifndef arch_needs_pgtable_deposit
667 #define arch_needs_pgtable_deposit() (false)
668 #endif
669
670 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
671 /*
672  * This is an implementation of pmdp_establish() that is only suitable for an
673  * architecture that doesn't have hardware dirty/accessed bits. In this case we
674  * can't race with CPU which sets these bits and non-atomic approach is fine.
675  */
676 static inline pmd_t generic_pmdp_establish(struct vm_area_struct *vma,
677                 unsigned long address, pmd_t *pmdp, pmd_t pmd)
678 {
679         pmd_t old_pmd = *pmdp;
680         set_pmd_at(vma->vm_mm, address, pmdp, pmd);
681         return old_pmd;
682 }
683 #endif
684
685 #ifndef __HAVE_ARCH_PMDP_INVALIDATE
686 extern pmd_t pmdp_invalidate(struct vm_area_struct *vma, unsigned long address,
687                             pmd_t *pmdp);
688 #endif
689
690 #ifndef __HAVE_ARCH_PMDP_INVALIDATE_AD
691
692 /*
693  * pmdp_invalidate_ad() invalidates the PMD while changing a transparent
694  * hugepage mapping in the page tables. This function is similar to
695  * pmdp_invalidate(), but should only be used if the access and dirty bits would
696  * not be cleared by the software in the new PMD value. The function ensures
697  * that hardware changes of the access and dirty bits updates would not be lost.
698  *
699  * Doing so can allow in certain architectures to avoid a TLB flush in most
700  * cases. Yet, another TLB flush might be necessary later if the PMD update
701  * itself requires such flush (e.g., if protection was set to be stricter). Yet,
702  * even when a TLB flush is needed because of the update, the caller may be able
703  * to batch these TLB flushing operations, so fewer TLB flush operations are
704  * needed.
705  */
706 extern pmd_t pmdp_invalidate_ad(struct vm_area_struct *vma,
707                                 unsigned long address, pmd_t *pmdp);
708 #endif
709
710 #ifndef __HAVE_ARCH_PTE_SAME
711 static inline int pte_same(pte_t pte_a, pte_t pte_b)
712 {
713         return pte_val(pte_a) == pte_val(pte_b);
714 }
715 #endif
716
717 #ifndef __HAVE_ARCH_PTE_UNUSED
718 /*
719  * Some architectures provide facilities to virtualization guests
720  * so that they can flag allocated pages as unused. This allows the
721  * host to transparently reclaim unused pages. This function returns
722  * whether the pte's page is unused.
723  */
724 static inline int pte_unused(pte_t pte)
725 {
726         return 0;
727 }
728 #endif
729
730 #ifndef pte_access_permitted
731 #define pte_access_permitted(pte, write) \
732         (pte_present(pte) && (!(write) || pte_write(pte)))
733 #endif
734
735 #ifndef pmd_access_permitted
736 #define pmd_access_permitted(pmd, write) \
737         (pmd_present(pmd) && (!(write) || pmd_write(pmd)))
738 #endif
739
740 #ifndef pud_access_permitted
741 #define pud_access_permitted(pud, write) \
742         (pud_present(pud) && (!(write) || pud_write(pud)))
743 #endif
744
745 #ifndef p4d_access_permitted
746 #define p4d_access_permitted(p4d, write) \
747         (p4d_present(p4d) && (!(write) || p4d_write(p4d)))
748 #endif
749
750 #ifndef pgd_access_permitted
751 #define pgd_access_permitted(pgd, write) \
752         (pgd_present(pgd) && (!(write) || pgd_write(pgd)))
753 #endif
754
755 #ifndef __HAVE_ARCH_PMD_SAME
756 static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b)
757 {
758         return pmd_val(pmd_a) == pmd_val(pmd_b);
759 }
760 #endif
761
762 #ifndef pud_same
763 static inline int pud_same(pud_t pud_a, pud_t pud_b)
764 {
765         return pud_val(pud_a) == pud_val(pud_b);
766 }
767 #define pud_same pud_same
768 #endif
769
770 #ifndef __HAVE_ARCH_P4D_SAME
771 static inline int p4d_same(p4d_t p4d_a, p4d_t p4d_b)
772 {
773         return p4d_val(p4d_a) == p4d_val(p4d_b);
774 }
775 #endif
776
777 #ifndef __HAVE_ARCH_PGD_SAME
778 static inline int pgd_same(pgd_t pgd_a, pgd_t pgd_b)
779 {
780         return pgd_val(pgd_a) == pgd_val(pgd_b);
781 }
782 #endif
783
784 /*
785  * Use set_p*_safe(), and elide TLB flushing, when confident that *no*
786  * TLB flush will be required as a result of the "set". For example, use
787  * in scenarios where it is known ahead of time that the routine is
788  * setting non-present entries, or re-setting an existing entry to the
789  * same value. Otherwise, use the typical "set" helpers and flush the
790  * TLB.
791  */
792 #define set_pte_safe(ptep, pte) \
793 ({ \
794         WARN_ON_ONCE(pte_present(*ptep) && !pte_same(*ptep, pte)); \
795         set_pte(ptep, pte); \
796 })
797
798 #define set_pmd_safe(pmdp, pmd) \
799 ({ \
800         WARN_ON_ONCE(pmd_present(*pmdp) && !pmd_same(*pmdp, pmd)); \
801         set_pmd(pmdp, pmd); \
802 })
803
804 #define set_pud_safe(pudp, pud) \
805 ({ \
806         WARN_ON_ONCE(pud_present(*pudp) && !pud_same(*pudp, pud)); \
807         set_pud(pudp, pud); \
808 })
809
810 #define set_p4d_safe(p4dp, p4d) \
811 ({ \
812         WARN_ON_ONCE(p4d_present(*p4dp) && !p4d_same(*p4dp, p4d)); \
813         set_p4d(p4dp, p4d); \
814 })
815
816 #define set_pgd_safe(pgdp, pgd) \
817 ({ \
818         WARN_ON_ONCE(pgd_present(*pgdp) && !pgd_same(*pgdp, pgd)); \
819         set_pgd(pgdp, pgd); \
820 })
821
822 #ifndef __HAVE_ARCH_DO_SWAP_PAGE
823 /*
824  * Some architectures support metadata associated with a page. When a
825  * page is being swapped out, this metadata must be saved so it can be
826  * restored when the page is swapped back in. SPARC M7 and newer
827  * processors support an ADI (Application Data Integrity) tag for the
828  * page as metadata for the page. arch_do_swap_page() can restore this
829  * metadata when a page is swapped back in.
830  */
831 static inline void arch_do_swap_page(struct mm_struct *mm,
832                                      struct vm_area_struct *vma,
833                                      unsigned long addr,
834                                      pte_t pte, pte_t oldpte)
835 {
836
837 }
838 #endif
839
840 #ifndef __HAVE_ARCH_UNMAP_ONE
841 /*
842  * Some architectures support metadata associated with a page. When a
843  * page is being swapped out, this metadata must be saved so it can be
844  * restored when the page is swapped back in. SPARC M7 and newer
845  * processors support an ADI (Application Data Integrity) tag for the
846  * page as metadata for the page. arch_unmap_one() can save this
847  * metadata on a swap-out of a page.
848  */
849 static inline int arch_unmap_one(struct mm_struct *mm,
850                                   struct vm_area_struct *vma,
851                                   unsigned long addr,
852                                   pte_t orig_pte)
853 {
854         return 0;
855 }
856 #endif
857
858 /*
859  * Allow architectures to preserve additional metadata associated with
860  * swapped-out pages. The corresponding __HAVE_ARCH_SWAP_* macros and function
861  * prototypes must be defined in the arch-specific asm/pgtable.h file.
862  */
863 #ifndef __HAVE_ARCH_PREPARE_TO_SWAP
864 static inline int arch_prepare_to_swap(struct page *page)
865 {
866         return 0;
867 }
868 #endif
869
870 #ifndef __HAVE_ARCH_SWAP_INVALIDATE
871 static inline void arch_swap_invalidate_page(int type, pgoff_t offset)
872 {
873 }
874
875 static inline void arch_swap_invalidate_area(int type)
876 {
877 }
878 #endif
879
880 #ifndef __HAVE_ARCH_SWAP_RESTORE
881 static inline void arch_swap_restore(swp_entry_t entry, struct folio *folio)
882 {
883 }
884 #endif
885
886 #ifndef __HAVE_ARCH_PGD_OFFSET_GATE
887 #define pgd_offset_gate(mm, addr)       pgd_offset(mm, addr)
888 #endif
889
890 #ifndef __HAVE_ARCH_MOVE_PTE
891 #define move_pte(pte, prot, old_addr, new_addr) (pte)
892 #endif
893
894 #ifndef pte_accessible
895 # define pte_accessible(mm, pte)        ((void)(pte), 1)
896 #endif
897
898 #ifndef flush_tlb_fix_spurious_fault
899 #define flush_tlb_fix_spurious_fault(vma, address, ptep) flush_tlb_page(vma, address)
900 #endif
901
902 /*
903  * When walking page tables, get the address of the next boundary,
904  * or the end address of the range if that comes earlier.  Although no
905  * vma end wraps to 0, rounded up __boundary may wrap to 0 throughout.
906  */
907
908 #define pgd_addr_end(addr, end)                                         \
909 ({      unsigned long __boundary = ((addr) + PGDIR_SIZE) & PGDIR_MASK;  \
910         (__boundary - 1 < (end) - 1)? __boundary: (end);                \
911 })
912
913 #ifndef p4d_addr_end
914 #define p4d_addr_end(addr, end)                                         \
915 ({      unsigned long __boundary = ((addr) + P4D_SIZE) & P4D_MASK;      \
916         (__boundary - 1 < (end) - 1)? __boundary: (end);                \
917 })
918 #endif
919
920 #ifndef pud_addr_end
921 #define pud_addr_end(addr, end)                                         \
922 ({      unsigned long __boundary = ((addr) + PUD_SIZE) & PUD_MASK;      \
923         (__boundary - 1 < (end) - 1)? __boundary: (end);                \
924 })
925 #endif
926
927 #ifndef pmd_addr_end
928 #define pmd_addr_end(addr, end)                                         \
929 ({      unsigned long __boundary = ((addr) + PMD_SIZE) & PMD_MASK;      \
930         (__boundary - 1 < (end) - 1)? __boundary: (end);                \
931 })
932 #endif
933
934 /*
935  * When walking page tables, we usually want to skip any p?d_none entries;
936  * and any p?d_bad entries - reporting the error before resetting to none.
937  * Do the tests inline, but report and clear the bad entry in mm/memory.c.
938  */
939 void pgd_clear_bad(pgd_t *);
940
941 #ifndef __PAGETABLE_P4D_FOLDED
942 void p4d_clear_bad(p4d_t *);
943 #else
944 #define p4d_clear_bad(p4d)        do { } while (0)
945 #endif
946
947 #ifndef __PAGETABLE_PUD_FOLDED
948 void pud_clear_bad(pud_t *);
949 #else
950 #define pud_clear_bad(p4d)        do { } while (0)
951 #endif
952
953 void pmd_clear_bad(pmd_t *);
954
955 static inline int pgd_none_or_clear_bad(pgd_t *pgd)
956 {
957         if (pgd_none(*pgd))
958                 return 1;
959         if (unlikely(pgd_bad(*pgd))) {
960                 pgd_clear_bad(pgd);
961                 return 1;
962         }
963         return 0;
964 }
965
966 static inline int p4d_none_or_clear_bad(p4d_t *p4d)
967 {
968         if (p4d_none(*p4d))
969                 return 1;
970         if (unlikely(p4d_bad(*p4d))) {
971                 p4d_clear_bad(p4d);
972                 return 1;
973         }
974         return 0;
975 }
976
977 static inline int pud_none_or_clear_bad(pud_t *pud)
978 {
979         if (pud_none(*pud))
980                 return 1;
981         if (unlikely(pud_bad(*pud))) {
982                 pud_clear_bad(pud);
983                 return 1;
984         }
985         return 0;
986 }
987
988 static inline int pmd_none_or_clear_bad(pmd_t *pmd)
989 {
990         if (pmd_none(*pmd))
991                 return 1;
992         if (unlikely(pmd_bad(*pmd))) {
993                 pmd_clear_bad(pmd);
994                 return 1;
995         }
996         return 0;
997 }
998
999 static inline pte_t __ptep_modify_prot_start(struct vm_area_struct *vma,
1000                                              unsigned long addr,
1001                                              pte_t *ptep)
1002 {
1003         /*
1004          * Get the current pte state, but zero it out to make it
1005          * non-present, preventing the hardware from asynchronously
1006          * updating it.
1007          */
1008         return ptep_get_and_clear(vma->vm_mm, addr, ptep);
1009 }
1010
1011 static inline void __ptep_modify_prot_commit(struct vm_area_struct *vma,
1012                                              unsigned long addr,
1013                                              pte_t *ptep, pte_t pte)
1014 {
1015         /*
1016          * The pte is non-present, so there's no hardware state to
1017          * preserve.
1018          */
1019         set_pte_at(vma->vm_mm, addr, ptep, pte);
1020 }
1021
1022 #ifndef __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION
1023 /*
1024  * Start a pte protection read-modify-write transaction, which
1025  * protects against asynchronous hardware modifications to the pte.
1026  * The intention is not to prevent the hardware from making pte
1027  * updates, but to prevent any updates it may make from being lost.
1028  *
1029  * This does not protect against other software modifications of the
1030  * pte; the appropriate pte lock must be held over the transaction.
1031  *
1032  * Note that this interface is intended to be batchable, meaning that
1033  * ptep_modify_prot_commit may not actually update the pte, but merely
1034  * queue the update to be done at some later time.  The update must be
1035  * actually committed before the pte lock is released, however.
1036  */
1037 static inline pte_t ptep_modify_prot_start(struct vm_area_struct *vma,
1038                                            unsigned long addr,
1039                                            pte_t *ptep)
1040 {
1041         return __ptep_modify_prot_start(vma, addr, ptep);
1042 }
1043
1044 /*
1045  * Commit an update to a pte, leaving any hardware-controlled bits in
1046  * the PTE unmodified.
1047  */
1048 static inline void ptep_modify_prot_commit(struct vm_area_struct *vma,
1049                                            unsigned long addr,
1050                                            pte_t *ptep, pte_t old_pte, pte_t pte)
1051 {
1052         __ptep_modify_prot_commit(vma, addr, ptep, pte);
1053 }
1054 #endif /* __HAVE_ARCH_PTEP_MODIFY_PROT_TRANSACTION */
1055 #endif /* CONFIG_MMU */
1056
1057 /*
1058  * No-op macros that just return the current protection value. Defined here
1059  * because these macros can be used even if CONFIG_MMU is not defined.
1060  */
1061
1062 #ifndef pgprot_nx
1063 #define pgprot_nx(prot) (prot)
1064 #endif
1065
1066 #ifndef pgprot_noncached
1067 #define pgprot_noncached(prot)  (prot)
1068 #endif
1069
1070 #ifndef pgprot_writecombine
1071 #define pgprot_writecombine pgprot_noncached
1072 #endif
1073
1074 #ifndef pgprot_writethrough
1075 #define pgprot_writethrough pgprot_noncached
1076 #endif
1077
1078 #ifndef pgprot_device
1079 #define pgprot_device pgprot_noncached
1080 #endif
1081
1082 #ifndef pgprot_mhp
1083 #define pgprot_mhp(prot)        (prot)
1084 #endif
1085
1086 #ifdef CONFIG_MMU
1087 #ifndef pgprot_modify
1088 #define pgprot_modify pgprot_modify
1089 static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
1090 {
1091         if (pgprot_val(oldprot) == pgprot_val(pgprot_noncached(oldprot)))
1092                 newprot = pgprot_noncached(newprot);
1093         if (pgprot_val(oldprot) == pgprot_val(pgprot_writecombine(oldprot)))
1094                 newprot = pgprot_writecombine(newprot);
1095         if (pgprot_val(oldprot) == pgprot_val(pgprot_device(oldprot)))
1096                 newprot = pgprot_device(newprot);
1097         return newprot;
1098 }
1099 #endif
1100 #endif /* CONFIG_MMU */
1101
1102 #ifndef pgprot_encrypted
1103 #define pgprot_encrypted(prot)  (prot)
1104 #endif
1105
1106 #ifndef pgprot_decrypted
1107 #define pgprot_decrypted(prot)  (prot)
1108 #endif
1109
1110 /*
1111  * A facility to provide batching of the reload of page tables and
1112  * other process state with the actual context switch code for
1113  * paravirtualized guests.  By convention, only one of the batched
1114  * update (lazy) modes (CPU, MMU) should be active at any given time,
1115  * entry should never be nested, and entry and exits should always be
1116  * paired.  This is for sanity of maintaining and reasoning about the
1117  * kernel code.  In this case, the exit (end of the context switch) is
1118  * in architecture-specific code, and so doesn't need a generic
1119  * definition.
1120  */
1121 #ifndef __HAVE_ARCH_START_CONTEXT_SWITCH
1122 #define arch_start_context_switch(prev) do {} while (0)
1123 #endif
1124
1125 #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY
1126 #ifndef CONFIG_ARCH_ENABLE_THP_MIGRATION
1127 static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd)
1128 {
1129         return pmd;
1130 }
1131
1132 static inline int pmd_swp_soft_dirty(pmd_t pmd)
1133 {
1134         return 0;
1135 }
1136
1137 static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd)
1138 {
1139         return pmd;
1140 }
1141 #endif
1142 #else /* !CONFIG_HAVE_ARCH_SOFT_DIRTY */
1143 static inline int pte_soft_dirty(pte_t pte)
1144 {
1145         return 0;
1146 }
1147
1148 static inline int pmd_soft_dirty(pmd_t pmd)
1149 {
1150         return 0;
1151 }
1152
1153 static inline pte_t pte_mksoft_dirty(pte_t pte)
1154 {
1155         return pte;
1156 }
1157
1158 static inline pmd_t pmd_mksoft_dirty(pmd_t pmd)
1159 {
1160         return pmd;
1161 }
1162
1163 static inline pte_t pte_clear_soft_dirty(pte_t pte)
1164 {
1165         return pte;
1166 }
1167
1168 static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd)
1169 {
1170         return pmd;
1171 }
1172
1173 static inline pte_t pte_swp_mksoft_dirty(pte_t pte)
1174 {
1175         return pte;
1176 }
1177
1178 static inline int pte_swp_soft_dirty(pte_t pte)
1179 {
1180         return 0;
1181 }
1182
1183 static inline pte_t pte_swp_clear_soft_dirty(pte_t pte)
1184 {
1185         return pte;
1186 }
1187
1188 static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd)
1189 {
1190         return pmd;
1191 }
1192
1193 static inline int pmd_swp_soft_dirty(pmd_t pmd)
1194 {
1195         return 0;
1196 }
1197
1198 static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd)
1199 {
1200         return pmd;
1201 }
1202 #endif
1203
1204 #ifndef __HAVE_PFNMAP_TRACKING
1205 /*
1206  * Interfaces that can be used by architecture code to keep track of
1207  * memory type of pfn mappings specified by the remap_pfn_range,
1208  * vmf_insert_pfn.
1209  */
1210
1211 /*
1212  * track_pfn_remap is called when a _new_ pfn mapping is being established
1213  * by remap_pfn_range() for physical range indicated by pfn and size.
1214  */
1215 static inline int track_pfn_remap(struct vm_area_struct *vma, pgprot_t *prot,
1216                                   unsigned long pfn, unsigned long addr,
1217                                   unsigned long size)
1218 {
1219         return 0;
1220 }
1221
1222 /*
1223  * track_pfn_insert is called when a _new_ single pfn is established
1224  * by vmf_insert_pfn().
1225  */
1226 static inline void track_pfn_insert(struct vm_area_struct *vma, pgprot_t *prot,
1227                                     pfn_t pfn)
1228 {
1229 }
1230
1231 /*
1232  * track_pfn_copy is called when vma that is covering the pfnmap gets
1233  * copied through copy_page_range().
1234  */
1235 static inline int track_pfn_copy(struct vm_area_struct *vma)
1236 {
1237         return 0;
1238 }
1239
1240 /*
1241  * untrack_pfn is called while unmapping a pfnmap for a region.
1242  * untrack can be called for a specific region indicated by pfn and size or
1243  * can be for the entire vma (in which case pfn, size are zero).
1244  */
1245 static inline void untrack_pfn(struct vm_area_struct *vma,
1246                                unsigned long pfn, unsigned long size,
1247                                bool mm_wr_locked)
1248 {
1249 }
1250
1251 /*
1252  * untrack_pfn_clear is called while mremapping a pfnmap for a new region
1253  * or fails to copy pgtable during duplicate vm area.
1254  */
1255 static inline void untrack_pfn_clear(struct vm_area_struct *vma)
1256 {
1257 }
1258 #else
1259 extern int track_pfn_remap(struct vm_area_struct *vma, pgprot_t *prot,
1260                            unsigned long pfn, unsigned long addr,
1261                            unsigned long size);
1262 extern void track_pfn_insert(struct vm_area_struct *vma, pgprot_t *prot,
1263                              pfn_t pfn);
1264 extern int track_pfn_copy(struct vm_area_struct *vma);
1265 extern void untrack_pfn(struct vm_area_struct *vma, unsigned long pfn,
1266                         unsigned long size, bool mm_wr_locked);
1267 extern void untrack_pfn_clear(struct vm_area_struct *vma);
1268 #endif
1269
1270 #ifdef CONFIG_MMU
1271 #ifdef __HAVE_COLOR_ZERO_PAGE
1272 static inline int is_zero_pfn(unsigned long pfn)
1273 {
1274         extern unsigned long zero_pfn;
1275         unsigned long offset_from_zero_pfn = pfn - zero_pfn;
1276         return offset_from_zero_pfn <= (zero_page_mask >> PAGE_SHIFT);
1277 }
1278
1279 #define my_zero_pfn(addr)       page_to_pfn(ZERO_PAGE(addr))
1280
1281 #else
1282 static inline int is_zero_pfn(unsigned long pfn)
1283 {
1284         extern unsigned long zero_pfn;
1285         return pfn == zero_pfn;
1286 }
1287
1288 static inline unsigned long my_zero_pfn(unsigned long addr)
1289 {
1290         extern unsigned long zero_pfn;
1291         return zero_pfn;
1292 }
1293 #endif
1294 #else
1295 static inline int is_zero_pfn(unsigned long pfn)
1296 {
1297         return 0;
1298 }
1299
1300 static inline unsigned long my_zero_pfn(unsigned long addr)
1301 {
1302         return 0;
1303 }
1304 #endif /* CONFIG_MMU */
1305
1306 #ifdef CONFIG_MMU
1307
1308 #ifndef CONFIG_TRANSPARENT_HUGEPAGE
1309 static inline int pmd_trans_huge(pmd_t pmd)
1310 {
1311         return 0;
1312 }
1313 #ifndef pmd_write
1314 static inline int pmd_write(pmd_t pmd)
1315 {
1316         BUG();
1317         return 0;
1318 }
1319 #endif /* pmd_write */
1320 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
1321
1322 #ifndef pud_write
1323 static inline int pud_write(pud_t pud)
1324 {
1325         BUG();
1326         return 0;
1327 }
1328 #endif /* pud_write */
1329
1330 #if !defined(CONFIG_ARCH_HAS_PTE_DEVMAP) || !defined(CONFIG_TRANSPARENT_HUGEPAGE)
1331 static inline int pmd_devmap(pmd_t pmd)
1332 {
1333         return 0;
1334 }
1335 static inline int pud_devmap(pud_t pud)
1336 {
1337         return 0;
1338 }
1339 static inline int pgd_devmap(pgd_t pgd)
1340 {
1341         return 0;
1342 }
1343 #endif
1344
1345 #if !defined(CONFIG_TRANSPARENT_HUGEPAGE) || \
1346         !defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)
1347 static inline int pud_trans_huge(pud_t pud)
1348 {
1349         return 0;
1350 }
1351 #endif
1352
1353 static inline int pud_trans_unstable(pud_t *pud)
1354 {
1355 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \
1356         defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)
1357         pud_t pudval = READ_ONCE(*pud);
1358
1359         if (pud_none(pudval) || pud_trans_huge(pudval) || pud_devmap(pudval))
1360                 return 1;
1361         if (unlikely(pud_bad(pudval))) {
1362                 pud_clear_bad(pud);
1363                 return 1;
1364         }
1365 #endif
1366         return 0;
1367 }
1368
1369 #ifndef CONFIG_NUMA_BALANCING
1370 /*
1371  * In an inaccessible (PROT_NONE) VMA, pte_protnone() may indicate "yes". It is
1372  * perfectly valid to indicate "no" in that case, which is why our default
1373  * implementation defaults to "always no".
1374  *
1375  * In an accessible VMA, however, pte_protnone() reliably indicates PROT_NONE
1376  * page protection due to NUMA hinting. NUMA hinting faults only apply in
1377  * accessible VMAs.
1378  *
1379  * So, to reliably identify PROT_NONE PTEs that require a NUMA hinting fault,
1380  * looking at the VMA accessibility is sufficient.
1381  */
1382 static inline int pte_protnone(pte_t pte)
1383 {
1384         return 0;
1385 }
1386
1387 static inline int pmd_protnone(pmd_t pmd)
1388 {
1389         return 0;
1390 }
1391 #endif /* CONFIG_NUMA_BALANCING */
1392
1393 #endif /* CONFIG_MMU */
1394
1395 #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
1396
1397 #ifndef __PAGETABLE_P4D_FOLDED
1398 int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot);
1399 void p4d_clear_huge(p4d_t *p4d);
1400 #else
1401 static inline int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot)
1402 {
1403         return 0;
1404 }
1405 static inline void p4d_clear_huge(p4d_t *p4d) { }
1406 #endif /* !__PAGETABLE_P4D_FOLDED */
1407
1408 int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot);
1409 int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot);
1410 int pud_clear_huge(pud_t *pud);
1411 int pmd_clear_huge(pmd_t *pmd);
1412 int p4d_free_pud_page(p4d_t *p4d, unsigned long addr);
1413 int pud_free_pmd_page(pud_t *pud, unsigned long addr);
1414 int pmd_free_pte_page(pmd_t *pmd, unsigned long addr);
1415 #else   /* !CONFIG_HAVE_ARCH_HUGE_VMAP */
1416 static inline int p4d_set_huge(p4d_t *p4d, phys_addr_t addr, pgprot_t prot)
1417 {
1418         return 0;
1419 }
1420 static inline int pud_set_huge(pud_t *pud, phys_addr_t addr, pgprot_t prot)
1421 {
1422         return 0;
1423 }
1424 static inline int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot)
1425 {
1426         return 0;
1427 }
1428 static inline void p4d_clear_huge(p4d_t *p4d) { }
1429 static inline int pud_clear_huge(pud_t *pud)
1430 {
1431         return 0;
1432 }
1433 static inline int pmd_clear_huge(pmd_t *pmd)
1434 {
1435         return 0;
1436 }
1437 static inline int p4d_free_pud_page(p4d_t *p4d, unsigned long addr)
1438 {
1439         return 0;
1440 }
1441 static inline int pud_free_pmd_page(pud_t *pud, unsigned long addr)
1442 {
1443         return 0;
1444 }
1445 static inline int pmd_free_pte_page(pmd_t *pmd, unsigned long addr)
1446 {
1447         return 0;
1448 }
1449 #endif  /* CONFIG_HAVE_ARCH_HUGE_VMAP */
1450
1451 #ifndef __HAVE_ARCH_FLUSH_PMD_TLB_RANGE
1452 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1453 /*
1454  * ARCHes with special requirements for evicting THP backing TLB entries can
1455  * implement this. Otherwise also, it can help optimize normal TLB flush in
1456  * THP regime. Stock flush_tlb_range() typically has optimization to nuke the
1457  * entire TLB if flush span is greater than a threshold, which will
1458  * likely be true for a single huge page. Thus a single THP flush will
1459  * invalidate the entire TLB which is not desirable.
1460  * e.g. see arch/arc: flush_pmd_tlb_range
1461  */
1462 #define flush_pmd_tlb_range(vma, addr, end)     flush_tlb_range(vma, addr, end)
1463 #define flush_pud_tlb_range(vma, addr, end)     flush_tlb_range(vma, addr, end)
1464 #else
1465 #define flush_pmd_tlb_range(vma, addr, end)     BUILD_BUG()
1466 #define flush_pud_tlb_range(vma, addr, end)     BUILD_BUG()
1467 #endif
1468 #endif
1469
1470 struct file;
1471 int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
1472                         unsigned long size, pgprot_t *vma_prot);
1473
1474 #ifndef CONFIG_X86_ESPFIX64
1475 static inline void init_espfix_bsp(void) { }
1476 #endif
1477
1478 extern void __init pgtable_cache_init(void);
1479
1480 #ifndef __HAVE_ARCH_PFN_MODIFY_ALLOWED
1481 static inline bool pfn_modify_allowed(unsigned long pfn, pgprot_t prot)
1482 {
1483         return true;
1484 }
1485
1486 static inline bool arch_has_pfn_modify_check(void)
1487 {
1488         return false;
1489 }
1490 #endif /* !_HAVE_ARCH_PFN_MODIFY_ALLOWED */
1491
1492 /*
1493  * Architecture PAGE_KERNEL_* fallbacks
1494  *
1495  * Some architectures don't define certain PAGE_KERNEL_* flags. This is either
1496  * because they really don't support them, or the port needs to be updated to
1497  * reflect the required functionality. Below are a set of relatively safe
1498  * fallbacks, as best effort, which we can count on in lieu of the architectures
1499  * not defining them on their own yet.
1500  */
1501
1502 #ifndef PAGE_KERNEL_RO
1503 # define PAGE_KERNEL_RO PAGE_KERNEL
1504 #endif
1505
1506 #ifndef PAGE_KERNEL_EXEC
1507 # define PAGE_KERNEL_EXEC PAGE_KERNEL
1508 #endif
1509
1510 /*
1511  * Page Table Modification bits for pgtbl_mod_mask.
1512  *
1513  * These are used by the p?d_alloc_track*() set of functions an in the generic
1514  * vmalloc/ioremap code to track at which page-table levels entries have been
1515  * modified. Based on that the code can better decide when vmalloc and ioremap
1516  * mapping changes need to be synchronized to other page-tables in the system.
1517  */
1518 #define         __PGTBL_PGD_MODIFIED    0
1519 #define         __PGTBL_P4D_MODIFIED    1
1520 #define         __PGTBL_PUD_MODIFIED    2
1521 #define         __PGTBL_PMD_MODIFIED    3
1522 #define         __PGTBL_PTE_MODIFIED    4
1523
1524 #define         PGTBL_PGD_MODIFIED      BIT(__PGTBL_PGD_MODIFIED)
1525 #define         PGTBL_P4D_MODIFIED      BIT(__PGTBL_P4D_MODIFIED)
1526 #define         PGTBL_PUD_MODIFIED      BIT(__PGTBL_PUD_MODIFIED)
1527 #define         PGTBL_PMD_MODIFIED      BIT(__PGTBL_PMD_MODIFIED)
1528 #define         PGTBL_PTE_MODIFIED      BIT(__PGTBL_PTE_MODIFIED)
1529
1530 /* Page-Table Modification Mask */
1531 typedef unsigned int pgtbl_mod_mask;
1532
1533 #endif /* !__ASSEMBLY__ */
1534
1535 #if !defined(MAX_POSSIBLE_PHYSMEM_BITS) && !defined(CONFIG_64BIT)
1536 #ifdef CONFIG_PHYS_ADDR_T_64BIT
1537 /*
1538  * ZSMALLOC needs to know the highest PFN on 32-bit architectures
1539  * with physical address space extension, but falls back to
1540  * BITS_PER_LONG otherwise.
1541  */
1542 #error Missing MAX_POSSIBLE_PHYSMEM_BITS definition
1543 #else
1544 #define MAX_POSSIBLE_PHYSMEM_BITS 32
1545 #endif
1546 #endif
1547
1548 #ifndef has_transparent_hugepage
1549 #define has_transparent_hugepage() IS_BUILTIN(CONFIG_TRANSPARENT_HUGEPAGE)
1550 #endif
1551
1552 #ifndef has_transparent_pud_hugepage
1553 #define has_transparent_pud_hugepage() IS_BUILTIN(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)
1554 #endif
1555 /*
1556  * On some architectures it depends on the mm if the p4d/pud or pmd
1557  * layer of the page table hierarchy is folded or not.
1558  */
1559 #ifndef mm_p4d_folded
1560 #define mm_p4d_folded(mm)       __is_defined(__PAGETABLE_P4D_FOLDED)
1561 #endif
1562
1563 #ifndef mm_pud_folded
1564 #define mm_pud_folded(mm)       __is_defined(__PAGETABLE_PUD_FOLDED)
1565 #endif
1566
1567 #ifndef mm_pmd_folded
1568 #define mm_pmd_folded(mm)       __is_defined(__PAGETABLE_PMD_FOLDED)
1569 #endif
1570
1571 #ifndef p4d_offset_lockless
1572 #define p4d_offset_lockless(pgdp, pgd, address) p4d_offset(&(pgd), address)
1573 #endif
1574 #ifndef pud_offset_lockless
1575 #define pud_offset_lockless(p4dp, p4d, address) pud_offset(&(p4d), address)
1576 #endif
1577 #ifndef pmd_offset_lockless
1578 #define pmd_offset_lockless(pudp, pud, address) pmd_offset(&(pud), address)
1579 #endif
1580
1581 /*
1582  * p?d_leaf() - true if this entry is a final mapping to a physical address.
1583  * This differs from p?d_huge() by the fact that they are always available (if
1584  * the architecture supports large pages at the appropriate level) even
1585  * if CONFIG_HUGETLB_PAGE is not defined.
1586  * Only meaningful when called on a valid entry.
1587  */
1588 #ifndef pgd_leaf
1589 #define pgd_leaf(x)     0
1590 #endif
1591 #ifndef p4d_leaf
1592 #define p4d_leaf(x)     0
1593 #endif
1594 #ifndef pud_leaf
1595 #define pud_leaf(x)     0
1596 #endif
1597 #ifndef pmd_leaf
1598 #define pmd_leaf(x)     0
1599 #endif
1600
1601 #ifndef pgd_leaf_size
1602 #define pgd_leaf_size(x) (1ULL << PGDIR_SHIFT)
1603 #endif
1604 #ifndef p4d_leaf_size
1605 #define p4d_leaf_size(x) P4D_SIZE
1606 #endif
1607 #ifndef pud_leaf_size
1608 #define pud_leaf_size(x) PUD_SIZE
1609 #endif
1610 #ifndef pmd_leaf_size
1611 #define pmd_leaf_size(x) PMD_SIZE
1612 #endif
1613 #ifndef pte_leaf_size
1614 #define pte_leaf_size(x) PAGE_SIZE
1615 #endif
1616
1617 /*
1618  * Some architectures have MMUs that are configurable or selectable at boot
1619  * time. These lead to variable PTRS_PER_x. For statically allocated arrays it
1620  * helps to have a static maximum value.
1621  */
1622
1623 #ifndef MAX_PTRS_PER_PTE
1624 #define MAX_PTRS_PER_PTE PTRS_PER_PTE
1625 #endif
1626
1627 #ifndef MAX_PTRS_PER_PMD
1628 #define MAX_PTRS_PER_PMD PTRS_PER_PMD
1629 #endif
1630
1631 #ifndef MAX_PTRS_PER_PUD
1632 #define MAX_PTRS_PER_PUD PTRS_PER_PUD
1633 #endif
1634
1635 #ifndef MAX_PTRS_PER_P4D
1636 #define MAX_PTRS_PER_P4D PTRS_PER_P4D
1637 #endif
1638
1639 /* description of effects of mapping type and prot in current implementation.
1640  * this is due to the limited x86 page protection hardware.  The expected
1641  * behavior is in parens:
1642  *
1643  * map_type     prot
1644  *              PROT_NONE       PROT_READ       PROT_WRITE      PROT_EXEC
1645  * MAP_SHARED   r: (no) no      r: (yes) yes    r: (no) yes     r: (no) yes
1646  *              w: (no) no      w: (no) no      w: (yes) yes    w: (no) no
1647  *              x: (no) no      x: (no) yes     x: (no) yes     x: (yes) yes
1648  *
1649  * MAP_PRIVATE  r: (no) no      r: (yes) yes    r: (no) yes     r: (no) yes
1650  *              w: (no) no      w: (no) no      w: (copy) copy  w: (no) no
1651  *              x: (no) no      x: (no) yes     x: (no) yes     x: (yes) yes
1652  *
1653  * On arm64, PROT_EXEC has the following behaviour for both MAP_SHARED and
1654  * MAP_PRIVATE (with Enhanced PAN supported):
1655  *                                                              r: (no) no
1656  *                                                              w: (no) no
1657  *                                                              x: (yes) yes
1658  */
1659 #define DECLARE_VM_GET_PAGE_PROT                                        \
1660 pgprot_t vm_get_page_prot(unsigned long vm_flags)                       \
1661 {                                                                       \
1662                 return protection_map[vm_flags &                        \
1663                         (VM_READ | VM_WRITE | VM_EXEC | VM_SHARED)];    \
1664 }                                                                       \
1665 EXPORT_SYMBOL(vm_get_page_prot);
1666
1667 #endif /* _LINUX_PGTABLE_H */