linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@kernel.org>
To: Anshuman Khandual <anshuman.khandual@arm.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	hch@infradead.org, akpm@linux-foundation.org
Subject: Re: [RFC V1 00/31] mm/mmap: Drop protection_map[] and platform's __SXXX/__PXXX requirements
Date: Thu, 27 Jan 2022 14:38:53 +0200	[thread overview]
Message-ID: <YfKSXXTZOa9FYug8@kernel.org> (raw)
In-Reply-To: <1643029028-12710-1-git-send-email-anshuman.khandual@arm.com>

Hi Anshuman,

On Mon, Jan 24, 2022 at 06:26:37PM +0530, Anshuman Khandual wrote:
> protection_map[] is an array based construct that translates given vm_flags
> combination. This array contains page protection map, which is populated by
> the platform via [__S000 .. __S111] and [__P000 .. __P111] exported macros.
> Primary usage for protection_map[] is for vm_get_page_prot(), which is used
> to determine page protection value for a given vm_flags. vm_get_page_prot()
> implementation, could again call platform overrides arch_vm_get_page_prot()
> and arch_filter_pgprot(). Some platforms override protection_map[] that was
> originally built with __SXXX/__PXXX with different runtime values.
> 
> Currently there are multiple layers of abstraction i.e __SXXX/__PXXX macros
> , protection_map[], arch_vm_get_page_prot() and arch_filter_pgprot() built
> between the platform and generic MM, finally defining vm_get_page_prot().
> 
> Hence this series proposes to drop all these abstraction levels and instead
> just move the responsibility of defining vm_get_page_prot() to the platform
> itself making it clean and simple.
> 
> This first introduces ARCH_HAS_VM_GET_PAGE_PROT which enables the platforms
> to define custom vm_get_page_prot(). This starts converting platforms that
> either change protection_map[] or define the overrides arch_filter_pgprot()
> or arch_vm_get_page_prot() which enables for those constructs to be dropped
> off completely. This series then converts remaining platforms which enables
> for __SXXX/__PXXX constructs to be dropped off completely. Finally it drops
> the generic vm_get_page_prot() and then ARCH_HAS_VM_GET_PAGE_PROT as every
> platform now defines their own vm_get_page_prot().

I generally like the idea, I just think the conversion can be more straight
forward. Rather than adding ARCH_HAS_VM_GET_PAGE_PROT and then dropping it,
why won't me make the generic vm_get_page_prot() __weak, then add per-arch
implementation and in the end drop the generic one?
 
