Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mm/page_table_check: reinstate address parameter in [__]page_table_check_pmd[s]_set()

This reverts commit a3b837130b58 ("mm/page_table_check: remove unused
parameter in [__]page_table_check_pmd_set").

Reinstate previously unused parameters for the purpose of supporting
powerpc platforms, as many do not encode user/kernel ownership of the
page in the pte, but instead in the address of the access.

Apply this to __page_table_check_pmds_set(), page_table_check_pmd_set(), and
the page_table_check_pmd_set() wrapper macro.

[ajd@linux.ibm.com: rebase on arm64 + riscv changes, update commit message]
Link: https://lkml.kernel.org/r/20251219-pgtable_check_v18rebase-v18-4-755bc151a50b@linux.ibm.com
Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
Signed-off-by: Andrew Donnellan <ajd@linux.ibm.com>
Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com>
Acked-by: Ingo Molnar <mingo@kernel.org> # x86
Acked-by: Alexandre Ghiti <alexghiti@rivosinc.com> # riscv
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Cc: Alexandre Ghiti <alex@ghiti.fr>
Cc: Alistair Popple <apopple@nvidia.com>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: "Christophe Leroy (CS GROUP)" <chleroy@kernel.org>
Cc: David Hildenbrand <david@kernel.org>
Cc: Donet Tom <donettom@linux.ibm.com>
Cc: Guo Weikang <guoweikang.kernel@gmail.com>
Cc: Jason Gunthorpe <jgg@ziepe.ca>
Cc: Kevin Brodsky <kevin.brodsky@arm.com>
Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
Cc: Magnus Lindholm <linmag7@gmail.com>
Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nicholas Miehlbradt <nicholas@linux.ibm.com>
Cc: Nicholas Piggin <npiggin@gmail.com>
Cc: Paul Mackerras <paulus@ozlabs.org>
Cc: Qi Zheng <zhengqi.arch@bytedance.com>
Cc: "Ritesh Harjani (IBM)" <ritesh.list@gmail.com>
Cc: Sweet Tea Dorminy <sweettea-kernel@dorminy.me>
Cc: Thomas Huth <thuth@redhat.com>
Cc: "Vishal Moola (Oracle)" <vishal.moola@gmail.com>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Rohan McLure and committed by
Andrew Morton
6e2d8f9f c4a0c5ff

+15 -14
+3 -2
arch/arm64/include/asm/pgtable.h
··· 684 684 page_table_check_ptes_set(mm, ptep, pte, nr); 685 685 break; 686 686 case PMD_SIZE: 687 - page_table_check_pmds_set(mm, (pmd_t *)ptep, pte_pmd(pte), nr); 687 + page_table_check_pmds_set(mm, addr, (pmd_t *)ptep, 688 + pte_pmd(pte), nr); 688 689 break; 689 690 #ifndef __PAGETABLE_PMD_FOLDED 690 691 case PUD_SIZE: ··· 1490 1489 static inline pmd_t pmdp_establish(struct vm_area_struct *vma, 1491 1490 unsigned long address, pmd_t *pmdp, pmd_t pmd) 1492 1491 { 1493 - page_table_check_pmd_set(vma->vm_mm, pmdp, pmd); 1492 + page_table_check_pmd_set(vma->vm_mm, address, pmdp, pmd); 1494 1493 return __pmd(xchg_relaxed(&pmd_val(*pmdp), pmd_val(pmd))); 1495 1494 } 1496 1495 #endif
+2 -2
arch/riscv/include/asm/pgtable.h
··· 946 946 static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, 947 947 pmd_t *pmdp, pmd_t pmd) 948 948 { 949 - page_table_check_pmd_set(mm, pmdp, pmd); 949 + page_table_check_pmd_set(mm, addr, pmdp, pmd); 950 950 return __set_pte_at(mm, (pte_t *)pmdp, pmd_pte(pmd)); 951 951 } 952 952 ··· 1023 1023 static inline pmd_t pmdp_establish(struct vm_area_struct *vma, 1024 1024 unsigned long address, pmd_t *pmdp, pmd_t pmd) 1025 1025 { 1026 - page_table_check_pmd_set(vma->vm_mm, pmdp, pmd); 1026 + page_table_check_pmd_set(vma->vm_mm, address, pmdp, pmd); 1027 1027 return __pmd(atomic_long_xchg((atomic_long_t *)pmdp, pmd_val(pmd))); 1028 1028 } 1029 1029
+2 -2
arch/x86/include/asm/pgtable.h
··· 1214 1214 static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr, 1215 1215 pmd_t *pmdp, pmd_t pmd) 1216 1216 { 1217 - page_table_check_pmd_set(mm, pmdp, pmd); 1217 + page_table_check_pmd_set(mm, addr, pmdp, pmd); 1218 1218 set_pmd(pmdp, pmd); 1219 1219 } 1220 1220 ··· 1357 1357 static inline pmd_t pmdp_establish(struct vm_area_struct *vma, 1358 1358 unsigned long address, pmd_t *pmdp, pmd_t pmd) 1359 1359 { 1360 - page_table_check_pmd_set(vma->vm_mm, pmdp, pmd); 1360 + page_table_check_pmd_set(vma->vm_mm, address, pmdp, pmd); 1361 1361 if (IS_ENABLED(CONFIG_SMP)) { 1362 1362 return xchg(pmdp, pmd); 1363 1363 } else {
+6 -6
include/linux/page_table_check.h
··· 19 19 void __page_table_check_pud_clear(struct mm_struct *mm, pud_t pud); 20 20 void __page_table_check_ptes_set(struct mm_struct *mm, pte_t *ptep, pte_t pte, 21 21 unsigned int nr); 22 - void __page_table_check_pmds_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd, 23 - unsigned int nr); 22 + void __page_table_check_pmds_set(struct mm_struct *mm, unsigned long addr, 23 + pmd_t *pmdp, pmd_t pmd, unsigned int nr); 24 24 void __page_table_check_puds_set(struct mm_struct *mm, unsigned long addr, 25 25 pud_t *pudp, pud_t pud, unsigned int nr); 26 26 void __page_table_check_pte_clear_range(struct mm_struct *mm, ··· 77 77 } 78 78 79 79 static inline void page_table_check_pmds_set(struct mm_struct *mm, 80 - pmd_t *pmdp, pmd_t pmd, unsigned int nr) 80 + unsigned long addr, pmd_t *pmdp, pmd_t pmd, unsigned int nr) 81 81 { 82 82 if (static_branch_likely(&page_table_check_disabled)) 83 83 return; 84 84 85 - __page_table_check_pmds_set(mm, pmdp, pmd, nr); 85 + __page_table_check_pmds_set(mm, addr, pmdp, pmd, nr); 86 86 } 87 87 88 88 static inline void page_table_check_puds_set(struct mm_struct *mm, ··· 132 132 } 133 133 134 134 static inline void page_table_check_pmds_set(struct mm_struct *mm, 135 - pmd_t *pmdp, pmd_t pmd, unsigned int nr) 135 + unsigned long addr, pmd_t *pmdp, pmd_t pmd, unsigned int nr) 136 136 { 137 137 } 138 138 ··· 149 149 150 150 #endif /* CONFIG_PAGE_TABLE_CHECK */ 151 151 152 - #define page_table_check_pmd_set(mm, pmdp, pmd) page_table_check_pmds_set(mm, pmdp, pmd, 1) 152 + #define page_table_check_pmd_set(mm, addr, pmdp, pmd) page_table_check_pmds_set(mm, addr, pmdp, pmd, 1) 153 153 #define page_table_check_pud_set(mm, addr, pudp, pud) page_table_check_puds_set(mm, addr, pudp, pud, 1) 154 154 155 155 #endif /* __LINUX_PAGE_TABLE_CHECK_H */
+2 -2
mm/page_table_check.c
··· 225 225 } 226 226 } 227 227 228 - void __page_table_check_pmds_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd, 229 - unsigned int nr) 228 + void __page_table_check_pmds_set(struct mm_struct *mm, unsigned long addr, 229 + pmd_t *pmdp, pmd_t pmd, unsigned int nr) 230 230 { 231 231 unsigned long stride = PMD_SIZE >> PAGE_SHIFT; 232 232 unsigned int i;