| From b3b8e1db9156713875b348e57a40292b039fa8af Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 30 Oct 2018 15:10:39 -0700 |
| Subject: powerpc/powernv: hold device_hotplug_lock when calling |
| memtrace_offline_pages() |
| |
| From: David Hildenbrand <david@redhat.com> |
| |
| [ Upstream commit 5666848774ef43d3db5151ec518f1deb63515c20 ] |
| |
| Let's perform all checking + offlining + removing under |
| device_hotplug_lock, so nobody can mess with these devices via sysfs |
| concurrently. |
| |
| [david@redhat.com: take device_hotplug_lock outside of loop] |
| Link: http://lkml.kernel.org/r/20180927092554.13567-6-david@redhat.com |
| Link: http://lkml.kernel.org/r/20180925091457.28651-6-david@redhat.com |
| Signed-off-by: David Hildenbrand <david@redhat.com> |
| Reviewed-by: Pavel Tatashin <pavel.tatashin@microsoft.com> |
| Reviewed-by: Rashmica Gupta <rashmica.g@gmail.com> |
| Acked-by: Balbir Singh <bsingharora@gmail.com> |
| Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> |
| Cc: Paul Mackerras <paulus@samba.org> |
| Cc: Michael Ellerman <mpe@ellerman.id.au> |
| Cc: Rashmica Gupta <rashmica.g@gmail.com> |
| Cc: Michael Neuling <mikey@neuling.org> |
| Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com> |
| Cc: Dan Williams <dan.j.williams@intel.com> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Haiyang Zhang <haiyangz@microsoft.com> |
| Cc: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Cc: John Allen <jallen@linux.vnet.ibm.com> |
| Cc: Jonathan Corbet <corbet@lwn.net> |
| Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> |
| Cc: Juergen Gross <jgross@suse.com> |
| Cc: Kate Stewart <kstewart@linuxfoundation.org> |
| Cc: "K. Y. Srinivasan" <kys@microsoft.com> |
| Cc: Len Brown <lenb@kernel.org> |
| Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> |
| Cc: Mathieu Malaterre <malat@debian.org> |
| Cc: Michal Hocko <mhocko@suse.com> |
| Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com> |
| Cc: Oscar Salvador <osalvador@suse.de> |
| Cc: Philippe Ombredanne <pombredanne@nexb.com> |
| Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> |
| Cc: Stephen Hemminger <sthemmin@microsoft.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Vlastimil Babka <vbabka@suse.cz> |
| Cc: YASUAKI ISHIMATSU <yasu.isimatu@gmail.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/powerpc/platforms/powernv/memtrace.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/arch/powerpc/platforms/powernv/memtrace.c b/arch/powerpc/platforms/powernv/memtrace.c |
| index c9a6d4f3403ce..cfbd242c3e011 100644 |
| --- a/arch/powerpc/platforms/powernv/memtrace.c |
| +++ b/arch/powerpc/platforms/powernv/memtrace.c |
| @@ -99,6 +99,7 @@ static int change_memblock_state(struct memory_block *mem, void *arg) |
| return 0; |
| } |
| |
| +/* called with device_hotplug_lock held */ |
| static bool memtrace_offline_pages(u32 nid, u64 start_pfn, u64 nr_pages) |
| { |
| u64 end_pfn = start_pfn + nr_pages - 1; |
| @@ -139,6 +140,7 @@ static u64 memtrace_alloc_node(u32 nid, u64 size) |
| /* Trace memory needs to be aligned to the size */ |
| end_pfn = round_down(end_pfn - nr_pages, nr_pages); |
| |
| + lock_device_hotplug(); |
| for (base_pfn = end_pfn; base_pfn > start_pfn; base_pfn -= nr_pages) { |
| if (memtrace_offline_pages(nid, base_pfn, nr_pages) == true) { |
| /* |
| @@ -147,7 +149,6 @@ static u64 memtrace_alloc_node(u32 nid, u64 size) |
| * we never try to remove memory that spans two iomem |
| * resources. |
| */ |
| - lock_device_hotplug(); |
| end_pfn = base_pfn + nr_pages; |
| for (pfn = base_pfn; pfn < end_pfn; pfn += bytes>> PAGE_SHIFT) { |
| remove_memory(nid, pfn << PAGE_SHIFT, bytes); |
| @@ -156,6 +157,7 @@ static u64 memtrace_alloc_node(u32 nid, u64 size) |
| return base_pfn << PAGE_SHIFT; |
| } |
| } |
| + unlock_device_hotplug(); |
| |
| return 0; |
| } |
| -- |
| 2.20.1 |
| |