> The last patch demonstrates how vm_flags combination indices can be defined
> as macros and be replaces across all platforms (if required, not done yet).
> 
> The series has been inspired from an earlier discuss with Christoph Hellwig
> 
> https://lore.kernel.org/all/1632712920-8171-1-git-send-email-anshuman.khandual@arm.com/
> 
> This series applies on 5.17-rc1 after the following patch.
> 
> https://lore.kernel.org/all/1643004823-16441-1-git-send-email-anshuman.khandual@arm.com/
> 
> This has been cross built for multiple platforms. I would like to get some
> early feed back on this proposal. All reviews and suggestions welcome.
> 
> Hello Christoph,
> 
> I have taken the liberty to preserve your authorship on the x86 patch which
> is borrowed almost as is from our earlier discussion. I have also added you
> as 'Suggested-by:' on the patch that adds config ARCH_HAS_VM_GET_PAGE_PROT.
> Nonetheless please feel free to correct me for any other missing authorship
> attributes I should have added. Thank you.
> 
> - Anshuman
> 
> Cc: Christoph Hellwig <hch@infradead.org>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: linux-mm@kvack.org
> Cc: linux-kernel@vger.kernel.org
> 
> Anshuman Khandual (30):
>   mm/debug_vm_pgtable: Directly use vm_get_page_prot()
>   mm/mmap: Clarify protection_map[] indices
>   mm/mmap: Add new config ARCH_HAS_VM_GET_PAGE_PROT
>   powerpc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   arm64/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   sparc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   mips/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   m68k/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   arm/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   mm/mmap: Drop protection_map[]
>   mm/mmap: Drop arch_filter_pgprot()
>   mm/mmap: Drop arch_vm_get_page_pgprot()
>   s390/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   riscv/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   alpha/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   sh/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   arc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   csky/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   extensa/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   parisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   openrisc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   um/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   microblaze/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   nios2/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   hexagon/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   nds32/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   ia64/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
>   mm/mmap: Drop generic vm_get_page_prot()
>   mm/mmap: Drop ARCH_HAS_VM_GET_PAGE_PROT
>   mm/mmap: Define macros for vm_flags access permission combinations
> 
> Christoph Hellwig (1):
>   x86/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT
> 
>  arch/alpha/include/asm/pgtable.h          | 17 -----
>  arch/alpha/mm/init.c                      | 41 +++++++++++
>  arch/arc/include/asm/pgtable-bits-arcv2.h | 17 -----
>  arch/arc/mm/mmap.c                        | 41 +++++++++++
>  arch/arm/include/asm/pgtable.h            | 18 -----
>  arch/arm/mm/mmu.c                         | 50 +++++++++++--
>  arch/arm64/Kconfig                        |  1 -
>  arch/arm64/include/asm/mman.h             |  3 +-
>  arch/arm64/include/asm/pgtable-prot.h     | 18 -----
>  arch/arm64/include/asm/pgtable.h          |  2 +-
>  arch/arm64/mm/mmap.c                      | 50 +++++++++++++
>  arch/csky/include/asm/pgtable.h           | 18 -----
>  arch/csky/mm/init.c                       | 41 +++++++++++
>  arch/hexagon/include/asm/pgtable.h        | 24 -------
>  arch/hexagon/mm/init.c                    | 42 +++++++++++
>  arch/ia64/include/asm/pgtable.h           | 17 -----
>  arch/ia64/mm/init.c                       | 43 ++++++++++-
>  arch/m68k/include/asm/mcf_pgtable.h       | 59 ---------------
>  arch/m68k/include/asm/motorola_pgtable.h  | 22 ------
>  arch/m68k/include/asm/sun3_pgtable.h      | 22 ------
>  arch/m68k/mm/init.c                       | 87 +++++++++++++++++++++++
>  arch/m68k/mm/motorola.c                   | 44 +++++++++++-
>  arch/microblaze/include/asm/pgtable.h     | 17 -----
>  arch/microblaze/mm/init.c                 | 41 +++++++++++
>  arch/mips/include/asm/pgtable.h           | 22 ------
>  arch/mips/mm/cache.c                      | 65 ++++++++++-------
>  arch/nds32/include/asm/pgtable.h          | 17 -----
>  arch/nds32/mm/mmap.c                      | 41 +++++++++++
>  arch/nios2/include/asm/pgtable.h          | 16 -----
>  arch/nios2/mm/init.c                      | 41 +++++++++++
>  arch/openrisc/include/asm/pgtable.h       | 18 -----
>  arch/openrisc/mm/init.c                   | 41 +++++++++++
>  arch/parisc/include/asm/pgtable.h         | 20 ------
>  arch/parisc/mm/init.c                     | 41 +++++++++++
>  arch/powerpc/include/asm/mman.h           |  3 +-
>  arch/powerpc/include/asm/pgtable.h        | 19 -----
>  arch/powerpc/mm/mmap.c                    | 47 ++++++++++++
>  arch/riscv/include/asm/pgtable.h          | 16 -----
>  arch/riscv/mm/init.c                      | 41 +++++++++++
>  arch/s390/include/asm/pgtable.h           | 17 -----
>  arch/s390/mm/mmap.c                       | 41 +++++++++++
>  arch/sh/include/asm/pgtable.h             | 17 -----
>  arch/sh/mm/mmap.c                         | 43 +++++++++++
>  arch/sparc/include/asm/mman.h             |  1 -
>  arch/sparc/include/asm/pgtable_32.h       | 19 -----
>  arch/sparc/include/asm/pgtable_64.h       | 19 -----
>  arch/sparc/mm/init_32.c                   | 41 +++++++++++
>  arch/sparc/mm/init_64.c                   | 71 +++++++++++++-----
>  arch/um/include/asm/pgtable.h             | 17 -----
>  arch/um/kernel/mem.c                      | 41 +++++++++++
>  arch/x86/Kconfig                          |  1 -
>  arch/x86/include/asm/pgtable.h            |  5 --
>  arch/x86/include/asm/pgtable_types.h      | 19 -----
>  arch/x86/include/uapi/asm/mman.h          | 14 ----
>  arch/x86/mm/Makefile                      |  2 +-
>  arch/x86/mm/mem_encrypt_amd.c             |  4 --
>  arch/x86/mm/pgprot.c                      | 71 ++++++++++++++++++
>  arch/xtensa/include/asm/pgtable.h         | 18 -----
>  arch/xtensa/mm/init.c                     | 41 +++++++++++
>  include/linux/mm.h                        | 45 ++++++++++--
>  include/linux/mman.h                      |  4 --
>  mm/Kconfig                                |  3 -
>  mm/debug_vm_pgtable.c                     | 27 +++----
>  mm/mmap.c                                 | 22 ------
>  64 files changed, 1150 insertions(+), 636 deletions(-)
>  create mode 100644 arch/x86/mm/pgprot.c
> 
> -- 
> 2.25.1
> 
> 

