Re: [PATCH 1/3] memory: extern memory_block_size_bytes and set_memory_block_size_order

From: David Hildenbrand
Date: Tue Oct 08 2024 - 11:03:36 EST


On 08.10.24 16:51, Gregory Price wrote:
On Tue, Oct 08, 2024 at 04:03:37PM +0200, David Hildenbrand wrote:
On 08.10.24 06:43, Gregory Price wrote:
On CXL systems, block alignment may be as small as 256MB, which may
require a resize of the block size during initialization. This is done
in the ACPI driver, so the resize function need to be made available.

Presently, only x86 provides the functionality to resize memory
block sizes. Wire up a weak stub for set_memory_block_size_order,
similar to memory_block_size_bytes, that simply returns -ENODEV.

Since set_memory_block_size_order is now extern, we also need to
drop the __init macro.

Signed-off-by: Gregory Price <gourry@xxxxxxxxxx>
---
arch/x86/mm/init_64.c | 2 +-
drivers/base/memory.c | 6 ++++++
include/linux/memory.h | 4 ++--
3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index ff253648706f..6086f99449fa 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1424,7 +1424,7 @@ void mark_rodata_ro(void)
/* Adjustable memory block size */
static unsigned long set_memory_block_size;
-int __init set_memory_block_size_order(unsigned int order)
+int set_memory_block_size_order(unsigned int order)
{
unsigned long size = 1UL << order;
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 67858eeb92ed..f9045642f69e 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -110,6 +110,12 @@ static void memory_block_release(struct device *dev)
kfree(mem);
}
+int __weak set_memory_block_size_order(unsigned int order)
+{
+ return -ENODEV;
+}
+EXPORT_SYMBOL_GPL(set_memory_block_size_order);

I can understand what you are trying to achieve, but letting arbitrary
modules mess with this sounds like a bad idea.


I suppose the alternative is trying to scan the CEDT from inside each
machine, rather than the ACPI driver? Seems less maintainable.

I don't entirely disagree with your comment. I hummed and hawwed over
externing this - hence the warning in the x86 machine.

Open to better answers.

Maybe an interface to add more restrictions on the maximum size might be better (instead of setting the size/order, you would impose another upper limit). Just imagine having various users of such an interface ..

--
Cheers,

David / dhildenb