From: Alexandru Elisei <alexandru.elisei@arm.com> To: catalin.marinas@arm.com, will@kernel.org, oliver.upton@linux.dev, maz@kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, arnd@arndb.de, akpm@linux-foundation.org, mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, vschneid@redhat.com, mhiramat@kernel.org, rppt@kernel.org, hughd@google.com Cc: pcc@google.com, steven.price@arm.com, anshuman.khandual@arm.com, vincenzo.frascino@arm.com, david@redhat.com, eugenis@google.com, kcc@google.com, hyesoo.yu@samsung.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH RFC v2 00/27] Add support for arm64 MTE dynamic tag storage reuse Date: Sun, 19 Nov 2023 16:56:54 +0000 [thread overview] Message-ID: <20231119165721.9849-1-alexandru.elisei@arm.com> (raw) The series is based on v6.7-rc1 and can be cloned with: $ git clone https://gitlab.arm.com/linux-arm/linux-ae.git \ -b arm-mte-dynamic-carveout-rfc-v2 Introduction ============ Memory Tagging Extension (MTE) is implemented currently to have a static carve-out of the DRAM to store the allocation tags (a.k.a. memory colour). This is what we call the tag storage. Each 16 bytes have 4 bits of tags, so this means 1/32 of the DRAM, roughly 3% used for the tag storage. This is done transparently by the hardware/interconnect (with firmware setup) and normally hidden from the OS. So a checked memory access to location X generates a tag fetch from location Y in the carve-out and this tag is compared with the bits 59:56 in the pointer. The correspondence from X to Y is linear (subject to a minimum block size to deal with some address interleaving). The software doesn't need to know about this correspondence as we have specific instructions like STG/LDG to location X that lead to a tag store/load to Y. Now, not all memory used by applications is tagged (mmap(PROT_MTE)). For example, some large allocations may not use PROT_MTE at all or only for the first and last page since initialising the tags takes time. The side-effect is that of that 3% of DRAM, only part of it, say 1%, is effectively used. The series aims to take that unused tag storage and release it to the page allocator for normal data usage. The first complication is that a PROT_MTE page allocation at address X will need to reserve the tag storage page at location Y (and migrate any data in that page if it is in use). To make things worse, pages in the tag storage/carve-out range cannot use PROT_MTE themselves on current hardware, so this adds the second complication - a heterogeneous memory layout. The kernel needs to know where to allocate a PROT_MTE page from or migrate a current page if it becomes PROT_MTE (mprotect()) and the range it is in does not support tagging. Some other complications are arm64-specific like cache coherency between tags and data accesses. There is a draft architecture spec which will be released soon, detailing how the hardware behaves. All of this will be entirely transparent to userspace. As with the current kernel (without this dynamic tag storage), a user only needs to ask for PROT_MTE mappings to get tagged pages. Implementation ============== MTE tag storage reuse is accomplished with the following changes to the Linux kernel: 1. The tag storage memory is exposed to the memory allocator as MIGRATE_CMA. The arm64 code manages this memory directly instead of using cma_declare_contiguous/cma_alloc for performance reasons. There is a limitation to this approach: MIGRATE_CMA cannot be used for tagged allocations, even if not all MIGRATE_CMA memory is tag storage. 2. mprotect(PROT_MTE) is implemented by adding a fault-on-access mechanism for existing pages. When a page is next accessed, a fault is taken and the corresponding tag storage is reserved. 3. When the code tries to copy tags to a page (when swapping in a newly allocated page, or during migration/THP collapse) which doesn't have the tag storage reserved, the tags are copied to an xarray and restored when tag storage is reserved for the destination page. KVM support has not been implemented yet, that because a non-MTE enabled VMA can back the memory of an MTE-enabled VM. It will be added after there is a consensus on the right approach on the memory management support. Overview of the patches ======================= For people not interested in the arm64 details, you probably want to start with patches 1-10, which mostly deal with adding the necessary hooks to the memory management code, and patches 19 and 20 which add the page fault-on-access mechanism for regular pages, respectively huge pages. Patch 21 is rather invasive, it moves the definition of struct migration_target_control out of mm/internal.h to migrate.h, and the arm64 code also uses isolate_lru_page() and putback_movable_pages() when migrating a tag storage page out of a PROT_MTE VMA. And finally patch 26 is an optimization for a performance regression that has been reported with Chrome and it introduces CONFIG_WANTS_TAKE_PAGE_OFF_BUDDY to allow arm64 to use take_page_off_buddy() to fast track reserving tag storage when the page is free. The rest of the patches are mostly arm64 specific. Patches 11-18 support for detecting the tag storage region and reserving tag storage when a tagged page is allocated. Patches 19-21 add the page fault-on-access on mechanism and use it to reserve tag storage when needed. Patches 22 and 23 handle saving tags temporarily to an xarray if the page doesn't have tag storage, and copying the tags over to the tagged page when tag storage is reserved. Changelog ========= Changes since RFC v1 [1]: * The entire series has been reworked to remove MIGRATE_METADATA and put tag storage pages on the MIGRATE_CMA freelists. * Changed how tags are saved and restored when copying them from one page to another if the destination page doesn't have tag storage - now the tags are restored when tag storage is reserved for the destination page instead of restoring them in set_pte_at() -> mte_sync_tags(). [1] https://lore.kernel.org/lkml/20230823131350.114942-1-alexandru.elisei@arm.com/ Testing ======= To enable MTE dynamic tag storage: - CONFIG_ARM64_MTE_TAG_STORAGE=y - system_supports_mte() returns true - kasan_hw_tags_enabled() returns false - correct DTB node (for the specification, see commit "arm64: mte: Reserve tag storage memory") Check dmesg for the message "MTE tag storage region management enabled". I've tested the series using FVP with MTE enabled, but without support for dynamic tag storage reuse. To simulate it, I've added two fake tag storage regions in the DTB by splitting the upper 2GB memory region into 3: one region for normal RAM, followed by the tag storage for the lower 2GB of memory, then the tag storage for the normal RAM region. Like below: diff --git a/arch/arm64/boot/dts/arm/fvp-base-revc.dts b/arch/arm64/boot/dts/arm/fvp-base-revc.dts index 60472d65a355..8c719825a9b3 100644 --- a/arch/arm64/boot/dts/arm/fvp-base-revc.dts +++ b/arch/arm64/boot/dts/arm/fvp-base-revc.dts @@ -165,12 +165,30 @@ C1_L2: l2-cache1 { }; }; - memory@80000000 { + memory0: memory@80000000 { device_type = "memory"; - reg = <0x00000000 0x80000000 0 0x80000000>, - <0x00000008 0x80000000 0 0x80000000>; + reg = <0x00000000 0x80000000 0 0x80000000>; }; + memory1: memory@880000000 { + device_type = "memory"; + reg = <0x00000008 0x80000000 0 0x78000000>; + }; + + tags0: tag-storage@8f8000000 { + compatible = "arm,mte-tag-storage"; + reg = <0x00000008 0xf8000000 0 0x4000000>; + block-size = <0x1000>; + memory = <&memory0>; + }; + + tags1: tag-storage@8fc000000 { + compatible = "arm,mte-tag-storage"; + reg = <0x00000008 0xfc000000 0 0x3c00000>; + block-size = <0x1000>; + memory = <&memory1>; + }; + reserved-memory { #address-cells = <2>; #size-cells = <2>; Alexandru Elisei (27): arm64: mte: Rework naming for tag manipulation functions arm64: mte: Rename __GFP_ZEROTAGS to __GFP_TAGGED mm: cma: Make CMA_ALLOC_SUCCESS/FAIL count the number of pages mm: migrate/mempolicy: Add hook to modify migration target gfp mm: page_alloc: Add an arch hook to allow prep_new_page() to fail mm: page_alloc: Allow an arch to hook early into free_pages_prepare() mm: page_alloc: Add an arch hook to filter MIGRATE_CMA allocations mm: page_alloc: Partially revert "mm: page_alloc: remove stale CMA guard code" mm: Allow an arch to hook into folio allocation when VMA is known mm: Call arch_swap_prepare_to_restore() before arch_swap_restore() arm64: mte: Reserve tag storage memory arm64: mte: Add tag storage pages to the MIGRATE_CMA migratetype arm64: mte: Make tag storage depend on ARCH_KEEP_MEMBLOCK arm64: mte: Disable dynamic tag storage management if HW KASAN is enabled arm64: mte: Check that tag storage blocks are in the same zone arm64: mte: Manage tag storage on page allocation arm64: mte: Perform CMOs for tag blocks on tagged page allocation/free arm64: mte: Reserve tag block for the zero page mm: mprotect: Introduce PAGE_FAULT_ON_ACCESS for mprotect(PROT_MTE) mm: hugepage: Handle huge page fault on access mm: arm64: Handle tag storage pages mapped before mprotect(PROT_MTE) arm64: mte: swap: Handle tag restoring when missing tag storage arm64: mte: copypage: Handle tag restoring when missing tag storage arm64: mte: Handle fatal signal in reserve_tag_storage() KVM: arm64: Disable MTE if tag storage is enabled arm64: mte: Fast track reserving tag storage when the block is free arm64: mte: Enable dynamic tag storage reuse arch/arm64/Kconfig | 16 + arch/arm64/include/asm/assembler.h | 10 + arch/arm64/include/asm/mte-def.h | 16 +- arch/arm64/include/asm/mte.h | 43 +- arch/arm64/include/asm/mte_tag_storage.h | 75 +++ arch/arm64/include/asm/page.h | 5 +- arch/arm64/include/asm/pgtable-prot.h | 2 + arch/arm64/include/asm/pgtable.h | 96 +++- arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/elfcore.c | 14 +- arch/arm64/kernel/hibernate.c | 46 +- arch/arm64/kernel/mte.c | 12 +- arch/arm64/kernel/mte_tag_storage.c | 686 +++++++++++++++++++++++ arch/arm64/kernel/setup.c | 7 + arch/arm64/kvm/arm.c | 6 +- arch/arm64/lib/mte.S | 34 +- arch/arm64/mm/copypage.c | 59 ++ arch/arm64/mm/fault.c | 261 ++++++++- arch/arm64/mm/mteswap.c | 162 +++++- fs/proc/page.c | 1 + include/linux/gfp_types.h | 14 +- include/linux/huge_mm.h | 2 + include/linux/kernel-page-flags.h | 1 + include/linux/migrate.h | 12 +- include/linux/migrate_mode.h | 1 + include/linux/mmzone.h | 5 + include/linux/page-flags.h | 16 +- include/linux/pgtable.h | 54 ++ include/trace/events/mmflags.h | 5 +- mm/Kconfig | 7 + mm/cma.c | 4 +- mm/huge_memory.c | 5 +- mm/internal.h | 9 - mm/memory-failure.c | 8 +- mm/memory.c | 10 + mm/mempolicy.c | 3 + mm/migrate.c | 3 + mm/page_alloc.c | 118 +++- mm/shmem.c | 14 +- mm/swapfile.c | 7 + 40 files changed, 1668 insertions(+), 182 deletions(-) create mode 100644 arch/arm64/include/asm/mte_tag_storage.h create mode 100644 arch/arm64/kernel/mte_tag_storage.c base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86 -- 2.42.1
WARNING: multiple messages have this Message-ID (diff)
From: Alexandru Elisei <alexandru.elisei@arm.com> To: catalin.marinas@arm.com, will@kernel.org, oliver.upton@linux.dev, maz@kernel.org, james.morse@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, arnd@arndb.de, akpm@linux-foundation.org, mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, bristot@redhat.com, vschneid@redhat.com, mhiramat@kernel.org, rppt@kernel.org, hughd@google.com Cc: pcc@google.com, steven.price@arm.com, anshuman.khandual@arm.com, vincenzo.frascino@arm.com, david@redhat.com, eugenis@google.com, kcc@google.com, hyesoo.yu@samsung.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org Subject: [PATCH RFC v2 00/27] Add support for arm64 MTE dynamic tag storage reuse Date: Sun, 19 Nov 2023 16:56:54 +0000 [thread overview] Message-ID: <20231119165721.9849-1-alexandru.elisei@arm.com> (raw) The series is based on v6.7-rc1 and can be cloned with: $ git clone https://gitlab.arm.com/linux-arm/linux-ae.git \ -b arm-mte-dynamic-carveout-rfc-v2 Introduction ============ Memory Tagging Extension (MTE) is implemented currently to have a static carve-out of the DRAM to store the allocation tags (a.k.a. memory colour). This is what we call the tag storage. Each 16 bytes have 4 bits of tags, so this means 1/32 of the DRAM, roughly 3% used for the tag storage. This is done transparently by the hardware/interconnect (with firmware setup) and normally hidden from the OS. So a checked memory access to location X generates a tag fetch from location Y in the carve-out and this tag is compared with the bits 59:56 in the pointer. The correspondence from X to Y is linear (subject to a minimum block size to deal with some address interleaving). The software doesn't need to know about this correspondence as we have specific instructions like STG/LDG to location X that lead to a tag store/load to Y. Now, not all memory used by applications is tagged (mmap(PROT_MTE)). For example, some large allocations may not use PROT_MTE at all or only for the first and last page since initialising the tags takes time. The side-effect is that of that 3% of DRAM, only part of it, say 1%, is effectively used. The series aims to take that unused tag storage and release it to the page allocator for normal data usage. The first complication is that a PROT_MTE page allocation at address X will need to reserve the tag storage page at location Y (and migrate any data in that page if it is in use). To make things worse, pages in the tag storage/carve-out range cannot use PROT_MTE themselves on current hardware, so this adds the second complication - a heterogeneous memory layout. The kernel needs to know where to allocate a PROT_MTE page from or migrate a current page if it becomes PROT_MTE (mprotect()) and the range it is in does not support tagging. Some other complications are arm64-specific like cache coherency between tags and data accesses. There is a draft architecture spec which will be released soon, detailing how the hardware behaves. All of this will be entirely transparent to userspace. As with the current kernel (without this dynamic tag storage), a user only needs to ask for PROT_MTE mappings to get tagged pages. Implementation ============== MTE tag storage reuse is accomplished with the following changes to the Linux kernel: 1. The tag storage memory is exposed to the memory allocator as MIGRATE_CMA. The arm64 code manages this memory directly instead of using cma_declare_contiguous/cma_alloc for performance reasons. There is a limitation to this approach: MIGRATE_CMA cannot be used for tagged allocations, even if not all MIGRATE_CMA memory is tag storage. 2. mprotect(PROT_MTE) is implemented by adding a fault-on-access mechanism for existing pages. When a page is next accessed, a fault is taken and the corresponding tag storage is reserved. 3. When the code tries to copy tags to a page (when swapping in a newly allocated page, or during migration/THP collapse) which doesn't have the tag storage reserved, the tags are copied to an xarray and restored when tag storage is reserved for the destination page. KVM support has not been implemented yet, that because a non-MTE enabled VMA can back the memory of an MTE-enabled VM. It will be added after there is a consensus on the right approach on the memory management support. Overview of the patches ======================= For people not interested in the arm64 details, you probably want to start with patches 1-10, which mostly deal with adding the necessary hooks to the memory management code, and patches 19 and 20 which add the page fault-on-access mechanism for regular pages, respectively huge pages. Patch 21 is rather invasive, it moves the definition of struct migration_target_control out of mm/internal.h to migrate.h, and the arm64 code also uses isolate_lru_page() and putback_movable_pages() when migrating a tag storage page out of a PROT_MTE VMA. And finally patch 26 is an optimization for a performance regression that has been reported with Chrome and it introduces CONFIG_WANTS_TAKE_PAGE_OFF_BUDDY to allow arm64 to use take_page_off_buddy() to fast track reserving tag storage when the page is free. The rest of the patches are mostly arm64 specific. Patches 11-18 support for detecting the tag storage region and reserving tag storage when a tagged page is allocated. Patches 19-21 add the page fault-on-access on mechanism and use it to reserve tag storage when needed. Patches 22 and 23 handle saving tags temporarily to an xarray if the page doesn't have tag storage, and copying the tags over to the tagged page when tag storage is reserved. Changelog ========= Changes since RFC v1 [1]: * The entire series has been reworked to remove MIGRATE_METADATA and put tag storage pages on the MIGRATE_CMA freelists. * Changed how tags are saved and restored when copying them from one page to another if the destination page doesn't have tag storage - now the tags are restored when tag storage is reserved for the destination page instead of restoring them in set_pte_at() -> mte_sync_tags(). [1] https://lore.kernel.org/lkml/20230823131350.114942-1-alexandru.elisei@arm.com/ Testing ======= To enable MTE dynamic tag storage: - CONFIG_ARM64_MTE_TAG_STORAGE=y - system_supports_mte() returns true - kasan_hw_tags_enabled() returns false - correct DTB node (for the specification, see commit "arm64: mte: Reserve tag storage memory") Check dmesg for the message "MTE tag storage region management enabled". I've tested the series using FVP with MTE enabled, but without support for dynamic tag storage reuse. To simulate it, I've added two fake tag storage regions in the DTB by splitting the upper 2GB memory region into 3: one region for normal RAM, followed by the tag storage for the lower 2GB of memory, then the tag storage for the normal RAM region. Like below: diff --git a/arch/arm64/boot/dts/arm/fvp-base-revc.dts b/arch/arm64/boot/dts/arm/fvp-base-revc.dts index 60472d65a355..8c719825a9b3 100644 --- a/arch/arm64/boot/dts/arm/fvp-base-revc.dts +++ b/arch/arm64/boot/dts/arm/fvp-base-revc.dts @@ -165,12 +165,30 @@ C1_L2: l2-cache1 { }; }; - memory@80000000 { + memory0: memory@80000000 { device_type = "memory"; - reg = <0x00000000 0x80000000 0 0x80000000>, - <0x00000008 0x80000000 0 0x80000000>; + reg = <0x00000000 0x80000000 0 0x80000000>; }; + memory1: memory@880000000 { + device_type = "memory"; + reg = <0x00000008 0x80000000 0 0x78000000>; + }; + + tags0: tag-storage@8f8000000 { + compatible = "arm,mte-tag-storage"; + reg = <0x00000008 0xf8000000 0 0x4000000>; + block-size = <0x1000>; + memory = <&memory0>; + }; + + tags1: tag-storage@8fc000000 { + compatible = "arm,mte-tag-storage"; + reg = <0x00000008 0xfc000000 0 0x3c00000>; + block-size = <0x1000>; + memory = <&memory1>; + }; + reserved-memory { #address-cells = <2>; #size-cells = <2>; Alexandru Elisei (27): arm64: mte: Rework naming for tag manipulation functions arm64: mte: Rename __GFP_ZEROTAGS to __GFP_TAGGED mm: cma: Make CMA_ALLOC_SUCCESS/FAIL count the number of pages mm: migrate/mempolicy: Add hook to modify migration target gfp mm: page_alloc: Add an arch hook to allow prep_new_page() to fail mm: page_alloc: Allow an arch to hook early into free_pages_prepare() mm: page_alloc: Add an arch hook to filter MIGRATE_CMA allocations mm: page_alloc: Partially revert "mm: page_alloc: remove stale CMA guard code" mm: Allow an arch to hook into folio allocation when VMA is known mm: Call arch_swap_prepare_to_restore() before arch_swap_restore() arm64: mte: Reserve tag storage memory arm64: mte: Add tag storage pages to the MIGRATE_CMA migratetype arm64: mte: Make tag storage depend on ARCH_KEEP_MEMBLOCK arm64: mte: Disable dynamic tag storage management if HW KASAN is enabled arm64: mte: Check that tag storage blocks are in the same zone arm64: mte: Manage tag storage on page allocation arm64: mte: Perform CMOs for tag blocks on tagged page allocation/free arm64: mte: Reserve tag block for the zero page mm: mprotect: Introduce PAGE_FAULT_ON_ACCESS for mprotect(PROT_MTE) mm: hugepage: Handle huge page fault on access mm: arm64: Handle tag storage pages mapped before mprotect(PROT_MTE) arm64: mte: swap: Handle tag restoring when missing tag storage arm64: mte: copypage: Handle tag restoring when missing tag storage arm64: mte: Handle fatal signal in reserve_tag_storage() KVM: arm64: Disable MTE if tag storage is enabled arm64: mte: Fast track reserving tag storage when the block is free arm64: mte: Enable dynamic tag storage reuse arch/arm64/Kconfig | 16 + arch/arm64/include/asm/assembler.h | 10 + arch/arm64/include/asm/mte-def.h | 16 +- arch/arm64/include/asm/mte.h | 43 +- arch/arm64/include/asm/mte_tag_storage.h | 75 +++ arch/arm64/include/asm/page.h | 5 +- arch/arm64/include/asm/pgtable-prot.h | 2 + arch/arm64/include/asm/pgtable.h | 96 +++- arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/elfcore.c | 14 +- arch/arm64/kernel/hibernate.c | 46 +- arch/arm64/kernel/mte.c | 12 +- arch/arm64/kernel/mte_tag_storage.c | 686 +++++++++++++++++++++++ arch/arm64/kernel/setup.c | 7 + arch/arm64/kvm/arm.c | 6 +- arch/arm64/lib/mte.S | 34 +- arch/arm64/mm/copypage.c | 59 ++ arch/arm64/mm/fault.c | 261 ++++++++- arch/arm64/mm/mteswap.c | 162 +++++- fs/proc/page.c | 1 + include/linux/gfp_types.h | 14 +- include/linux/huge_mm.h | 2 + include/linux/kernel-page-flags.h | 1 + include/linux/migrate.h | 12 +- include/linux/migrate_mode.h | 1 + include/linux/mmzone.h | 5 + include/linux/page-flags.h | 16 +- include/linux/pgtable.h | 54 ++ include/trace/events/mmflags.h | 5 +- mm/Kconfig | 7 + mm/cma.c | 4 +- mm/huge_memory.c | 5 +- mm/internal.h | 9 - mm/memory-failure.c | 8 +- mm/memory.c | 10 + mm/mempolicy.c | 3 + mm/migrate.c | 3 + mm/page_alloc.c | 118 +++- mm/shmem.c | 14 +- mm/swapfile.c | 7 + 40 files changed, 1668 insertions(+), 182 deletions(-) create mode 100644 arch/arm64/include/asm/mte_tag_storage.h create mode 100644 arch/arm64/kernel/mte_tag_storage.c base-commit: b85ea95d086471afb4ad062012a4d73cd328fa86 -- 2.42.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2023-11-19 16:57 UTC|newest] Thread overview: 198+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-11-19 16:56 Alexandru Elisei [this message] 2023-11-19 16:56 ` [PATCH RFC v2 00/27] Add support for arm64 MTE dynamic tag storage reuse Alexandru Elisei 2023-11-19 16:56 ` [PATCH RFC v2 01/27] arm64: mte: Rework naming for tag manipulation functions Alexandru Elisei 2023-11-19 16:56 ` Alexandru Elisei 2023-11-19 16:56 ` [PATCH RFC v2 02/27] arm64: mte: Rename __GFP_ZEROTAGS to __GFP_TAGGED Alexandru Elisei 2023-11-19 16:56 ` Alexandru Elisei 2023-11-19 16:56 ` [PATCH RFC v2 03/27] mm: cma: Make CMA_ALLOC_SUCCESS/FAIL count the number of pages Alexandru Elisei 2023-11-19 16:56 ` Alexandru Elisei 2023-11-19 16:56 ` [PATCH RFC v2 04/27] mm: migrate/mempolicy: Add hook to modify migration target gfp Alexandru Elisei 2023-11-19 16:56 ` Alexandru Elisei 2023-11-25 10:03 ` Mike Rapoport 2023-11-25 10:03 ` Mike Rapoport 2023-11-27 11:52 ` Alexandru Elisei 2023-11-27 11:52 ` Alexandru Elisei 2023-11-28 6:49 ` Mike Rapoport 2023-11-28 6:49 ` Mike Rapoport 2023-11-28 17:21 ` Alexandru Elisei 2023-11-28 17:21 ` Alexandru Elisei 2023-11-19 16:56 ` [PATCH RFC v2 05/27] mm: page_alloc: Add an arch hook to allow prep_new_page() to fail Alexandru Elisei 2023-11-19 16:56 ` Alexandru Elisei 2023-11-24 11:46 ` kernel test robot 2023-11-24 19:35 ` David Hildenbrand 2023-11-24 19:35 ` David Hildenbrand 2023-11-27 12:09 ` Alexandru Elisei 2023-11-27 12:09 ` Alexandru Elisei 2023-11-28 16:57 ` David Hildenbrand 2023-11-28 16:57 ` David Hildenbrand 2023-11-28 17:17 ` Alexandru Elisei 2023-11-28 17:17 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 06/27] mm: page_alloc: Allow an arch to hook early into free_pages_prepare() Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-24 13:19 ` kernel test robot 2023-11-24 19:36 ` David Hildenbrand 2023-11-24 19:36 ` David Hildenbrand 2023-11-27 13:03 ` Alexandru Elisei 2023-11-27 13:03 ` Alexandru Elisei 2023-11-28 16:58 ` David Hildenbrand 2023-11-28 16:58 ` David Hildenbrand 2023-11-28 17:17 ` Alexandru Elisei 2023-11-28 17:17 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 07/27] mm: page_alloc: Add an arch hook to filter MIGRATE_CMA allocations Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 08/27] mm: page_alloc: Partially revert "mm: page_alloc: remove stale CMA guard code" Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 09/27] mm: Allow an arch to hook into folio allocation when VMA is known Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 10/27] mm: Call arch_swap_prepare_to_restore() before arch_swap_restore() Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 11/27] arm64: mte: Reserve tag storage memory Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-29 8:44 ` Hyesoo Yu 2023-11-29 8:44 ` Hyesoo Yu 2023-11-30 11:56 ` Alexandru Elisei 2023-11-30 11:56 ` Alexandru Elisei 2023-12-03 12:14 ` Alexandru Elisei 2023-12-03 12:14 ` Alexandru Elisei 2023-12-08 5:03 ` Hyesoo Yu 2023-12-08 5:03 ` Hyesoo Yu 2023-12-11 14:45 ` Alexandru Elisei 2023-12-11 14:45 ` Alexandru Elisei 2023-12-11 17:29 ` Rob Herring 2023-12-11 17:29 ` Rob Herring 2023-12-12 16:38 ` Alexandru Elisei 2023-12-12 16:38 ` Alexandru Elisei 2023-12-12 18:44 ` Rob Herring 2023-12-12 18:44 ` Rob Herring 2023-12-13 13:04 ` Alexandru Elisei 2023-12-13 13:04 ` Alexandru Elisei 2023-12-13 14:06 ` Rob Herring 2023-12-13 14:06 ` Rob Herring 2023-12-13 14:51 ` Alexandru Elisei 2023-12-13 14:51 ` Alexandru Elisei 2023-12-13 17:22 ` Rob Herring 2023-12-13 17:22 ` Rob Herring 2023-12-13 17:44 ` Alexandru Elisei 2023-12-13 17:44 ` Alexandru Elisei 2023-12-13 20:30 ` Rob Herring 2023-12-13 20:30 ` Rob Herring 2023-12-14 15:45 ` Alexandru Elisei 2023-12-14 15:45 ` Alexandru Elisei 2023-12-14 18:55 ` Rob Herring 2023-12-14 18:55 ` Rob Herring 2023-12-18 10:59 ` Alexandru Elisei 2023-12-18 10:59 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 12/27] arm64: mte: Add tag storage pages to the MIGRATE_CMA migratetype Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-24 19:40 ` David Hildenbrand 2023-11-24 19:40 ` David Hildenbrand 2023-11-27 15:01 ` Alexandru Elisei 2023-11-27 15:01 ` Alexandru Elisei 2023-11-28 17:03 ` David Hildenbrand 2023-11-28 17:03 ` David Hildenbrand 2023-11-29 10:44 ` Alexandru Elisei 2023-11-29 10:44 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 13/27] arm64: mte: Make tag storage depend on ARCH_KEEP_MEMBLOCK Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-24 19:51 ` David Hildenbrand 2023-11-24 19:51 ` David Hildenbrand 2023-11-27 15:04 ` Alexandru Elisei 2023-11-27 15:04 ` Alexandru Elisei 2023-11-28 17:05 ` David Hildenbrand 2023-11-28 17:05 ` David Hildenbrand 2023-11-29 10:46 ` Alexandru Elisei 2023-11-29 10:46 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 14/27] arm64: mte: Disable dynamic tag storage management if HW KASAN is enabled Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-24 19:54 ` David Hildenbrand 2023-11-24 19:54 ` David Hildenbrand 2023-11-27 15:07 ` Alexandru Elisei 2023-11-27 15:07 ` Alexandru Elisei 2023-11-28 17:05 ` David Hildenbrand 2023-11-28 17:05 ` David Hildenbrand 2023-11-19 16:57 ` [PATCH RFC v2 15/27] arm64: mte: Check that tag storage blocks are in the same zone Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-24 19:56 ` David Hildenbrand 2023-11-24 19:56 ` David Hildenbrand 2023-11-27 15:10 ` Alexandru Elisei 2023-11-27 15:10 ` Alexandru Elisei 2023-11-29 8:57 ` Hyesoo Yu 2023-11-29 8:57 ` Hyesoo Yu 2023-11-30 12:00 ` Alexandru Elisei 2023-11-30 12:00 ` Alexandru Elisei 2023-12-08 5:27 ` Hyesoo Yu 2023-12-08 5:27 ` Hyesoo Yu 2023-12-11 14:21 ` Alexandru Elisei 2023-12-11 14:21 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 16/27] arm64: mte: Manage tag storage on page allocation Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-29 9:10 ` Hyesoo Yu 2023-11-29 9:10 ` Hyesoo Yu 2023-11-29 13:33 ` Alexandru Elisei 2023-11-29 13:33 ` Alexandru Elisei 2023-12-08 5:29 ` Hyesoo Yu 2023-12-08 5:29 ` Hyesoo Yu 2023-11-19 16:57 ` [PATCH RFC v2 17/27] arm64: mte: Perform CMOs for tag blocks on tagged page allocation/free Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 18/27] arm64: mte: Reserve tag block for the zero page Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-28 17:06 ` David Hildenbrand 2023-11-28 17:06 ` David Hildenbrand 2023-11-29 11:30 ` Alexandru Elisei 2023-11-29 11:30 ` Alexandru Elisei 2023-11-29 13:13 ` David Hildenbrand 2023-11-29 13:13 ` David Hildenbrand 2023-11-29 13:41 ` Alexandru Elisei 2023-11-29 13:41 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 19/27] mm: mprotect: Introduce PAGE_FAULT_ON_ACCESS for mprotect(PROT_MTE) Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-28 17:55 ` David Hildenbrand 2023-11-28 17:55 ` David Hildenbrand 2023-11-28 18:00 ` David Hildenbrand 2023-11-28 18:00 ` David Hildenbrand 2023-11-29 11:55 ` Alexandru Elisei 2023-11-29 11:55 ` Alexandru Elisei 2023-11-29 12:48 ` David Hildenbrand 2023-11-29 12:48 ` David Hildenbrand 2023-11-29 9:27 ` Hyesoo Yu 2023-11-29 9:27 ` Hyesoo Yu 2023-11-30 12:06 ` Alexandru Elisei 2023-11-30 12:06 ` Alexandru Elisei 2023-11-30 12:49 ` David Hildenbrand 2023-11-30 12:49 ` David Hildenbrand 2023-11-30 13:32 ` Alexandru Elisei 2023-11-30 13:32 ` Alexandru Elisei 2023-11-30 13:43 ` David Hildenbrand 2023-11-30 13:43 ` David Hildenbrand 2023-11-30 14:33 ` Alexandru Elisei 2023-11-30 14:33 ` Alexandru Elisei 2023-11-30 14:39 ` David Hildenbrand 2023-11-30 14:39 ` David Hildenbrand 2023-11-19 16:57 ` [PATCH RFC v2 20/27] mm: hugepage: Handle huge page fault on access Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-22 1:28 ` Peter Collingbourne 2023-11-22 1:28 ` Peter Collingbourne 2023-11-22 9:22 ` Alexandru Elisei 2023-11-22 9:22 ` Alexandru Elisei 2023-11-28 17:56 ` David Hildenbrand 2023-11-28 17:56 ` David Hildenbrand 2023-11-29 11:56 ` Alexandru Elisei 2023-11-29 11:56 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 21/27] mm: arm64: Handle tag storage pages mapped before mprotect(PROT_MTE) Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-28 5:39 ` Peter Collingbourne 2023-11-28 5:39 ` Peter Collingbourne 2023-11-30 17:43 ` Alexandru Elisei 2023-11-30 17:43 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 22/27] arm64: mte: swap: Handle tag restoring when missing tag storage Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 23/27] arm64: mte: copypage: " Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 24/27] arm64: mte: Handle fatal signal in reserve_tag_storage() Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 25/27] KVM: arm64: Disable MTE if tag storage is enabled Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 26/27] arm64: mte: Fast track reserving tag storage when the block is free Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei 2023-11-19 16:57 ` [PATCH RFC v2 27/27] arm64: mte: Enable dynamic tag storage reuse Alexandru Elisei 2023-11-19 16:57 ` Alexandru Elisei
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=20231119165721.9849-1-alexandru.elisei@arm.com \ --to=alexandru.elisei@arm.com \ --cc=akpm@linux-foundation.org \ --cc=anshuman.khandual@arm.com \ --cc=arnd@arndb.de \ --cc=bristot@redhat.com \ --cc=bsegall@google.com \ --cc=catalin.marinas@arm.com \ --cc=david@redhat.com \ --cc=dietmar.eggemann@arm.com \ --cc=eugenis@google.com \ --cc=hughd@google.com \ --cc=hyesoo.yu@samsung.com \ --cc=james.morse@arm.com \ --cc=juri.lelli@redhat.com \ --cc=kcc@google.com \ --cc=kvmarm@lists.linux.dev \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux-trace-kernel@vger.kernel.org \ --cc=maz@kernel.org \ --cc=mgorman@suse.de \ --cc=mhiramat@kernel.org \ --cc=mingo@redhat.com \ --cc=oliver.upton@linux.dev \ --cc=pcc@google.com \ --cc=peterz@infradead.org \ --cc=rostedt@goodmis.org \ --cc=rppt@kernel.org \ --cc=steven.price@arm.com \ --cc=suzuki.poulose@arm.com \ --cc=vincent.guittot@linaro.org \ --cc=vincenzo.frascino@arm.com \ --cc=vschneid@redhat.com \ --cc=will@kernel.org \ --cc=yuzenghui@huawei.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.