On 2/25/22 2:22 PM, 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. > Please refer to the latest version V2 instead. https://lore.kernel.org/linux-mm/1645425519-9034-1-git-send-email-anshuman.khandual@xxxxxxx/