Patch "mm, devm_memremap_pages: hold device_hotplug lock over mem_hotplug_{begin, done}" has been added to the 4.10-stable tree
This is a note to let you know that I've just added the patch titled
mm, devm_memremap_pages: hold device_hotplug lock over mem_hotplug_{begin, done}to the 4.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mm-devm_memremap_pages-hold-device_hotplug-lock-over-mem_hotplug_-begin-done.patch
and it can be found in the queue-4.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
b5d24fda9c3dce51fcb4eee459550a458eaaf1e2Mon Sep 17 00:00:00 2001
From: Dan Williams <[email protected]>
Date: Fri, 24 Feb 2017 14:55:45 -0800
Subject: mm, devm_memremap_pages: hold device_hotplug lock over mem_hotplug_{begin, done}
From: Dan Williams <[email protected]>
commit b5d24fda9c3dce51fcb4eee459550a458eaaf1e2 upstream.
The mem_hotplug_{begin,done} lock coordinates with {get,put}_online_mems() to hold off "readers" of the current state of memory from new hotplug actions. mem_hotplug_begin() expects exclusive access, via the device_hotplug lock, to set mem_hotplug.active_writer. Calling mem_hotplug_begin() without locking device_hotplug can lead to corrupting mem_hotplug.refcount and missed wakeups / soft lockups.
--- kernel/memremap.c | 6 ++++++ 1 file changed, 6 insertions(+)
kernel/memremap.c +6 -0
@@ -246,9 +246,13 @@ static void devm_memremap_pages_release(/* pages are dead and unused, undo the arch mapping */ align_start = res->start & ~(SECTION_SIZE -1 ); align_size =ALIGN (resource_size (res),SECTION_SIZE ); + +lock_device_hotplug ();mem_hotplug_begin ();arch_remove_memory (align_start, align_size);mem_hotplug_done (); +unlock_device_hotplug (); +untrack_pfn (NULL ,PHYS_PFN (align_start), align_size);pgmap_radix_release (res); dev_WARN_ONCE(dev, pgmap->altmap && pgmap->altmap->alloc,
@@ -360,9 +364,11 @@ void *devm_memremap_pages(struct deviceif (error) goto err_pfn_remap; +lock_device_hotplug ();mem_hotplug_begin (); error =arch_add_memory (nid, align_start, align_size, true);mem_hotplug_done (); +unlock_device_hotplug ();if (error) goto err_add_memory;
Patches currently in stable-queue which might be from [email protected] are
queue-4.10/mm-devm_memremap_pages-hold-device_hotplug-lock-over-mem_hotplug_-begin-done.patch