From: David Hildenbrand <david@redhat.com>
To: linux-mm@kvack.org
Cc: Michal Hocko <mhocko@suse.com>,
linux-ia64@vger.kernel.org, linux-sh@vger.kernel.org,
Wei Yang <richard.weiyang@gmail.com>,
Arun KS <arunks@codeaurora.org>, Ingo Molnar <mingo@kernel.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
linux-s390@vger.kernel.org, David Hildenbrand <david@redhat.com>,
Pavel Tatashin <pavel.tatashin@microsoft.com>,
"mike.travis@hpe.com" <mike.travis@hpe.com>,
Mark Brown <broonie@kernel.org>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
Chris Wilson <chris@chris-wilson.co.uk>,
linux-arm-kernel@lists.infradead.org,
Oscar Salvador <osalvador@suse.de>,
Andrew Banman <andrew.banman@hpe.com>,
Mathieu Malaterre <malat@debian.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org,
Alex Deucher <alexander.deucher@amd.com>,
Igor Mammedov <imammedo@redhat.com>,
akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH v3 09/11] mm/memory_hotplug: Remove memory block devices before arch_remove_memory()
Date: Mon, 27 May 2019 11:11:50 +0000 [thread overview]
Message-ID: <20190527111152.16324-10-david@redhat.com> (raw)
In-Reply-To: <20190527111152.16324-1-david@redhat.com>
Let's factor out removing of memory block devices, which is only
necessary for memory added via add_memory() and friends that created
memory block devices. Remove the devices before calling
arch_remove_memory().
This finishes factoring out memory block device handling from
arch_add_memory() and arch_remove_memory().
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: "mike.travis@hpe.com" <mike.travis@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrew Banman <andrew.banman@hpe.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Mark Brown <broonie@kernel.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Pavel Tatashin <pavel.tatashin@microsoft.com>
Cc: Arun KS <arunks@codeaurora.org>
Cc: Mathieu Malaterre <malat@debian.org>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
drivers/base/memory.c | 37 ++++++++++++++++++-------------------
drivers/base/node.c | 11 ++++++-----
include/linux/memory.h | 2 +-
include/linux/node.h | 6 ++----
mm/memory_hotplug.c | 5 +++--
5 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 5a0370f0c506..f28efb0bf5c7 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -763,32 +763,31 @@ int create_memory_block_devices(unsigned long start, unsigned long size)
return ret;
}
-void unregister_memory_section(struct mem_section *section)
+/*
+ * Remove memory block devices for the given memory area. Start and size
+ * have to be aligned to memory block granularity. Memory block devices
+ * have to be offline.
+ */
+void remove_memory_block_devices(unsigned long start, unsigned long size)
{
+ const int start_block_id = pfn_to_block_id(PFN_DOWN(start));
+ const int end_block_id = pfn_to_block_id(PFN_DOWN(start + size));
struct memory_block *mem;
+ int block_id;
- if (WARN_ON_ONCE(!present_section(section)))
+ if (WARN_ON_ONCE(!IS_ALIGNED(start, memory_block_size_bytes()) ||
+ !IS_ALIGNED(size, memory_block_size_bytes())))
return;
mutex_lock(&mem_sysfs_mutex);
-
- /*
- * Some users of the memory hotplug do not want/need memblock to
- * track all sections. Skip over those.
- */
- mem = find_memory_block(section);
- if (!mem)
- goto out_unlock;
-
- unregister_mem_sect_under_nodes(mem, __section_nr(section));
-
- mem->section_count--;
- if (mem->section_count = 0)
+ for (block_id = start_block_id; block_id != end_block_id; block_id++) {
+ mem = find_memory_block_by_id(block_id, NULL);
+ if (WARN_ON_ONCE(!mem))
+ continue;
+ mem->section_count = 0;
+ unregister_memory_block_under_nodes(mem);
unregister_memory(mem);
- else
- put_device(&mem->dev);
-
-out_unlock:
+ }
mutex_unlock(&mem_sysfs_mutex);
}
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 8598fcbd2a17..04fdfa99b8bc 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -801,9 +801,10 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, void *arg)
return 0;
}
-/* unregister memory section under all nodes that it spans */
-int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+/*
+ * Unregister memory block device under all nodes that it spans.
+ */
+int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);
unsigned long pfn, sect_start_pfn, sect_end_pfn;
@@ -816,8 +817,8 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
return -ENOMEM;
nodes_clear(*unlinked_nodes);
- sect_start_pfn = section_nr_to_pfn(phys_index);
- sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
+ sect_start_pfn = section_nr_to_pfn(mem_blk->start_section_nr);
+ sect_end_pfn = section_nr_to_pfn(mem_blk->end_section_nr);
for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
int nid;
diff --git a/include/linux/memory.h b/include/linux/memory.h
index db3e8567f900..f26a5417ec5d 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -112,7 +112,7 @@ extern void unregister_memory_notifier(struct notifier_block *nb);
extern int register_memory_isolate_notifier(struct notifier_block *nb);
extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
int create_memory_block_devices(unsigned long start, unsigned long size);
-extern void unregister_memory_section(struct mem_section *);
+void remove_memory_block_devices(unsigned long start, unsigned long size);
extern int memory_dev_init(void);
extern int memory_notify(unsigned long val, void *v);
extern int memory_isolate_notify(unsigned long val, void *v);
diff --git a/include/linux/node.h b/include/linux/node.h
index 1a557c589ecb..02a29e71b175 100644
--- a/include/linux/node.h
+++ b/include/linux/node.h
@@ -139,8 +139,7 @@ extern int register_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int register_mem_sect_under_node(struct memory_block *mem_blk,
void *arg);
-extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index);
+extern int unregister_memory_block_under_nodes(struct memory_block *mem_blk);
extern int register_memory_node_under_compute_node(unsigned int mem_nid,
unsigned int cpu_nid,
@@ -176,8 +175,7 @@ static inline int register_mem_sect_under_node(struct memory_block *mem_blk,
{
return 0;
}
-static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+static inline int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
return 0;
}
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 9a92549ef23b..82136c5b4c5f 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -520,8 +520,6 @@ static void __remove_section(struct zone *zone, struct mem_section *ms,
if (WARN_ON_ONCE(!valid_section(ms)))
return;
- unregister_memory_section(ms);
-
scn_nr = __section_nr(ms);
start_pfn = section_nr_to_pfn((unsigned long)scn_nr);
__remove_zone(zone, start_pfn);
@@ -1845,6 +1843,9 @@ void __ref __remove_memory(int nid, u64 start, u64 size)
memblock_free(start, size);
memblock_remove(start, size);
+ /* remove memory block devices before removing memory */
+ remove_memory_block_devices(start, size);
+
arch_remove_memory(nid, start, size, NULL);
__release_memory_resource(start, size);
--
2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: David Hildenbrand <david@redhat.com>
To: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org, linux-ia64@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org,
linux-sh@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
akpm@linux-foundation.org,
Dan Williams <dan.j.williams@intel.com>,
Wei Yang <richard.weiyang@gmail.com>,
Igor Mammedov <imammedo@redhat.com>,
David Hildenbrand <david@redhat.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
"mike.travis@hpe.com" <mike.travis@hpe.com>,
Andrew Banman <andrew.banman@hpe.com>,
Ingo Molnar <mingo@kernel.org>,
Alex Deucher <alexander.deucher@amd.com>,
"David S. Miller" <davem@davemloft.net>,
Mark Brown <broonie@kernel.org>,
Chris Wilson <chris@chris-wilson.co.uk>,
Oscar Salvador <osalvador@suse.de>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Michal Hocko <mhocko@suse.com>,
Pavel Tatashin <pavel.tatashin@microsoft.com>,
Arun KS <arunks@codeaurora.org>,
Mathieu Malaterre <malat@debian.org>
Subject: [PATCH v3 09/11] mm/memory_hotplug: Remove memory block devices before arch_remove_memory()
Date: Mon, 27 May 2019 13:11:50 +0200 [thread overview]
Message-ID: <20190527111152.16324-10-david@redhat.com> (raw)
In-Reply-To: <20190527111152.16324-1-david@redhat.com>
Let's factor out removing of memory block devices, which is only
necessary for memory added via add_memory() and friends that created
memory block devices. Remove the devices before calling
arch_remove_memory().
This finishes factoring out memory block device handling from
arch_add_memory() and arch_remove_memory().
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: "mike.travis@hpe.com" <mike.travis@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrew Banman <andrew.banman@hpe.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Mark Brown <broonie@kernel.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Pavel Tatashin <pavel.tatashin@microsoft.com>
Cc: Arun KS <arunks@codeaurora.org>
Cc: Mathieu Malaterre <malat@debian.org>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
drivers/base/memory.c | 37 ++++++++++++++++++-------------------
drivers/base/node.c | 11 ++++++-----
include/linux/memory.h | 2 +-
include/linux/node.h | 6 ++----
mm/memory_hotplug.c | 5 +++--
5 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 5a0370f0c506..f28efb0bf5c7 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -763,32 +763,31 @@ int create_memory_block_devices(unsigned long start, unsigned long size)
return ret;
}
-void unregister_memory_section(struct mem_section *section)
+/*
+ * Remove memory block devices for the given memory area. Start and size
+ * have to be aligned to memory block granularity. Memory block devices
+ * have to be offline.
+ */
+void remove_memory_block_devices(unsigned long start, unsigned long size)
{
+ const int start_block_id = pfn_to_block_id(PFN_DOWN(start));
+ const int end_block_id = pfn_to_block_id(PFN_DOWN(start + size));
struct memory_block *mem;
+ int block_id;
- if (WARN_ON_ONCE(!present_section(section)))
+ if (WARN_ON_ONCE(!IS_ALIGNED(start, memory_block_size_bytes()) ||
+ !IS_ALIGNED(size, memory_block_size_bytes())))
return;
mutex_lock(&mem_sysfs_mutex);
-
- /*
- * Some users of the memory hotplug do not want/need memblock to
- * track all sections. Skip over those.
- */
- mem = find_memory_block(section);
- if (!mem)
- goto out_unlock;
-
- unregister_mem_sect_under_nodes(mem, __section_nr(section));
-
- mem->section_count--;
- if (mem->section_count == 0)
+ for (block_id = start_block_id; block_id != end_block_id; block_id++) {
+ mem = find_memory_block_by_id(block_id, NULL);
+ if (WARN_ON_ONCE(!mem))
+ continue;
+ mem->section_count = 0;
+ unregister_memory_block_under_nodes(mem);
unregister_memory(mem);
- else
- put_device(&mem->dev);
-
-out_unlock:
+ }
mutex_unlock(&mem_sysfs_mutex);
}
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 8598fcbd2a17..04fdfa99b8bc 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -801,9 +801,10 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, void *arg)
return 0;
}
-/* unregister memory section under all nodes that it spans */
-int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+/*
+ * Unregister memory block device under all nodes that it spans.
+ */
+int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);
unsigned long pfn, sect_start_pfn, sect_end_pfn;
@@ -816,8 +817,8 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
return -ENOMEM;
nodes_clear(*unlinked_nodes);
- sect_start_pfn = section_nr_to_pfn(phys_index);
- sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
+ sect_start_pfn = section_nr_to_pfn(mem_blk->start_section_nr);
+ sect_end_pfn = section_nr_to_pfn(mem_blk->end_section_nr);
for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
int nid;
diff --git a/include/linux/memory.h b/include/linux/memory.h
index db3e8567f900..f26a5417ec5d 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -112,7 +112,7 @@ extern void unregister_memory_notifier(struct notifier_block *nb);
extern int register_memory_isolate_notifier(struct notifier_block *nb);
extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
int create_memory_block_devices(unsigned long start, unsigned long size);
-extern void unregister_memory_section(struct mem_section *);
+void remove_memory_block_devices(unsigned long start, unsigned long size);
extern int memory_dev_init(void);
extern int memory_notify(unsigned long val, void *v);
extern int memory_isolate_notify(unsigned long val, void *v);
diff --git a/include/linux/node.h b/include/linux/node.h
index 1a557c589ecb..02a29e71b175 100644
--- a/include/linux/node.h
+++ b/include/linux/node.h
@@ -139,8 +139,7 @@ extern int register_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int register_mem_sect_under_node(struct memory_block *mem_blk,
void *arg);
-extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index);
+extern int unregister_memory_block_under_nodes(struct memory_block *mem_blk);
extern int register_memory_node_under_compute_node(unsigned int mem_nid,
unsigned int cpu_nid,
@@ -176,8 +175,7 @@ static inline int register_mem_sect_under_node(struct memory_block *mem_blk,
{
return 0;
}
-static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+static inline int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
return 0;
}
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 9a92549ef23b..82136c5b4c5f 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -520,8 +520,6 @@ static void __remove_section(struct zone *zone, struct mem_section *ms,
if (WARN_ON_ONCE(!valid_section(ms)))
return;
- unregister_memory_section(ms);
-
scn_nr = __section_nr(ms);
start_pfn = section_nr_to_pfn((unsigned long)scn_nr);
__remove_zone(zone, start_pfn);
@@ -1845,6 +1843,9 @@ void __ref __remove_memory(int nid, u64 start, u64 size)
memblock_free(start, size);
memblock_remove(start, size);
+ /* remove memory block devices before removing memory */
+ remove_memory_block_devices(start, size);
+
arch_remove_memory(nid, start, size, NULL);
__release_memory_resource(start, size);
--
2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: David Hildenbrand <david@redhat.com>
To: linux-mm@kvack.org
Cc: Michal Hocko <mhocko@suse.com>,
linux-ia64@vger.kernel.org, linux-sh@vger.kernel.org,
Wei Yang <richard.weiyang@gmail.com>,
Arun KS <arunks@codeaurora.org>, Ingo Molnar <mingo@kernel.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
linux-s390@vger.kernel.org, David Hildenbrand <david@redhat.com>,
Pavel Tatashin <pavel.tatashin@microsoft.com>,
"mike.travis@hpe.com" <mike.travis@hpe.com>,
Mark Brown <broonie@kernel.org>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
Chris Wilson <chris@chris-wilson.co.uk>,
linux-arm-kernel@lists.infradead.org,
Oscar Salvador <osalvador@suse.de>,
Andrew Banman <andrew.banman@hpe.com>,
Mathieu Malaterre <malat@debian.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org,
Alex Deucher <alexander.deucher@amd.com>,
Igor Mammedov <imammedo@redhat.com>,
akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH v3 09/11] mm/memory_hotplug: Remove memory block devices before arch_remove_memory()
Date: Mon, 27 May 2019 13:11:50 +0200 [thread overview]
Message-ID: <20190527111152.16324-10-david@redhat.com> (raw)
In-Reply-To: <20190527111152.16324-1-david@redhat.com>
Let's factor out removing of memory block devices, which is only
necessary for memory added via add_memory() and friends that created
memory block devices. Remove the devices before calling
arch_remove_memory().
This finishes factoring out memory block device handling from
arch_add_memory() and arch_remove_memory().
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: "mike.travis@hpe.com" <mike.travis@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrew Banman <andrew.banman@hpe.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Mark Brown <broonie@kernel.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Pavel Tatashin <pavel.tatashin@microsoft.com>
Cc: Arun KS <arunks@codeaurora.org>
Cc: Mathieu Malaterre <malat@debian.org>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
drivers/base/memory.c | 37 ++++++++++++++++++-------------------
drivers/base/node.c | 11 ++++++-----
include/linux/memory.h | 2 +-
include/linux/node.h | 6 ++----
mm/memory_hotplug.c | 5 +++--
5 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 5a0370f0c506..f28efb0bf5c7 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -763,32 +763,31 @@ int create_memory_block_devices(unsigned long start, unsigned long size)
return ret;
}
-void unregister_memory_section(struct mem_section *section)
+/*
+ * Remove memory block devices for the given memory area. Start and size
+ * have to be aligned to memory block granularity. Memory block devices
+ * have to be offline.
+ */
+void remove_memory_block_devices(unsigned long start, unsigned long size)
{
+ const int start_block_id = pfn_to_block_id(PFN_DOWN(start));
+ const int end_block_id = pfn_to_block_id(PFN_DOWN(start + size));
struct memory_block *mem;
+ int block_id;
- if (WARN_ON_ONCE(!present_section(section)))
+ if (WARN_ON_ONCE(!IS_ALIGNED(start, memory_block_size_bytes()) ||
+ !IS_ALIGNED(size, memory_block_size_bytes())))
return;
mutex_lock(&mem_sysfs_mutex);
-
- /*
- * Some users of the memory hotplug do not want/need memblock to
- * track all sections. Skip over those.
- */
- mem = find_memory_block(section);
- if (!mem)
- goto out_unlock;
-
- unregister_mem_sect_under_nodes(mem, __section_nr(section));
-
- mem->section_count--;
- if (mem->section_count == 0)
+ for (block_id = start_block_id; block_id != end_block_id; block_id++) {
+ mem = find_memory_block_by_id(block_id, NULL);
+ if (WARN_ON_ONCE(!mem))
+ continue;
+ mem->section_count = 0;
+ unregister_memory_block_under_nodes(mem);
unregister_memory(mem);
- else
- put_device(&mem->dev);
-
-out_unlock:
+ }
mutex_unlock(&mem_sysfs_mutex);
}
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 8598fcbd2a17..04fdfa99b8bc 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -801,9 +801,10 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, void *arg)
return 0;
}
-/* unregister memory section under all nodes that it spans */
-int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+/*
+ * Unregister memory block device under all nodes that it spans.
+ */
+int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);
unsigned long pfn, sect_start_pfn, sect_end_pfn;
@@ -816,8 +817,8 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
return -ENOMEM;
nodes_clear(*unlinked_nodes);
- sect_start_pfn = section_nr_to_pfn(phys_index);
- sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
+ sect_start_pfn = section_nr_to_pfn(mem_blk->start_section_nr);
+ sect_end_pfn = section_nr_to_pfn(mem_blk->end_section_nr);
for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
int nid;
diff --git a/include/linux/memory.h b/include/linux/memory.h
index db3e8567f900..f26a5417ec5d 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -112,7 +112,7 @@ extern void unregister_memory_notifier(struct notifier_block *nb);
extern int register_memory_isolate_notifier(struct notifier_block *nb);
extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
int create_memory_block_devices(unsigned long start, unsigned long size);
-extern void unregister_memory_section(struct mem_section *);
+void remove_memory_block_devices(unsigned long start, unsigned long size);
extern int memory_dev_init(void);
extern int memory_notify(unsigned long val, void *v);
extern int memory_isolate_notify(unsigned long val, void *v);
diff --git a/include/linux/node.h b/include/linux/node.h
index 1a557c589ecb..02a29e71b175 100644
--- a/include/linux/node.h
+++ b/include/linux/node.h
@@ -139,8 +139,7 @@ extern int register_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int register_mem_sect_under_node(struct memory_block *mem_blk,
void *arg);
-extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index);
+extern int unregister_memory_block_under_nodes(struct memory_block *mem_blk);
extern int register_memory_node_under_compute_node(unsigned int mem_nid,
unsigned int cpu_nid,
@@ -176,8 +175,7 @@ static inline int register_mem_sect_under_node(struct memory_block *mem_blk,
{
return 0;
}
-static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+static inline int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
return 0;
}
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 9a92549ef23b..82136c5b4c5f 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -520,8 +520,6 @@ static void __remove_section(struct zone *zone, struct mem_section *ms,
if (WARN_ON_ONCE(!valid_section(ms)))
return;
- unregister_memory_section(ms);
-
scn_nr = __section_nr(ms);
start_pfn = section_nr_to_pfn((unsigned long)scn_nr);
__remove_zone(zone, start_pfn);
@@ -1845,6 +1843,9 @@ void __ref __remove_memory(int nid, u64 start, u64 size)
memblock_free(start, size);
memblock_remove(start, size);
+ /* remove memory block devices before removing memory */
+ remove_memory_block_devices(start, size);
+
arch_remove_memory(nid, start, size, NULL);
__release_memory_resource(start, size);
--
2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: David Hildenbrand <david@redhat.com>
To: linux-mm@kvack.org
Cc: Michal Hocko <mhocko@suse.com>,
linux-ia64@vger.kernel.org, linux-sh@vger.kernel.org,
Wei Yang <richard.weiyang@gmail.com>,
Arun KS <arunks@codeaurora.org>, Ingo Molnar <mingo@kernel.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
linux-s390@vger.kernel.org, David Hildenbrand <david@redhat.com>,
Pavel Tatashin <pavel.tatashin@microsoft.com>,
"mike.travis@hpe.com" <mike.travis@hpe.com>,
Mark Brown <broonie@kernel.org>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Dan Williams <dan.j.williams@intel.com>,
Chris Wilson <chris@chris-wilson.co.uk>,
linux-arm-kernel@lists.infradead.org,
Oscar Salvador <osalvador@suse.de>,
Andrew Banman <andrew.banman@hpe.com>,
Mathieu Malaterre <malat@debian.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-kernel@vger.kernel.org,
Alex Deucher <alexander.deucher@amd.com>,
Igor Mammedov <imammedo@redhat.com>,
akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org,
"David S. Miller" <davem@davemloft.net>
Subject: [PATCH v3 09/11] mm/memory_hotplug: Remove memory block devices before arch_remove_memory()
Date: Mon, 27 May 2019 13:11:50 +0200 [thread overview]
Message-ID: <20190527111152.16324-10-david@redhat.com> (raw)
In-Reply-To: <20190527111152.16324-1-david@redhat.com>
Let's factor out removing of memory block devices, which is only
necessary for memory added via add_memory() and friends that created
memory block devices. Remove the devices before calling
arch_remove_memory().
This finishes factoring out memory block device handling from
arch_add_memory() and arch_remove_memory().
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>
Cc: David Hildenbrand <david@redhat.com>
Cc: "mike.travis@hpe.com" <mike.travis@hpe.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andrew Banman <andrew.banman@hpe.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Mark Brown <broonie@kernel.org>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Oscar Salvador <osalvador@suse.de>
Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Pavel Tatashin <pavel.tatashin@microsoft.com>
Cc: Arun KS <arunks@codeaurora.org>
Cc: Mathieu Malaterre <malat@debian.org>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
---
drivers/base/memory.c | 37 ++++++++++++++++++-------------------
drivers/base/node.c | 11 ++++++-----
include/linux/memory.h | 2 +-
include/linux/node.h | 6 ++----
mm/memory_hotplug.c | 5 +++--
5 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/drivers/base/memory.c b/drivers/base/memory.c
index 5a0370f0c506..f28efb0bf5c7 100644
--- a/drivers/base/memory.c
+++ b/drivers/base/memory.c
@@ -763,32 +763,31 @@ int create_memory_block_devices(unsigned long start, unsigned long size)
return ret;
}
-void unregister_memory_section(struct mem_section *section)
+/*
+ * Remove memory block devices for the given memory area. Start and size
+ * have to be aligned to memory block granularity. Memory block devices
+ * have to be offline.
+ */
+void remove_memory_block_devices(unsigned long start, unsigned long size)
{
+ const int start_block_id = pfn_to_block_id(PFN_DOWN(start));
+ const int end_block_id = pfn_to_block_id(PFN_DOWN(start + size));
struct memory_block *mem;
+ int block_id;
- if (WARN_ON_ONCE(!present_section(section)))
+ if (WARN_ON_ONCE(!IS_ALIGNED(start, memory_block_size_bytes()) ||
+ !IS_ALIGNED(size, memory_block_size_bytes())))
return;
mutex_lock(&mem_sysfs_mutex);
-
- /*
- * Some users of the memory hotplug do not want/need memblock to
- * track all sections. Skip over those.
- */
- mem = find_memory_block(section);
- if (!mem)
- goto out_unlock;
-
- unregister_mem_sect_under_nodes(mem, __section_nr(section));
-
- mem->section_count--;
- if (mem->section_count == 0)
+ for (block_id = start_block_id; block_id != end_block_id; block_id++) {
+ mem = find_memory_block_by_id(block_id, NULL);
+ if (WARN_ON_ONCE(!mem))
+ continue;
+ mem->section_count = 0;
+ unregister_memory_block_under_nodes(mem);
unregister_memory(mem);
- else
- put_device(&mem->dev);
-
-out_unlock:
+ }
mutex_unlock(&mem_sysfs_mutex);
}
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 8598fcbd2a17..04fdfa99b8bc 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -801,9 +801,10 @@ int register_mem_sect_under_node(struct memory_block *mem_blk, void *arg)
return 0;
}
-/* unregister memory section under all nodes that it spans */
-int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+/*
+ * Unregister memory block device under all nodes that it spans.
+ */
+int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL);
unsigned long pfn, sect_start_pfn, sect_end_pfn;
@@ -816,8 +817,8 @@ int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
return -ENOMEM;
nodes_clear(*unlinked_nodes);
- sect_start_pfn = section_nr_to_pfn(phys_index);
- sect_end_pfn = sect_start_pfn + PAGES_PER_SECTION - 1;
+ sect_start_pfn = section_nr_to_pfn(mem_blk->start_section_nr);
+ sect_end_pfn = section_nr_to_pfn(mem_blk->end_section_nr);
for (pfn = sect_start_pfn; pfn <= sect_end_pfn; pfn++) {
int nid;
diff --git a/include/linux/memory.h b/include/linux/memory.h
index db3e8567f900..f26a5417ec5d 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -112,7 +112,7 @@ extern void unregister_memory_notifier(struct notifier_block *nb);
extern int register_memory_isolate_notifier(struct notifier_block *nb);
extern void unregister_memory_isolate_notifier(struct notifier_block *nb);
int create_memory_block_devices(unsigned long start, unsigned long size);
-extern void unregister_memory_section(struct mem_section *);
+void remove_memory_block_devices(unsigned long start, unsigned long size);
extern int memory_dev_init(void);
extern int memory_notify(unsigned long val, void *v);
extern int memory_isolate_notify(unsigned long val, void *v);
diff --git a/include/linux/node.h b/include/linux/node.h
index 1a557c589ecb..02a29e71b175 100644
--- a/include/linux/node.h
+++ b/include/linux/node.h
@@ -139,8 +139,7 @@ extern int register_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid);
extern int register_mem_sect_under_node(struct memory_block *mem_blk,
void *arg);
-extern int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index);
+extern int unregister_memory_block_under_nodes(struct memory_block *mem_blk);
extern int register_memory_node_under_compute_node(unsigned int mem_nid,
unsigned int cpu_nid,
@@ -176,8 +175,7 @@ static inline int register_mem_sect_under_node(struct memory_block *mem_blk,
{
return 0;
}
-static inline int unregister_mem_sect_under_nodes(struct memory_block *mem_blk,
- unsigned long phys_index)
+static inline int unregister_memory_block_under_nodes(struct memory_block *mem_blk)
{
return 0;
}
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index 9a92549ef23b..82136c5b4c5f 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -520,8 +520,6 @@ static void __remove_section(struct zone *zone, struct mem_section *ms,
if (WARN_ON_ONCE(!valid_section(ms)))
return;
- unregister_memory_section(ms);
-
scn_nr = __section_nr(ms);
start_pfn = section_nr_to_pfn((unsigned long)scn_nr);
__remove_zone(zone, start_pfn);
@@ -1845,6 +1843,9 @@ void __ref __remove_memory(int nid, u64 start, u64 size)
memblock_free(start, size);
memblock_remove(start, size);
+ /* remove memory block devices before removing memory */
+ remove_memory_block_devices(start, size);
+
arch_remove_memory(nid, start, size, NULL);
__release_memory_resource(start, size);
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-05-27 11:11 UTC|newest]
Thread overview: 246+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-27 11:11 [PATCH v3 00/11] mm/memory_hotplug: Factor out memory block devicehandling David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` [PATCH v3 01/11] mm/memory_hotplug: Simplify and fix check_hotplug_memory_range() David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-30 17:53 ` Pavel Tatashin
2019-05-30 17:53 ` Pavel Tatashin
2019-05-30 17:53 ` Pavel Tatashin
2019-05-30 17:53 ` Pavel Tatashin
2019-06-10 16:46 ` Oscar Salvador
2019-06-10 16:46 ` Oscar Salvador
2019-06-10 16:46 ` Oscar Salvador
2019-06-10 16:46 ` Oscar Salvador
2019-07-01 7:42 ` Michal Hocko
2019-07-01 7:42 ` Michal Hocko
2019-07-01 7:42 ` Michal Hocko
2019-07-01 7:42 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 02/11] s390x/mm: Fail when an altmap is used for arch_add_memory() David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-10 17:07 ` Oscar Salvador
2019-06-10 17:07 ` Oscar Salvador
2019-06-10 17:07 ` Oscar Salvador
2019-06-10 17:07 ` Oscar Salvador
2019-07-01 7:43 ` Michal Hocko
2019-07-01 7:43 ` Michal Hocko
2019-07-01 7:43 ` Michal Hocko
2019-07-01 7:43 ` Michal Hocko
2019-07-01 12:46 ` Michal Hocko
2019-07-01 12:46 ` Michal Hocko
2019-07-01 12:46 ` Michal Hocko
2019-07-01 12:46 ` Michal Hocko
2019-07-15 10:51 ` David Hildenbrand
2019-07-15 10:51 ` David Hildenbrand
2019-07-15 10:51 ` David Hildenbrand
2019-07-15 10:51 ` David Hildenbrand
2019-07-19 6:45 ` Michal Hocko
2019-07-19 6:45 ` Michal Hocko
2019-07-19 6:45 ` Michal Hocko
2019-07-19 6:45 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 03/11] s390x/mm: Implement arch_remove_memory() David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-07-01 7:45 ` Michal Hocko
2019-07-01 7:45 ` Michal Hocko
2019-07-01 7:45 ` Michal Hocko
2019-07-01 7:45 ` Michal Hocko
2019-07-01 12:47 ` Michal Hocko
2019-07-01 12:47 ` Michal Hocko
2019-07-01 12:47 ` Michal Hocko
2019-07-01 12:47 ` Michal Hocko
2019-07-15 10:45 ` David Hildenbrand
2019-07-15 10:45 ` David Hildenbrand
2019-07-15 10:45 ` David Hildenbrand
2019-07-15 10:45 ` David Hildenbrand
2019-05-27 11:11 ` [PATCH v3 04/11] arm64/mm: Add temporary arch_remove_memory() implementation David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-03 21:41 ` Wei Yang
2019-06-03 21:41 ` Wei Yang
2019-06-03 21:41 ` Wei Yang
2019-06-03 21:41 ` Wei Yang
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 17:36 ` Robin Murphy
2019-06-04 17:36 ` Robin Murphy
2019-06-04 17:36 ` Robin Murphy
2019-06-04 17:36 ` Robin Murphy
2019-06-04 17:51 ` David Hildenbrand
2019-06-04 17:51 ` David Hildenbrand
2019-06-04 17:51 ` David Hildenbrand
2019-06-04 17:51 ` David Hildenbrand
2019-07-01 12:48 ` Michal Hocko
2019-07-01 12:48 ` Michal Hocko
2019-07-01 12:48 ` Michal Hocko
2019-07-01 12:48 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 05/11] drivers/base/memory: Pass a block_id to init_memory_block() David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-03 21:49 ` Wei Yang
2019-06-03 21:49 ` Wei Yang
2019-06-03 21:49 ` Wei Yang
2019-06-03 21:49 ` Wei Yang
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 6:56 ` David Hildenbrand
2019-06-04 6:56 ` David Hildenbrand
2019-07-01 7:56 ` Michal Hocko
2019-07-01 7:56 ` Michal Hocko
2019-07-01 7:56 ` Michal Hocko
2019-07-01 7:56 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 06/11] mm/memory_hotplug: Allow arch_remove_pages() without CONFIG_MEMORY_HOTREMOVE David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-30 17:56 ` Pavel Tatashin
2019-05-30 17:56 ` Pavel Tatashin
2019-06-03 22:15 ` Wei Yang
2019-06-03 22:15 ` Wei Yang
2019-06-04 6:59 ` David Hildenbrand
2019-06-04 6:59 ` David Hildenbrand
2019-06-04 8:31 ` Wei Yang
2019-06-04 8:31 ` Wei Yang
2019-06-04 9:00 ` David Hildenbrand
2019-06-04 9:00 ` David Hildenbrand
2019-07-01 8:01 ` Michal Hocko
2019-07-01 8:01 ` Michal Hocko
2019-07-01 12:51 ` Michal Hocko
2019-07-01 12:51 ` Michal Hocko
2019-07-15 10:54 ` David Hildenbrand
2019-07-15 10:54 ` David Hildenbrand
2019-07-19 6:06 ` Michal Hocko
2019-07-19 6:06 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 07/11] mm/memory_hotplug: Create memory block devices after arch_add_memory() David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-30 21:07 ` Pavel Tatashin
2019-05-30 21:07 ` Pavel Tatashin
2019-05-30 21:07 ` Pavel Tatashin
2019-05-30 21:07 ` Pavel Tatashin
2019-06-04 21:42 ` Wei Yang
2019-06-04 21:42 ` Wei Yang
2019-06-04 21:42 ` Wei Yang
2019-06-04 21:42 ` Wei Yang
2019-06-05 8:58 ` David Hildenbrand
2019-06-05 8:58 ` David Hildenbrand
2019-06-05 8:58 ` David Hildenbrand
2019-06-05 8:58 ` David Hildenbrand
2019-06-05 10:58 ` David Hildenbrand
2019-06-05 10:58 ` David Hildenbrand
2019-06-05 10:58 ` David Hildenbrand
2019-06-05 10:58 ` David Hildenbrand
2019-06-05 21:22 ` Wei Yang
2019-06-05 21:22 ` Wei Yang
2019-06-05 21:22 ` Wei Yang
2019-06-05 21:22 ` Wei Yang
2019-06-05 21:50 ` David Hildenbrand
2019-06-05 21:50 ` David Hildenbrand
2019-06-05 21:50 ` David Hildenbrand
2019-06-05 21:50 ` David Hildenbrand
2019-07-01 8:14 ` Michal Hocko
2019-07-01 8:14 ` Michal Hocko
2019-07-01 8:14 ` Michal Hocko
2019-07-01 8:14 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 08/11] mm/memory_hotplug: Drop MHP_MEMBLOCK_API David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-04 21:47 ` Wei Yang
2019-06-04 21:47 ` Wei Yang
2019-06-04 21:47 ` Wei Yang
2019-06-04 21:47 ` Wei Yang
2019-07-01 8:15 ` Michal Hocko
2019-07-01 8:15 ` Michal Hocko
2019-07-01 8:15 ` Michal Hocko
2019-07-01 8:15 ` Michal Hocko
2019-05-27 11:11 ` David Hildenbrand [this message]
2019-05-27 11:11 ` [PATCH v3 09/11] mm/memory_hotplug: Remove memory block devices before arch_remove_memory() David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-04 22:07 ` Wei Yang
2019-06-04 22:07 ` Wei Yang
2019-06-04 22:07 ` Wei Yang
2019-06-04 22:07 ` Wei Yang
2019-06-05 9:00 ` David Hildenbrand
2019-06-05 9:00 ` David Hildenbrand
2019-06-05 9:00 ` David Hildenbrand
2019-06-05 9:00 ` David Hildenbrand
2019-07-01 8:41 ` Michal Hocko
2019-07-01 8:41 ` Michal Hocko
2019-07-01 8:41 ` Michal Hocko
2019-07-01 8:41 ` Michal Hocko
2019-07-15 10:58 ` David Hildenbrand
2019-07-15 10:58 ` David Hildenbrand
2019-07-15 10:58 ` David Hildenbrand
2019-07-15 10:58 ` David Hildenbrand
2019-05-27 11:11 ` [PATCH v3 10/11] mm/memory_hotplug: Make unregister_memory_block_under_nodes() never fail David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-05 21:21 ` Wei Yang
2019-06-05 21:21 ` Wei Yang
2019-06-05 21:21 ` Wei Yang
2019-06-05 21:21 ` Wei Yang
2019-06-10 16:56 ` Oscar Salvador
2019-06-10 16:56 ` Oscar Salvador
2019-06-10 16:56 ` Oscar Salvador
2019-06-10 16:56 ` Oscar Salvador
2019-07-01 8:51 ` Michal Hocko
2019-07-01 8:51 ` Michal Hocko
2019-07-01 8:51 ` Michal Hocko
2019-07-01 8:51 ` Michal Hocko
2019-07-01 9:36 ` Oscar Salvador
2019-07-01 9:36 ` Oscar Salvador
2019-07-01 9:36 ` Oscar Salvador
2019-07-01 9:36 ` Oscar Salvador
2019-07-01 10:27 ` Michal Hocko
2019-07-01 10:27 ` Michal Hocko
2019-07-01 10:27 ` Michal Hocko
2019-07-01 10:27 ` Michal Hocko
2019-07-15 11:10 ` David Hildenbrand
2019-07-15 11:10 ` David Hildenbrand
2019-07-15 11:10 ` David Hildenbrand
2019-07-15 11:10 ` David Hildenbrand
2019-07-16 8:46 ` Oscar Salvador
2019-07-16 8:46 ` Oscar Salvador
2019-07-16 8:46 ` Oscar Salvador
2019-07-16 8:46 ` Oscar Salvador
2019-07-16 11:08 ` David Hildenbrand
2019-07-16 11:08 ` David Hildenbrand
2019-07-16 11:08 ` David Hildenbrand
2019-07-16 11:08 ` David Hildenbrand
2019-07-16 11:09 ` David Hildenbrand
2019-07-16 11:09 ` David Hildenbrand
2019-07-16 11:09 ` David Hildenbrand
2019-07-16 11:09 ` David Hildenbrand
2019-07-19 6:05 ` Michal Hocko
2019-07-19 6:05 ` Michal Hocko
2019-07-19 6:05 ` Michal Hocko
2019-07-19 6:05 ` Michal Hocko
2019-05-27 11:11 ` [PATCH v3 11/11] mm/memory_hotplug: Remove "zone" parameter from sparse_remove_one_section David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-05-27 11:11 ` David Hildenbrand
2019-06-05 21:21 ` Wei Yang
2019-06-05 21:21 ` Wei Yang
2019-06-05 21:21 ` Wei Yang
2019-06-05 21:21 ` Wei Yang
2019-06-10 16:58 ` Oscar Salvador
2019-06-10 16:58 ` Oscar Salvador
2019-06-10 16:58 ` Oscar Salvador
2019-06-10 16:58 ` Oscar Salvador
2019-07-01 8:52 ` Michal Hocko
2019-07-01 8:52 ` Michal Hocko
2019-07-01 8:52 ` Michal Hocko
2019-07-01 8:52 ` Michal Hocko
2019-06-03 21:21 ` [PATCH v3 00/11] mm/memory_hotplug: Factor out memory block devicehandling Wei Yang
2019-06-03 21:21 ` Wei Yang
2019-06-03 21:40 ` David Hildenbrand
2019-06-03 21:40 ` David Hildenbrand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190527111152.16324-10-david@redhat.com \
--to=david@redhat.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=akpm@linux-foundation.org \
--cc=alexander.deucher@amd.com \
--cc=andrew.banman@hpe.com \
--cc=arunks@codeaurora.org \
--cc=broonie@kernel.org \
--cc=chris@chris-wilson.co.uk \
--cc=dan.j.williams@intel.com \
--cc=davem@davemloft.net \
--cc=gregkh@linuxfoundation.org \
--cc=imammedo@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=malat@debian.org \
--cc=mhocko@suse.com \
--cc=mike.travis@hpe.com \
--cc=mingo@kernel.org \
--cc=osalvador@suse.de \
--cc=pavel.tatashin@microsoft.com \
--cc=rafael@kernel.org \
--cc=richard.weiyang@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.