Loading drivers/base/memory.c +33 −1 Original line number Diff line number Diff line Loading @@ -530,7 +530,36 @@ memory_probe_store(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR(probe, S_IWUSR, NULL, memory_probe_store); #endif #ifdef CONFIG_MEMORY_HOTREMOVE static ssize_t memory_remove_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u64 phys_addr; int nid, ret; unsigned long pages_per_block = PAGES_PER_SECTION * sections_per_block; ret = kstrtoull(buf, 0, &phys_addr); if (ret) return ret; if (phys_addr & ((pages_per_block << PAGE_SHIFT) - 1)) return -EINVAL; nid = memory_add_physaddr_to_nid(phys_addr); ret = lock_device_hotplug_sysfs(); if (ret) return ret; remove_memory(nid, phys_addr, MIN_MEMORY_BLOCK_SIZE * sections_per_block); unlock_device_hotplug(); return count; } static DEVICE_ATTR(remove, S_IWUSR, NULL, memory_remove_store); #endif /* CONFIG_MEMORY_HOTREMOVE */ #endif /* CONFIG_ARCH_MEMORY_PROBE */ #ifdef CONFIG_MEMORY_FAILURE /* Loading Loading @@ -790,6 +819,9 @@ bool is_memblock_offlined(struct memory_block *mem) static struct attribute *memory_root_attrs[] = { #ifdef CONFIG_ARCH_MEMORY_PROBE &dev_attr_probe.attr, #ifdef CONFIG_MEMORY_HOTREMOVE &dev_attr_remove.attr, #endif #endif #ifdef CONFIG_MEMORY_FAILURE Loading mm/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,7 @@ config MEMORY_HOTPLUG bool "Allow for memory hot-add" depends on SPARSEMEM || X86_64_ACPI_NUMA depends on ARCH_ENABLE_MEMORY_HOTPLUG depends on ARM64 config MEMORY_HOTPLUG_SPARSE def_bool y Loading Loading
drivers/base/memory.c +33 −1 Original line number Diff line number Diff line Loading @@ -530,7 +530,36 @@ memory_probe_store(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR(probe, S_IWUSR, NULL, memory_probe_store); #endif #ifdef CONFIG_MEMORY_HOTREMOVE static ssize_t memory_remove_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { u64 phys_addr; int nid, ret; unsigned long pages_per_block = PAGES_PER_SECTION * sections_per_block; ret = kstrtoull(buf, 0, &phys_addr); if (ret) return ret; if (phys_addr & ((pages_per_block << PAGE_SHIFT) - 1)) return -EINVAL; nid = memory_add_physaddr_to_nid(phys_addr); ret = lock_device_hotplug_sysfs(); if (ret) return ret; remove_memory(nid, phys_addr, MIN_MEMORY_BLOCK_SIZE * sections_per_block); unlock_device_hotplug(); return count; } static DEVICE_ATTR(remove, S_IWUSR, NULL, memory_remove_store); #endif /* CONFIG_MEMORY_HOTREMOVE */ #endif /* CONFIG_ARCH_MEMORY_PROBE */ #ifdef CONFIG_MEMORY_FAILURE /* Loading Loading @@ -790,6 +819,9 @@ bool is_memblock_offlined(struct memory_block *mem) static struct attribute *memory_root_attrs[] = { #ifdef CONFIG_ARCH_MEMORY_PROBE &dev_attr_probe.attr, #ifdef CONFIG_MEMORY_HOTREMOVE &dev_attr_remove.attr, #endif #endif #ifdef CONFIG_MEMORY_FAILURE Loading
mm/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -161,6 +161,7 @@ config MEMORY_HOTPLUG bool "Allow for memory hot-add" depends on SPARSEMEM || X86_64_ACPI_NUMA depends on ARCH_ENABLE_MEMORY_HOTPLUG depends on ARM64 config MEMORY_HOTPLUG_SPARSE def_bool y Loading