mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
mm/mmap: build protect protection_map[] with __P000
Patch series "mm/mmap: Drop __SXXX/__PXXX macros from across platforms", v7. __SXXX/__PXXX macros are unnecessary abstraction layer in creating the generic protection_map[] array which is used for vm_get_page_prot(). This abstraction layer can be avoided, if the platforms just define the array protection_map[] for all possible vm_flags access permission combinations and also export vm_get_page_prot() implementation. This series drops __SXXX/__PXXX macros from across platforms in the tree. First it build protects generic protection_map[] array with '#ifdef __P000' and moves it inside platforms which enable ARCH_HAS_VM_GET_PAGE_PROT. Later this build protects same array with '#ifdef ARCH_HAS_VM_GET_PAGE_PROT' and moves inside remaining platforms while enabling ARCH_HAS_VM_GET_PAGE_PROT. This adds a new macro DECLARE_VM_GET_PAGE_PROT defining the current generic vm_get_page_prot(), in order for it to be reused on platforms that do not require custom implementation. Finally, ARCH_HAS_VM_GET_PAGE_PROT can just be dropped, as all platforms now define and export vm_get_page_prot(), via looking up a private and static protection_map[] array. protection_map[] data type has been changed as 'static const' on all platforms that do not change it during boot. This patch (of 26): Build protect generic protection_map[] array with __P000, so that it can be moved inside all the platforms one after the other. Otherwise there will be build failures during this process. CONFIG_ARCH_HAS_VM_GET_PAGE_PROT cannot be used for this purpose as only certain platforms enable this config now. Link: https://lkml.kernel.org/r/20220711070600.2378316-1-anshuman.khandual@arm.com Link: https://lkml.kernel.org/r/20220711070600.2378316-2-anshuman.khandual@arm.com Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> Suggested-by: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Brian Cain <bcain@quicinc.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Chris Zankel <chris@zankel.net> Cc: "David S. Miller" <davem@davemloft.net> Cc: Dinh Nguyen <dinguyen@kernel.org> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Guo Ren <guoren@kernel.org> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Huacai Chen <chenhuacai@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com> Cc: Jeff Dike <jdike@addtoit.com> Cc: Jonas Bonn <jonas@southpole.se> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Simek <monstr@monstr.eu> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Palmer Dabbelt <palmer@dabbelt.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Paul Walmsley <paul.walmsley@sifive.com> Cc: Richard Henderson <rth@twiddle.net> Cc: Rich Felker <dalias@libc.org> Cc: Russell King <linux@armlinux.org.uk> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Stafford Horne <shorne@gmail.com> Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Vineet Gupta <vgupta@kernel.org> Cc: WANG Xuerui <kernel@xen0n.name> Cc: Will Deacon <will@kernel.org> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
9330723c26
commit
840532711d
@ -425,7 +425,9 @@ extern unsigned int kobjsize(const void *objp);
|
|||||||
* mapping from the currently active vm_flags protection bits (the
|
* mapping from the currently active vm_flags protection bits (the
|
||||||
* low four bits) to a page protection mask..
|
* low four bits) to a page protection mask..
|
||||||
*/
|
*/
|
||||||
|
#ifdef __P000
|
||||||
extern pgprot_t protection_map[16];
|
extern pgprot_t protection_map[16];
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The default fault flags that should be used by most of the
|
* The default fault flags that should be used by most of the
|
||||||
|
@ -101,6 +101,7 @@ static void unmap_region(struct mm_struct *mm,
|
|||||||
* w: (no) no
|
* w: (no) no
|
||||||
* x: (yes) yes
|
* x: (yes) yes
|
||||||
*/
|
*/
|
||||||
|
#ifdef __P000
|
||||||
pgprot_t protection_map[16] __ro_after_init = {
|
pgprot_t protection_map[16] __ro_after_init = {
|
||||||
[VM_NONE] = __P000,
|
[VM_NONE] = __P000,
|
||||||
[VM_READ] = __P001,
|
[VM_READ] = __P001,
|
||||||
@ -119,6 +120,7 @@ pgprot_t protection_map[16] __ro_after_init = {
|
|||||||
[VM_SHARED | VM_EXEC | VM_WRITE] = __S110,
|
[VM_SHARED | VM_EXEC | VM_WRITE] = __S110,
|
||||||
[VM_SHARED | VM_EXEC | VM_WRITE | VM_READ] = __S111
|
[VM_SHARED | VM_EXEC | VM_WRITE | VM_READ] = __S111
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef CONFIG_ARCH_HAS_VM_GET_PAGE_PROT
|
#ifndef CONFIG_ARCH_HAS_VM_GET_PAGE_PROT
|
||||||
pgprot_t vm_get_page_prot(unsigned long vm_flags)
|
pgprot_t vm_get_page_prot(unsigned long vm_flags)
|
||||||
|
Loading…
Reference in New Issue
Block a user