Thread (17 messages) 17 messages, 5 authors, 2023-03-24

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 of
No 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,

Alex

quoted
quoted
Thanks,

Alex

quoted
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help