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
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue