csky: Acked-by: Guo Ren <guoren@xxxxxxxxxx> On Mon, Feb 17, 2020 at 1:04 PM Anshuman Khandual <anshuman.khandual@xxxxxxx> wrote: > > Lets move vma_is_accessible() helper to include/linux/mm.h which makes it > available for general use. While here, this replaces all remaining open > encodings for VMA access check with vma_is_accessible(). > > Cc: Guo Ren <guoren@xxxxxxxxxx> > Cc: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx > Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx> > Cc: Paul Burton <paulburton@xxxxxxxxxx> > Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> > Cc: Paul Mackerras <paulus@xxxxxxxxx> > Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> > Cc: Yoshinori Sato <ysato@xxxxxxxxxxxxxxxxxxxx> > Cc: Rich Felker <dalias@xxxxxxxx> > Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> > Cc: Andy Lutomirski <luto@xxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > Cc: Mel Gorman <mgorman@xxxxxxx> > Cc: linux-kernel@xxxxxxxxxxxxxxx > Cc: linux-m68k@xxxxxxxxxxxxxxxxxxxx > Cc: linux-mips@xxxxxxxxxxxxxxx > Cc: linuxppc-dev@xxxxxxxxxxxxxxxx > Cc: linux-sh@xxxxxxxxxxxxxxx > Cc: linux-mm@xxxxxxxxx > Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> > --- > arch/csky/mm/fault.c | 2 +- > arch/m68k/mm/fault.c | 2 +- > arch/mips/mm/fault.c | 2 +- > arch/powerpc/mm/fault.c | 2 +- > arch/sh/mm/fault.c | 2 +- > arch/x86/mm/fault.c | 2 +- > include/linux/mm.h | 5 +++++ > kernel/sched/fair.c | 2 +- > mm/gup.c | 2 +- > mm/memory.c | 5 ----- > mm/mempolicy.c | 3 +-- > 11 files changed, 14 insertions(+), 15 deletions(-) > > diff --git a/arch/csky/mm/fault.c b/arch/csky/mm/fault.c > index f76618b630f9..4b3511b8298d 100644 > --- a/arch/csky/mm/fault.c > +++ b/arch/csky/mm/fault.c > @@ -137,7 +137,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write, > if (!(vma->vm_flags & VM_WRITE)) > goto bad_area; > } else { > - if (!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC))) > + if (!vma_is_accessible(vma)) > goto bad_area; > } > > diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c > index e9b1d7585b43..d5131ec5d923 100644 > --- a/arch/m68k/mm/fault.c > +++ b/arch/m68k/mm/fault.c > @@ -125,7 +125,7 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, > case 1: /* read, present */ > goto acc_err; > case 0: /* read, not present */ > - if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))) > + if (!vma_is_accessible(vma)) > goto acc_err; > } > > diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c > index 1e8d00793784..5b9f947bfa32 100644 > --- a/arch/mips/mm/fault.c > +++ b/arch/mips/mm/fault.c > @@ -142,7 +142,7 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, unsigned long write, > goto bad_area; > } > } else { > - if (!(vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC))) > + if (!vma_is_accessible(vma)) > goto bad_area; > } > } > diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c > index 8db0507619e2..71a3658c516b 100644 > --- a/arch/powerpc/mm/fault.c > +++ b/arch/powerpc/mm/fault.c > @@ -314,7 +314,7 @@ static bool access_error(bool is_write, bool is_exec, > return false; > } > > - if (unlikely(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)))) > + if (unlikely(!vma_is_accessible(vma))) > return true; > /* > * We should ideally do the vma pkey access check here. But in the > diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c > index 5f51456f4fc7..a8c4253f37d7 100644 > --- a/arch/sh/mm/fault.c > +++ b/arch/sh/mm/fault.c > @@ -355,7 +355,7 @@ static inline int access_error(int error_code, struct vm_area_struct *vma) > return 1; > > /* read, not present: */ > - if (unlikely(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)))) > + if (unlikely(!vma_is_accessible(vma))) > return 1; > > return 0; > diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c > index fa4ea09593ab..c461eaab0306 100644 > --- a/arch/x86/mm/fault.c > +++ b/arch/x86/mm/fault.c > @@ -1200,7 +1200,7 @@ access_error(unsigned long error_code, struct vm_area_struct *vma) > return 1; > > /* read, not present: */ > - if (unlikely(!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)))) > + if (unlikely(!vma_is_accessible(vma))) > return 1; > > return 0; > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 52269e56c514..b0e53ef13ff1 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -541,6 +541,11 @@ static inline bool vma_is_anonymous(struct vm_area_struct *vma) > return !vma->vm_ops; > } > > +static inline bool vma_is_accessible(struct vm_area_struct *vma) > +{ > + return vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC); > +} > + > #ifdef CONFIG_SHMEM > /* > * The vma_is_shmem is not inline because it is used only by slow > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index fe4e0d775375..6ce54d57dd09 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -2573,7 +2573,7 @@ static void task_numa_work(struct callback_head *work) > * Skip inaccessible VMAs to avoid any confusion between > * PROT_NONE and NUMA hinting ptes > */ > - if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))) > + if (!vma_is_accessible(vma)) > continue; > > do { > diff --git a/mm/gup.c b/mm/gup.c > index 1b521e0ac1de..c8ffe2e61f03 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -1171,7 +1171,7 @@ long populate_vma_page_range(struct vm_area_struct *vma, > * We want mlock to succeed for regions that have any permissions > * other than PROT_NONE. > */ > - if (vma->vm_flags & (VM_READ | VM_WRITE | VM_EXEC)) > + if (vma_is_accessible(vma)) > gup_flags |= FOLL_FORCE; > > /* > diff --git a/mm/memory.c b/mm/memory.c > index 0bccc622e482..2f07747612b7 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -3942,11 +3942,6 @@ static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf, pmd_t orig_pmd) > return VM_FAULT_FALLBACK; > } > > -static inline bool vma_is_accessible(struct vm_area_struct *vma) > -{ > - return vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE); > -} > - > static vm_fault_t create_huge_pud(struct vm_fault *vmf) > { > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index 977c641f78cf..91c1ad6ab8ea 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -649,8 +649,7 @@ static int queue_pages_test_walk(unsigned long start, unsigned long end, > > if (flags & MPOL_MF_LAZY) { > /* Similar to task_numa_work, skip inaccessible VMAs */ > - if (!is_vm_hugetlb_page(vma) && > - (vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE)) && > + if (!is_vm_hugetlb_page(vma) && vma_is_accessible(vma) && > !(vma->vm_flags & VM_MIXEDMAP)) > change_prot_numa(vma, start, endvma); > return 1; > -- > 2.20.1 > -- Best Regards Guo Ren ML: https://lore.kernel.org/linux-csky/