lkml.org 
[lkml]   [2023]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 7/8] arm64: hugetlb: Convert set_huge_pte_at() to take vma
    Date
    In order to fix a bug, arm64 needs access to the vma inside it's
    implementation of set_huge_pte_at(). Provide for this by converting the
    mm parameter to be a vma. Any implementations that require the mm can
    access it via vma->vm_mm.

    This commit makes the required arm64 modifications. Separate commits
    update the other arches and core code, before the actual bug is fixed in
    arm64.

    No behavioral changes intended.

    Signed-off-by: Ryan Roberts <ryan.roberts@arm.com>
    ---
    arch/arm64/include/asm/hugetlb.h | 2 +-
    arch/arm64/mm/hugetlbpage.c | 5 +++--
    2 files changed, 4 insertions(+), 3 deletions(-)

    diff --git a/arch/arm64/include/asm/hugetlb.h b/arch/arm64/include/asm/hugetlb.h
    index f43a38ac1779..efc9025b9d27 100644
    --- a/arch/arm64/include/asm/hugetlb.h
    +++ b/arch/arm64/include/asm/hugetlb.h
    @@ -27,7 +27,7 @@ static inline void arch_clear_hugepage_flags(struct page *page)
    pte_t arch_make_huge_pte(pte_t entry, unsigned int shift, vm_flags_t flags);
    #define arch_make_huge_pte arch_make_huge_pte
    #define __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT
    -extern void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
    +extern void set_huge_pte_at(struct vm_area_struct *vma, unsigned long addr,
    pte_t *ptep, pte_t pte);
    #define __HAVE_ARCH_HUGE_PTEP_SET_ACCESS_FLAGS
    extern int huge_ptep_set_access_flags(struct vm_area_struct *vma,
    diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
    index 9c52718ea750..844832511c1e 100644
    --- a/arch/arm64/mm/hugetlbpage.c
    +++ b/arch/arm64/mm/hugetlbpage.c
    @@ -248,9 +248,10 @@ static inline struct folio *hugetlb_swap_entry_to_folio(swp_entry_t entry)
    return page_folio(pfn_to_page(swp_offset_pfn(entry)));
    }

    -void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
    +void set_huge_pte_at(struct vm_area_struct *vma, unsigned long addr,
    pte_t *ptep, pte_t pte)
    {
    + struct mm_struct *mm = vma->vm_mm;
    size_t pgsize;
    int i;
    int ncontig;
    @@ -571,5 +572,5 @@ pte_t huge_ptep_modify_prot_start(struct vm_area_struct *vma, unsigned long addr
    void huge_ptep_modify_prot_commit(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep,
    pte_t old_pte, pte_t pte)
    {
    - set_huge_pte_at(vma->vm_mm, addr, ptep, pte);
    + set_huge_pte_at(vma, addr, ptep, pte);
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2023-09-21 22:36    [W:2.375 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site