Messages in this thread Patch in this message | | | From | Baoquan He <> | Subject | [Patch v2] mm/hotplug: Only respect mem= parameter during boot stage | Date | Tue, 10 Dec 2019 16:44:13 +0800 |
| |
In commit 357b4da50a62 ("x86: respect memory size limiting via mem= parameter") a global varialbe global max_mem_size is added to store the value parsed from 'mem= ', then checked when memory region is added. This truly stops those DIMM from being added into system memory during boot-time.
However, it also limits the later memory hotplug functionality. Any memory board can't be hot added any more if its region is beyond the max_mem_size. System will print error like below:
[ 216.387164] acpi PNP0C80:02: add_memory failed [ 216.389301] acpi PNP0C80:02: acpi_memory_enable_device() error [ 216.392187] acpi PNP0C80:02: Enumeration failure
From document of 'mem= ' parameter, it should be a restriction during boot, but not impact the system memory adding/removing after booting.
mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory ...
So fix it by also checking if it's during boot-time when restrict memory adding. Otherwise, skip the restriction.
Fixes: 357b4da50a62 ("x86: respect memory size limiting via mem= parameter") Signed-off-by: Baoquan He <bhe@redhat.com> --- mm/memory_hotplug.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 55ac23ef11c1..989707295d15 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -105,7 +105,11 @@ static struct resource *register_memory_resource(u64 start, u64 size) unsigned long flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY; char *resource_name = "System RAM"; - if (start + size > max_mem_size) + /* + * Make sure value parsed from 'mem=' only restricts memory adding + * during boot-time, so that memory hotplug won't be impacted. + */ + if (start + size > max_mem_size && system_state < SYSTEM_RUNNING) return ERR_PTR(-E2BIG); /* -- 2.17.2
| |