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:
Matthew Wilcox (Oracle) 2023-08-02 16:13:30 +01:00 committed by Andrew Morton
parent f9bff0e318
commit a379322022
5 changed files with 19 additions and 16 deletions

View File

@ -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,
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);
}

View File

@ -499,7 +499,7 @@ 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)
{
page_table_check_pte_set(mm, ptep, pteval);
page_table_check_ptes_set(mm, ptep, pteval, 1);
__set_pte_at(mm, addr, ptep, pteval);
}

View File

@ -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,
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);
}

View File

@ -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_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_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_pud_set(struct mm_struct *mm, pud_t *pudp, pud_t pud);
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);
}
static inline void page_table_check_pte_set(struct mm_struct *mm, pte_t *ptep,
pte_t pte)
static inline void page_table_check_ptes_set(struct mm_struct *mm,
pte_t *ptep, pte_t pte, unsigned int nr)
{
if (static_branch_likely(&page_table_check_disabled))
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,
@ -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,
pte_t pte)
static inline void page_table_check_ptes_set(struct mm_struct *mm,
pte_t *ptep, pte_t pte, unsigned int nr)
{
}

View File

@ -182,18 +182,20 @@ void __page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
}
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)
return;
__page_table_check_pte_clear(mm, ptep_get(ptep));
if (pte_user_accessible_page(pte)) {
page_table_check_set(pte_pfn(pte), PAGE_SIZE >> PAGE_SHIFT,
pte_write(pte));
}
for (i = 0; i < nr; i++)
__page_table_check_pte_clear(mm, ptep_get(ptep + i));
if (pte_user_accessible_page(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)
{