On 14.11.23 19:02, Sumanth Korikkar wrote:
Implement MEM_PHYS_ONLINE and MEM_PHYS_OFFLINE memory notifiers on s390 Implementation of MEM_PHYS_ONLINE Memory Notifier: * Transition the memory block to an accessible/online state using the sclp assign command. * Execute __add_pages() for the memory block, enabling a self-contained memory map range. For boot-time memory, vmemmap mapping is carried out through sparse_init(). Implementation of MEM_PHYS_OFFLINE Memory Notifier: * Execute __remove_pages() exclusively for the memory block (applicable where a self-contained memory map was possible before). * Shift the memory block to an inaccessible/offline state using the sclp unassign command. Additional Implementation Considerations: * When MHP_MEMMAP_ON_MEMORY is disabled, the system retains the old behavior. This means the memory map is allocated from default memory, and struct vmemmap pages are populated during the standby memory detection phase. * With MHP_MEMMAP_ON_MEMORY enabled (allowing self-contained memory map), the memory map is allocated using the self-contained memory map range. Struct vmemmap pages are populated during the memory hotplug phase. * If MACHINE_HAS_EDAT1 is unavailable, MHP_MEMMAP_ON_MEMORY is automatically disabled. This ensures that vmemmap pagetables do not consume additional memory from the default memory allocator. * The MEM_GOING_ONLINE notifier has been modified to perform no operation, as MEM_PHYS_ONLINE already executes the sclp assign command. * The MEM_CANCEL_ONLINE notifier now performs no operation, as MEM_PHYS_OFFLINE already executes the sclp unassign command. * The call to __add_pages() in arch_add_memory() with altmap support is skipped. This operation is deferred and will be performed later in the MEM_PHYS_ONLINE notifier. Reviewed-by: Gerald Schaefer <gerald.schaefer@xxxxxxxxxxxxx> Signed-off-by: Sumanth Korikkar <sumanthk@xxxxxxxxxxxxx> --- arch/s390/mm/init.c | 16 +++++++++++++++- drivers/s390/char/sclp_cmd.c | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 8d9a60ccb777..db505ed590b2 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c @@ -288,6 +288,12 @@ int arch_add_memory(int nid, u64 start, u64 size, rc = vmem_add_mapping(start, size); if (rc) return rc; + /* + * If MHP_MEMMAP_ON_MEMORY is enabled, perform __add_pages() during memory + * onlining phase + */ + if (params->altmap) + return 0;
So we'd have added memory blocks without a memmap? Sorry, but this seems to further hack into the s390x direction.
Maybe s390x should just provide a dedicate interface to add these memory blocks instead of adding them during boot and then relying on the old way of using online/offline set them online/offline.
-- Cheers, David / dhildenb