On 2/25/22 8:08 PM, Dinh Nguyen wrote: > > > On 2/25/22 08:29, Dinh Nguyen wrote: >> >> >> On 2/25/22 02:52, Anshuman Khandual wrote: >>> >>> >>> On 2/25/22 7:01 AM, Dinh Nguyen wrote: >>>> Hi Anshuman, >>>> >>>> On 2/13/22 20:30, Anshuman Khandual wrote: >>>>> This defines and exports a platform specific custom vm_get_page_prot() via >>>>> subscribing ARCH_HAS_VM_GET_PAGE_PROT. Subsequently all __SXXX and __PXXX >>>>> macros can be dropped which are no longer needed. >>>>> >>>>> Cc: Dinh Nguyen <dinguyen@xxxxxxxxxx> >>>>> Cc: linux-kernel@xxxxxxxxxxxxxxx >>>>> Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> >>>>> Acked-by: Dinh Nguyen <dinguyen@xxxxxxxxxx> >>>>> --- >>>>> arch/nios2/Kconfig | 1 + >>>>> arch/nios2/include/asm/pgtable.h | 16 ------------ >>>>> arch/nios2/mm/init.c | 45 ++++++++++++++++++++++++++++++++ >>>>> 3 files changed, 46 insertions(+), 16 deletions(-) >>>>> >>>>> diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig >>>>> index 33fd06f5fa41..85a58a357a3b 100644 >>>>> --- a/arch/nios2/Kconfig >>>>> +++ b/arch/nios2/Kconfig >>>>> @@ -6,6 +6,7 @@ config NIOS2 >>>>> select ARCH_HAS_SYNC_DMA_FOR_CPU >>>>> select ARCH_HAS_SYNC_DMA_FOR_DEVICE >>>>> select ARCH_HAS_DMA_SET_UNCACHED >>>>> + select ARCH_HAS_VM_GET_PAGE_PROT >>>>> select ARCH_NO_SWAP >>>>> select COMMON_CLK >>>>> select TIMER_OF >>>>> diff --git a/arch/nios2/include/asm/pgtable.h b/arch/nios2/include/asm/pgtable.h >>>>> index 4a995fa628ee..2678dad58a63 100644 >>>>> --- a/arch/nios2/include/asm/pgtable.h >>>>> +++ b/arch/nios2/include/asm/pgtable.h >>>>> @@ -40,24 +40,8 @@ struct mm_struct; >>>>> */ >>>>> /* Remove W bit on private pages for COW support */ >>>>> -#define __P000 MKP(0, 0, 0) >>>>> -#define __P001 MKP(0, 0, 1) >>>>> -#define __P010 MKP(0, 0, 0) /* COW */ >>>>> -#define __P011 MKP(0, 0, 1) /* COW */ >>>>> -#define __P100 MKP(1, 0, 0) >>>>> -#define __P101 MKP(1, 0, 1) >>>>> -#define __P110 MKP(1, 0, 0) /* COW */ >>>>> -#define __P111 MKP(1, 0, 1) /* COW */ >>>>> /* Shared pages can have exact HW mapping */ >>>>> -#define __S000 MKP(0, 0, 0) >>>>> -#define __S001 MKP(0, 0, 1) >>>>> -#define __S010 MKP(0, 1, 0) >>>>> -#define __S011 MKP(0, 1, 1) >>>>> -#define __S100 MKP(1, 0, 0) >>>>> -#define __S101 MKP(1, 0, 1) >>>>> -#define __S110 MKP(1, 1, 0) >>>>> -#define __S111 MKP(1, 1, 1) >>>>> /* Used all over the kernel */ >>>>> #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_CACHED | _PAGE_READ | \ >>>>> diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c >>>>> index 613fcaa5988a..311b2146a248 100644 >>>>> --- a/arch/nios2/mm/init.c >>>>> +++ b/arch/nios2/mm/init.c >>>>> @@ -124,3 +124,48 @@ const char *arch_vma_name(struct vm_area_struct *vma) >>>>> { >>>>> return (vma->vm_start == KUSER_BASE) ? "[kuser]" : NULL; >>>>> } >>>>> + >>>>> +pgprot_t vm_get_page_prot(unsigned long vm_flags) >>>>> +{ >>>>> + switch (vm_flags & (VM_READ | VM_WRITE | VM_EXEC | VM_SHARED)) { >>>>> + case VM_NONE: >>>>> + return MKP(0, 0, 0); >>>>> + case VM_READ: >>>>> + return MKP(0, 0, 1); >>>>> + /* COW */ >>>>> + case VM_WRITE: >>>>> + return MKP(0, 0, 0); >>>>> + /* COW */ >>>>> + case VM_WRITE | VM_READ: >>>>> + return MKP(0, 0, 1); >>>>> + case VM_EXEC: >>>>> + return MKP(1, 0, 0); >>>>> + case VM_EXEC | VM_READ: >>>>> + return MKP(1, 0, 1); >>>>> + /* COW */ >>>>> + case VM_EXEC | VM_WRITE: >>>>> + return MKP(1, 0, 0); >>>>> + /* COW */ >>>>> + case VM_EXEC | VM_WRITE | VM_READ: >>>>> + return MKP(1, 0, 1); >>>>> + case VM_SHARED: >>>>> + return MKP(0, 0, 0); >>>>> + case VM_SHARED | VM_READ: >>>>> + return MKP(0, 0, 1); >>>>> + case VM_SHARED | VM_WRITE: >>>>> + return MKP(0, 1, 0); >>>>> + case VM_SHARED | VM_WRITE | VM_READ: >>>>> + return MKP(0, 1, 1); >>>>> + case VM_SHARED | VM_EXEC: >>>>> + return MKP(1, 0, 0); >>>>> + case VM_SHARED | VM_EXEC | VM_READ: >>>>> + return MKP(1, 0, 1); >>>>> + case VM_SHARED | VM_EXEC | VM_WRITE: >>>>> + return MKP(1, 1, 0); >>>>> + case VM_SHARED | VM_EXEC | VM_WRITE | VM_READ: >>>>> + return MKP(1, 1, 1); >>>>> + default: >>>>> + BUILD_BUG(); >>>>> + } >>>>> +} >>>>> +EXPORT_SYMBOL(vm_get_page_prot); >>>> >>>> I'm getting this compile error after applying this patch when build NIOS2: >>> >>> Hmm, that is strange. >>> >>> Did you apply the entire series or atleast upto the nios2 patch ? Generic >>> vm_get_page_prot() should not be called (which is build complaining here) >>> when ARCH_HAS_VM_GET_PAGE_PROT is already enabled on nios2 platform. >>> >>> Ran a quick build test on nios2 for the entire series and also just upto >>> this particular patch, build was successful. >>> >> >> Ok, I did not apply the whole series, just this patch. >> > > > Is someone taking this whole series or should I just take this patch? I expect the series (latest instead) will go via the mm tree, but will really appreciate your tags if you find the series acceptable.