-- 
Sincerely yours,
Mike.


  parent reply	other threads:[~2022-01-27 12:39 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-24 12:56 [RFC V1 00/31] mm/mmap: Drop protection_map[] and platform's __SXXX/__PXXX requirements Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 01/31] mm/debug_vm_pgtable: Directly use vm_get_page_prot() Anshuman Khandual
2022-01-26  7:15   ` Christoph Hellwig
2022-01-27  4:16     ` Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 02/31] mm/mmap: Clarify protection_map[] indices Anshuman Khandual
2022-01-26  7:16   ` Christoph Hellwig
2022-01-27  4:07     ` Anshuman Khandual
2022-01-27 12:39   ` Mike Rapoport
2022-01-31  3:25     ` Anshuman Khandual
2022-02-05  9:10   ` Firo Yang
2022-02-09  3:23     ` Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 03/31] mm/mmap: Add new config ARCH_HAS_VM_GET_PAGE_PROT Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 04/31] powerpc/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT Anshuman Khandual
2022-02-03 18:15   ` Mike Rapoport
2022-02-04  2:57     ` Anshuman Khandual
2022-02-04  4:44       ` Mike Rapoport
2022-01-24 12:56 ` [RFC V1 05/31] arm64/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 06/31] sparc/mm: " Anshuman Khandual
2022-01-24 12:58   ` David Miller
2022-01-24 18:21   ` Khalid Aziz
2022-01-24 12:56 ` [RFC V1 07/31] mips/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 08/31] m68k/mm: " Anshuman Khandual
2022-01-24 14:13   ` Andreas Schwab
2022-01-25  3:42     ` Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 09/31] arm/mm: " Anshuman Khandual
2022-01-24 17:06   ` Russell King (Oracle)
2022-01-25  3:36     ` Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 10/31] x86/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 11/31] mm/mmap: Drop protection_map[] Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 12/31] mm/mmap: Drop arch_filter_pgprot() Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 13/31] mm/mmap: Drop arch_vm_get_page_pgprot() Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 14/31] s390/mm: Enable ARCH_HAS_VM_GET_PAGE_PROT Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 15/31] riscv/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 16/31] alpha/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 17/31] sh/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 18/31] arc/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 19/31] csky/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 20/31] extensa/mm: " Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 21/31] parisc/mm: " Anshuman Khandual
2022-01-25 16:53   ` Rolf Eike Beer
2022-01-27  4:06     ` Anshuman Khandual
2022-01-24 12:56 ` [RFC V1 22/31] openrisc/mm: " Anshuman Khandual
2022-02-05  6:58   ` [OpenRISC] " Stafford Horne
2022-01-24 12:57 ` [RFC V1 23/31] um/mm: " Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 24/31] microblaze/mm: " Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 25/31] nios2/mm: " Anshuman Khandual
2022-01-26 16:38   ` Dinh Nguyen
2022-01-24 12:57 ` [RFC V1 26/31] hexagon/mm: " Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 27/31] nds32/mm: " Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 28/31] ia64/mm: " Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 29/31] mm/mmap: Drop generic vm_get_page_prot() Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 30/31] mm/mmap: Drop ARCH_HAS_VM_GET_PAGE_PROT Anshuman Khandual
2022-01-24 12:57 ` [RFC V1 31/31] mm/mmap: Define macros for vm_flags access permission combinations Anshuman Khandual
2022-02-03  5:24   ` Anshuman Khandual
2022-01-27 12:38 ` Mike Rapoport [this message]
2022-01-31  3:35   ` [RFC V1 00/31] mm/mmap: Drop protection_map[] and platform's __SXXX/__PXXX requirements Anshuman Khandual

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YfKSXXTZOa9FYug8@kernel.org \
    --to=rppt@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=hch@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).