lkml.org 
[lkml]   [2021]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH RFC 21/30] hugetlb: Pass vma into huge_pte_alloc()
    On Fri, Jan 15, 2021 at 9:09 AM Peter Xu <peterx@redhat.com> wrote:
    >
    > It is a preparation work to be able to behave differently in the per
    > architecture huge_pte_alloc() according to different VMA attributes.
    >
    > Signed-off-by: Peter Xu <peterx@redhat.com>
    > ---
    > arch/arm64/mm/hugetlbpage.c | 2 +-
    > arch/ia64/mm/hugetlbpage.c | 3 ++-
    > arch/mips/mm/hugetlbpage.c | 4 ++--
    > arch/parisc/mm/hugetlbpage.c | 2 +-
    > arch/powerpc/mm/hugetlbpage.c | 3 ++-
    > arch/s390/mm/hugetlbpage.c | 2 +-
    > arch/sh/mm/hugetlbpage.c | 2 +-
    > arch/sparc/mm/hugetlbpage.c | 2 +-
    > include/linux/hugetlb.h | 2 +-
    > mm/hugetlb.c | 6 +++---
    > mm/userfaultfd.c | 2 +-
    > 11 files changed, 16 insertions(+), 14 deletions(-)
    >
    > diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
    > index 55ecf6de9ff7..5b32ec888698 100644
    > --- a/arch/arm64/mm/hugetlbpage.c
    > +++ b/arch/arm64/mm/hugetlbpage.c
    > @@ -252,7 +252,7 @@ void set_huge_swap_pte_at(struct mm_struct *mm, unsigned long addr,
    > set_pte(ptep, pte);
    > }
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgdp;
    > diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
    > index b331f94d20ac..f993cb36c062 100644
    > --- a/arch/ia64/mm/hugetlbpage.c
    > +++ b/arch/ia64/mm/hugetlbpage.c
    > @@ -25,7 +25,8 @@ unsigned int hpage_shift = HPAGE_SHIFT_DEFAULT;
    > EXPORT_SYMBOL(hpage_shift);
    >
    > pte_t *
    > -huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz)
    > +huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > + unsigned long addr, unsigned long sz)
    > {
    > unsigned long taddr = htlbpage_to_page(addr);
    > pgd_t *pgd;
    > diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
    > index 77ffece9c270..c1d8f51c5255 100644
    > --- a/arch/mips/mm/hugetlbpage.c
    > +++ b/arch/mips/mm/hugetlbpage.c
    > @@ -21,8 +21,8 @@
    > #include <asm/tlb.h>
    > #include <asm/tlbflush.h>
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr,
    > - unsigned long sz)
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, structt vm_area_struct *vma,

    This was pointed out to me just after I sent v3 of my series today
    (which includes this patch):

    Typo, s/structt/struct/.

    > + unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgd;
    > p4d_t *p4d;
    > diff --git a/arch/parisc/mm/hugetlbpage.c b/arch/parisc/mm/hugetlbpage.c
    > index d7ba014a7fbb..e141441bfa64 100644
    > --- a/arch/parisc/mm/hugetlbpage.c
    > +++ b/arch/parisc/mm/hugetlbpage.c
    > @@ -44,7 +44,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
    > }
    >
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgd;
    > diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
    > index 36c3800769fb..2514884c0d20 100644
    > --- a/arch/powerpc/mm/hugetlbpage.c
    > +++ b/arch/powerpc/mm/hugetlbpage.c
    > @@ -106,7 +106,8 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
    > * At this point we do the placement change only for BOOK3S 64. This would
    > * possibly work on other subarchs.
    > */
    > -pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz)
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > + unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pg;
    > p4d_t *p4;
    > diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
    > index 3b5a4d25ca9b..da36d13ffc16 100644
    > --- a/arch/s390/mm/hugetlbpage.c
    > +++ b/arch/s390/mm/hugetlbpage.c
    > @@ -189,7 +189,7 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm,
    > return pte;
    > }
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgdp;
    > diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
    > index 220d7bc43d2b..999ab5916e69 100644
    > --- a/arch/sh/mm/hugetlbpage.c
    > +++ b/arch/sh/mm/hugetlbpage.c
    > @@ -21,7 +21,7 @@
    > #include <asm/tlbflush.h>
    > #include <asm/cacheflush.h>
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgd;
    > diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
    > index ec423b5f17dd..ae06f7df9750 100644
    > --- a/arch/sparc/mm/hugetlbpage.c
    > +++ b/arch/sparc/mm/hugetlbpage.c
    > @@ -272,7 +272,7 @@ static unsigned long huge_tte_to_size(pte_t pte)
    > return size;
    > }
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgd;
    > diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
    > index fe1dde0afbaf..7d4c5669e118 100644
    > --- a/include/linux/hugetlb.h
    > +++ b/include/linux/hugetlb.h
    > @@ -162,7 +162,7 @@ extern struct list_head huge_boot_pages;
    >
    > /* arch callbacks */
    >
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz);
    > pte_t *huge_pte_offset(struct mm_struct *mm,
    > unsigned long addr, unsigned long sz);
    > diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    > index 18b236bac6cd..eb7cd0c7d6d2 100644
    > --- a/mm/hugetlb.c
    > +++ b/mm/hugetlb.c
    > @@ -3767,7 +3767,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
    > src_pte = huge_pte_offset(src, addr, sz);
    > if (!src_pte)
    > continue;
    > - dst_pte = huge_pte_alloc(dst, addr, sz);
    > + dst_pte = huge_pte_alloc(dst, vma, addr, sz);
    > if (!dst_pte) {
    > ret = -ENOMEM;
    > break;
    > @@ -4484,7 +4484,7 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
    > */
    > mapping = vma->vm_file->f_mapping;
    > i_mmap_lock_read(mapping);
    > - ptep = huge_pte_alloc(mm, haddr, huge_page_size(h));
    > + ptep = huge_pte_alloc(mm, vma, haddr, huge_page_size(h));
    > if (!ptep) {
    > i_mmap_unlock_read(mapping);
    > return VM_FAULT_OOM;
    > @@ -5407,7 +5407,7 @@ void adjust_range_if_pmd_sharing_possible(struct vm_area_struct *vma,
    > #endif /* CONFIG_ARCH_WANT_HUGE_PMD_SHARE */
    >
    > #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB
    > -pte_t *huge_pte_alloc(struct mm_struct *mm,
    > +pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
    > unsigned long addr, unsigned long sz)
    > {
    > pgd_t *pgd;
    > diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
    > index 480d91b783d4..3d49b888e3e8 100644
    > --- a/mm/userfaultfd.c
    > +++ b/mm/userfaultfd.c
    > @@ -291,7 +291,7 @@ static __always_inline ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,
    > mutex_lock(&hugetlb_fault_mutex_table[hash]);
    >
    > err = -ENOMEM;
    > - dst_pte = huge_pte_alloc(dst_mm, dst_addr, vma_hpagesize);
    > + dst_pte = huge_pte_alloc(dst_mm, dst_vma, dst_addr, vma_hpagesize);
    > if (!dst_pte) {
    > mutex_unlock(&hugetlb_fault_mutex_table[hash]);
    > i_mmap_unlock_read(mapping);
    > --
    > 2.26.2
    >

    \
     
     \ /
      Last update: 2021-01-29 00:01    [W:2.182 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site