mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	mm: convert page_table_check_pte_set() to page_table_check_ptes_set()
Tell the page table check how many PTEs & PFNs we want it to check. Link: https://lkml.kernel.org/r/20230802151406.3735276-3-willy@infradead.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org> Acked-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									f9bff0e318
								
							
						
					
					
						commit
						a379322022
					
				
					 5 changed files with 19 additions and 16 deletions
				
			
		| 
						 | 
					@ -348,7 +348,7 @@ static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr,
 | 
				
			||||||
static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
 | 
					static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
 | 
				
			||||||
			      pte_t *ptep, pte_t pte)
 | 
								      pte_t *ptep, pte_t pte)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	page_table_check_pte_set(mm, ptep, pte);
 | 
						page_table_check_ptes_set(mm, ptep, pte, 1);
 | 
				
			||||||
	return __set_pte_at(mm, addr, ptep, pte);
 | 
						return __set_pte_at(mm, addr, ptep, pte);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -499,7 +499,7 @@ static inline void __set_pte_at(struct mm_struct *mm,
 | 
				
			||||||
static inline void set_pte_at(struct mm_struct *mm,
 | 
					static inline void set_pte_at(struct mm_struct *mm,
 | 
				
			||||||
	unsigned long addr, pte_t *ptep, pte_t pteval)
 | 
						unsigned long addr, pte_t *ptep, pte_t pteval)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	page_table_check_pte_set(mm, ptep, pteval);
 | 
						page_table_check_ptes_set(mm, ptep, pteval, 1);
 | 
				
			||||||
	__set_pte_at(mm, addr, ptep, pteval);
 | 
						__set_pte_at(mm, addr, ptep, pteval);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1023,7 +1023,7 @@ static inline pud_t native_local_pudp_get_and_clear(pud_t *pudp)
 | 
				
			||||||
static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
 | 
					static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
 | 
				
			||||||
			      pte_t *ptep, pte_t pte)
 | 
								      pte_t *ptep, pte_t pte)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	page_table_check_pte_set(mm, ptep, pte);
 | 
						page_table_check_ptes_set(mm, ptep, pte, 1);
 | 
				
			||||||
	set_pte(ptep, pte);
 | 
						set_pte(ptep, pte);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,8 @@ void __page_table_check_zero(struct page *page, unsigned int order);
 | 
				
			||||||
void __page_table_check_pte_clear(struct mm_struct *mm, pte_t pte);
 | 
					void __page_table_check_pte_clear(struct mm_struct *mm, pte_t pte);
 | 
				
			||||||
void __page_table_check_pmd_clear(struct mm_struct *mm, pmd_t pmd);
 | 
					void __page_table_check_pmd_clear(struct mm_struct *mm, pmd_t pmd);
 | 
				
			||||||
void __page_table_check_pud_clear(struct mm_struct *mm, pud_t pud);
 | 
					void __page_table_check_pud_clear(struct mm_struct *mm, pud_t pud);
 | 
				
			||||||
void __page_table_check_pte_set(struct mm_struct *mm, pte_t *ptep, pte_t pte);
 | 
					void __page_table_check_ptes_set(struct mm_struct *mm, pte_t *ptep, pte_t pte,
 | 
				
			||||||
 | 
							unsigned int nr);
 | 
				
			||||||
void __page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd);
 | 
					void __page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd);
 | 
				
			||||||
void __page_table_check_pud_set(struct mm_struct *mm, pud_t *pudp, pud_t pud);
 | 
					void __page_table_check_pud_set(struct mm_struct *mm, pud_t *pudp, pud_t pud);
 | 
				
			||||||
void __page_table_check_pte_clear_range(struct mm_struct *mm,
 | 
					void __page_table_check_pte_clear_range(struct mm_struct *mm,
 | 
				
			||||||
| 
						 | 
					@ -64,13 +65,13 @@ static inline void page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
 | 
				
			||||||
	__page_table_check_pud_clear(mm, pud);
 | 
						__page_table_check_pud_clear(mm, pud);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void page_table_check_pte_set(struct mm_struct *mm, pte_t *ptep,
 | 
					static inline void page_table_check_ptes_set(struct mm_struct *mm,
 | 
				
			||||||
					    pte_t pte)
 | 
							pte_t *ptep, pte_t pte, unsigned int nr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (static_branch_likely(&page_table_check_disabled))
 | 
						if (static_branch_likely(&page_table_check_disabled))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__page_table_check_pte_set(mm, ptep, pte);
 | 
						__page_table_check_ptes_set(mm, ptep, pte, nr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp,
 | 
					static inline void page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp,
 | 
				
			||||||
| 
						 | 
					@ -123,8 +124,8 @@ static inline void page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void page_table_check_pte_set(struct mm_struct *mm, pte_t *ptep,
 | 
					static inline void page_table_check_ptes_set(struct mm_struct *mm,
 | 
				
			||||||
					    pte_t pte)
 | 
							pte_t *ptep, pte_t pte, unsigned int nr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -182,18 +182,20 @@ void __page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(__page_table_check_pud_clear);
 | 
					EXPORT_SYMBOL(__page_table_check_pud_clear);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __page_table_check_pte_set(struct mm_struct *mm, pte_t *ptep, pte_t pte)
 | 
					void __page_table_check_ptes_set(struct mm_struct *mm, pte_t *ptep, pte_t pte,
 | 
				
			||||||
 | 
							unsigned int nr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						unsigned int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (&init_mm == mm)
 | 
						if (&init_mm == mm)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__page_table_check_pte_clear(mm, ptep_get(ptep));
 | 
						for (i = 0; i < nr; i++)
 | 
				
			||||||
	if (pte_user_accessible_page(pte)) {
 | 
							__page_table_check_pte_clear(mm, ptep_get(ptep + i));
 | 
				
			||||||
		page_table_check_set(pte_pfn(pte), PAGE_SIZE >> PAGE_SHIFT,
 | 
						if (pte_user_accessible_page(pte))
 | 
				
			||||||
				     pte_write(pte));
 | 
							page_table_check_set(pte_pfn(pte), nr, pte_write(pte));
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(__page_table_check_pte_set);
 | 
					EXPORT_SYMBOL(__page_table_check_ptes_set);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd)
 | 
					void __page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue