Re: [PATCH v8 2/4] mm: Introduce memblock_isolate_memory
From: Alexandre Ghiti <alex@ghiti.fr>
Date: 2023-03-23 12:30:38
Also in:
linux-devicetree, linux-mm, linux-riscv, lkml
On 3/23/23 13:16, Mike Rapoport wrote:
On Thu, Mar 23, 2023 at 12:52:36PM +0100, Alexandre Ghiti wrote:quoted
On 3/20/23 18:44, Mike Rapoport wrote:quoted
On Mon, Mar 20, 2023 at 11:54:14AM +0100, Alexandre Ghiti wrote:quoted
Hi Mike, On 3/16/23 21:12, Mike Rapoport wrote:quoted
Hi Alexandre, On Thu, Mar 16, 2023 at 02:17:09PM +0100, Alexandre Ghiti wrote:quoted
This function allows to split a region in memblock.memory and will be useful when setting up the linear mapping with STRICT_KERNEL_RWX: it allows to isolate the kernel text/rodata and then avoid to map those regions with a PUD/P4D/PGD.Sorry I've missed it last time. The changelog is fine in the context ofNo worries :)quoted
this series, but if you look at it as a part of memblock changelog it doesn't provide enough background on why memblock_isolate_memory() is useful. Can you please add more context so it would be self explanatory?What about: "memblock.memory contains the list of memory regions and a memory region can cover memory that will be mapped with different permissions. So to ease the mapping process, allow to isolate those regions by introducing a new function called memblock_isolate_memory. This will be used in arch specific code to isolate the kernel text/rodata regions when STRICT_KERNEL_RWX is enabled so that we avoid mapping them with PUD/P4D/PGD mappings."With this change ... STRICT_KERNEL_RWX is enabled so that they can be mapped with base pages.Actually they will get mapped with PMD mappings :) I'll just append: "or PMD mapping" to your sentence above if that's ok with you.Didn't read the rest of the patches :) .. STRICT_KERNEL_RWX is enabled so that they can be mapped with differently than the rest of the memory. Does it cover the usescases?
Yes, fine with me! Thanks again
quoted
quoted
Acked-by: Mike Rapoport (IBM) <rppt@kernel.org>Thanks for your review, Alexquoted
quoted
Thanks, Alexquoted
quoted
Signed-off-by: Alexandre Ghiti <redacted> Reviewed-by: Anup Patel <anup@brainfault.org> Tested-by: Anup Patel <anup@brainfault.org> --- include/linux/memblock.h | 1 + mm/memblock.c | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+)diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 50ad19662a32..2f7ef97c0da7 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h@@ -125,6 +125,7 @@ int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); int memblock_mark_mirror(phys_addr_t base, phys_addr_t size); int memblock_mark_nomap(phys_addr_t base, phys_addr_t size); int memblock_clear_nomap(phys_addr_t base, phys_addr_t size); +int memblock_isolate_memory(phys_addr_t base, phys_addr_t size); void memblock_free_all(void); void memblock_free(void *ptr, size_t size);diff --git a/mm/memblock.c b/mm/memblock.c index 25fd0626a9e7..e8c651a37012 100644 --- a/mm/memblock.c +++ b/mm/memblock.c@@ -805,6 +805,26 @@ static int __init_memblock memblock_isolate_range(struct memblock_type *type, return 0; } +/** + * memblock_isolate_memory - isolate given range in memblock.memory + * @base: base of range to isolate + * @size: size of range to isolate + * + * Isolates the given range in memblock.memory so that it does not share any + * region with other ranges. + * + * Return: + * 0 on success, -errno on failure. + */ + +int __init_memblock memblock_isolate_memory(phys_addr_t base, phys_addr_t size) +{ + int start_rgn, end_rgn; + + return memblock_isolate_range(&memblock.memory, base, size, + &start_rgn, &end_rgn); +} + static int __init_memblock memblock_remove_range(struct memblock_type *type, phys_addr_t base, phys_addr_t size) {-- 2.37.2
_______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel