--- v3
+++ v5
@@ -1,116 +1,145 @@
-The patch-set was divided from following thread's patch-set.
- https://lkml.org/lkml/2012/9/5/201
+This patch series aims to support physical memory hot-remove.
-The last version of this patchset:
- https://lkml.org/lkml/2012/10/23/213
+The patches can free/remove following things:
-If you want to know the reason, please read following thread.
-
-https://lkml.org/lkml/2012/10/2/83
-
-The patch-set has only the function of kernel core side for physical
-memory hot remove. So if you use the patch, please apply following
-patches.
-
-- bug fix for memory hot remove
- https://lkml.org/lkml/2012/10/31/269
-
-- acpi framework
- https://lkml.org/lkml/2012/10/26/175
-
-The patches can free/remove the following things:
-
- - /sys/firmware/memmap/X/{end, start, type} : [PATCH 2/10]
- - mem_section and related sysfs files : [PATCH 3-4/10]
- - memmap of sparse-vmemmap : [PATCH 5-7/10]
- - page table of removed memory : [RFC PATCH 8/10]
- - node and related sysfs files : [RFC PATCH 9-10/10]
-
-* [PATCH 2/10] checks whether the memory can be removed or not.
+ - acpi_memory_info : [RFC PATCH 4/19]
+ - /sys/firmware/memmap/X/{end, start, type} : [RFC PATCH 8/19]
+ - iomem_resource : [RFC PATCH 9/19]
+ - mem_section and related sysfs files : [RFC PATCH 10-11, 13-16/19]
+ - page table of removed memory : [RFC PATCH 12/19]
+ - node and related sysfs files : [RFC PATCH 18-19/19]
If you find lack of function for physical memory hot-remove, please let me
know.
-How to test this patchset?
-1. apply this patchset and build the kernel. MEMORY_HOTPLUG, MEMORY_HOTREMOVE,
- ACPI_HOTPLUG_MEMORY must be selected.
-2. load the module acpi_memhotplug
-3. hotplug the memory device(it depends on your hardware)
- You will see the memory device under the directory /sys/bus/acpi/devices/.
- Its name is PNP0C80:XX.
-4. online/offline pages provided by this memory device
- You can write online/offline to /sys/devices/system/memory/memoryX/state to
- online/offline pages provided by this memory device
-5. hotremove the memory device
- You can hotremove the memory device by the hardware, or writing 1 to
- /sys/bus/acpi/devices/PNP0C80:XX/eject.
+change log of v5:
+ * merge the patchset to clear page table and the patchset to hot remove
+ memory(from ishimatsu) to one big patchset.
-Note: if the memory provided by the memory device is used by the kernel, it
-can't be offlined. It is not a bug.
+ [RFC PATCH v5 1/19]
+ * rename remove_memory() to offline_memory()/offline_pages()
-Known problems:
-1. hotremoving memory device may cause kernel panicked
- This bug will be fixed by Liu Jiang's patch:
- https://lkml.org/lkml/2012/7/3/1
+ [RFC PATCH v5 2/19]
+ * new patch: implement offline_memory(). This function offlines pages,
+ update memory block's state, and notify the userspace that the memory
+ block's state is changed.
+
+ [RFC PATCH v5 4/19]
+ * offline and remove memory in acpi_memory_disable_device() too.
+
+ [RFC PATCH v5 17/19]
+ * new patch: add a new function __remove_zone() to revert the things done
+ in the function __add_zone().
+
+ [RFC PATCH v5 18/19]
+ * flush work befor reseting node device.
+
+change log of v4:
+ * remove "memory-hotplug : unify argument of firmware_map_add_early/hotplug"
+ from the patch series, since the patch is a bugfix. It is being disccussed
+ on other thread. But for testing the patch series, the patch is needed.
+ So I added the patch as [PATCH 0/13].
+
+ [RFC PATCH v4 2/13]
+ * check memory is online or not at remove_memory()
+ * add memory_add_physaddr_to_nid() to acpi_memory_device_remove() for
+ getting node id
+
+ [RFC PATCH v4 3/13]
+ * create new patch : check memory is online or not at online_pages()
+
+ [RFC PATCH v4 4/13]
+ * add __ref section to remove_memory()
+ * call firmware_map_remove_entry() before remove_sysfs_fw_map_entry()
+
+ [RFC PATCH v4 11/13]
+ * rewrite register_page_bootmem_memmap() for removing page used as PT/PMD
+
+change log of v3:
+ * rebase to 3.5.0-rc6
+
+ [RFC PATCH v2 2/13]
+ * remove extra kobject_put()
+
+ * The patch was commented by Wen. Wen's comment is
+ "acpi_memory_device_remove() should ignore a return value of
+ remove_memory() since caller does not care the return value".
+ But I did not change it since I think caller should care the
+ return value. And I am trying to fix it as follow:
+
+ https://lkml.org/lkml/2012/7/5/624
+
+ [RFC PATCH v2 4/13]
+ * remove a firmware_memmap_entry allocated by kzmalloc()
+
+change log of v2:
+ [RFC PATCH v2 2/13]
+ * check whether memory block is offline or not before calling offline_memory()
+ * check whether section is valid or not in is_memblk_offline()
+ * call kobject_put() for each memory_block in is_memblk_offline()
+
+ [RFC PATCH v2 3/13]
+ * unify the end argument of firmware_map_add_early/hotplug
+
+ [RFC PATCH v2 4/13]
+ * add release_firmware_map_entry() for freeing firmware_map_entry
+
+ [RFC PATCH v2 6/13]
+ * add release_memory_block() for freeing memory_block
+
+ [RFC PATCH v2 11/13]
+ * fix wrong arguments of free_pages()
-Changelogs from v2 to v3:
- Patch9: call sync_global_pgds() if pgd is changed
- Patch10: fix a problem int the patch
+Wen Congyang (5):
+ memory-hotplug: implement offline_memory()
+ memory-hotplug: store the node id in acpi_memory_device
+ memory-hotplug: export the function acpi_bus_remove()
+ memory-hotplug: call acpi_bus_remove() to remove memory device
+ memory-hotplug: introduce new function arch_remove_memory()
-Changelogs from v1 to v2:
- Patch1: new patch, offline memory twice. 1st iterate: offline every non primary
- memory block. 2nd iterate: offline primary (i.e. first added) memory
- block.
-
- Patch3: new patch, no logical change, just remove reduntant codes.
-
- Patch9: merge the patch from wujianguo into this patch. flush tlb on all cpu
- after the pagetable is changed.
-
- Patch12: new patch, free node_data when a node is offlined
-
-Wen Congyang (6):
- memory-hotplug: try to offline the memory twice to avoid dependence
- memory-hotplug: remove redundant codes
- memory-hotplug: introduce new function arch_remove_memory() for
- removing page table depends on architecture
- memory-hotplug: remove page table of x86_64 architecture
- memory-hotplug: remove sysfs file of node
- memory-hotplug: free node_data when a node is offlined
-
-Yasuaki Ishimatsu (6):
- memory-hotplug: check whether all memory blocks are offlined or not
- when removing memory
+Yasuaki Ishimatsu (14):
+ memory-hotplug: rename remove_memory() to
+ offline_memory()/offline_pages()
+ memory-hotplug: offline and remove memory when removing the memory
+ device
+ memory-hotplug: check whether memory is present or not
memory-hotplug: remove /sys/firmware/memmap/X sysfs
- memory-hotplug: unregister memory section on SPARSEMEM_VMEMMAP
+ memory-hotplug: does not release memory region in PAGES_PER_SECTION
+ chunks
+ memory-hotplug: add memory_block_release
+ memory-hotplug: remove_memory calls __remove_pages
+ memory-hotplug: check page type in get_page_bootmem
+ memory-hotplug: move register_page_bootmem_info_node and
+ put_page_bootmem for sparse-vmemmap
memory-hotplug: implement register_page_bootmem_info_section of
sparse-vmemmap
- memory-hotplug: remove memmap of sparse-vmemmap
- memory-hotplug: memory_hotplug: clear zone when removing the memory
+ memory-hotplug: free memmap of sparse-vmemmap
+ memory_hotplug: clear zone when the memory is removed
+ memory-hotplug: add node_device_release
+ memory-hotplug: remove sysfs file of node
- arch/ia64/mm/discontig.c | 14 ++
- arch/ia64/mm/init.c | 18 ++
- arch/powerpc/mm/init_64.c | 14 ++
- arch/powerpc/mm/mem.c | 12 +
- arch/s390/mm/init.c | 12 +
- arch/s390/mm/vmem.c | 14 ++
- arch/sh/mm/init.c | 17 ++
- arch/sparc/mm/init_64.c | 14 ++
- arch/tile/mm/init.c | 8 +
- arch/x86/include/asm/pgtable_types.h | 1 +
- arch/x86/mm/init_32.c | 12 +
- arch/x86/mm/init_64.c | 417 +++++++++++++++++++++++++++++++++++
- arch/x86/mm/pageattr.c | 47 ++--
- drivers/acpi/acpi_memhotplug.c | 8 +-
- drivers/base/memory.c | 6 +
- drivers/firmware/memmap.c | 98 +++++++-
- include/linux/firmware-map.h | 6 +
- include/linux/memory_hotplug.h | 15 +-
- include/linux/mm.h | 5 +-
- mm/memory_hotplug.c | 409 ++++++++++++++++++++++++++++++++--
- mm/sparse.c | 5 +-
- 21 files changed, 1095 insertions(+), 57 deletions(-)
-
---
-1.8.0
+ arch/ia64/mm/init.c | 16 +
+ arch/powerpc/mm/mem.c | 14 +
+ arch/powerpc/platforms/pseries/hotplug-memory.c | 16 +-
+ arch/s390/mm/init.c | 8 +
+ arch/sh/mm/init.c | 15 +
+ arch/tile/mm/init.c | 8 +
+ arch/x86/include/asm/pgtable_types.h | 1 +
+ arch/x86/mm/init_32.c | 10 +
+ arch/x86/mm/init_64.c | 333 ++++++++++++++++++++++
+ arch/x86/mm/pageattr.c | 47 ++--
+ drivers/acpi/acpi_memhotplug.c | 51 +++-
+ drivers/acpi/scan.c | 3 +-
+ drivers/base/memory.c | 90 ++++++-
+ drivers/base/node.c | 8 +
+ drivers/firmware/memmap.c | 78 +++++-
+ include/acpi/acpi_bus.h | 1 +
+ include/linux/firmware-map.h | 6 +
+ include/linux/memory.h | 5 +
+ include/linux/memory_hotplug.h | 25 +-
+ include/linux/mm.h | 5 +-
+ include/linux/mmzone.h | 19 ++
+ mm/memory_hotplug.c | 337 +++++++++++++++++++++--
+ mm/sparse.c | 5 +-
+ 23 files changed, 1010 insertions(+), 91 deletions(-)