On Thu, Feb 16, 2017 at 7:08 PM, Ross Zwisler <ross.zwisler@xxxxxxxxxxxxxxx> wrote: > On Thu, Feb 16, 2017 at 01:53:58PM -0800, Dan Williams wrote: >> mem_hotplug_begin() assumes that it can set mem_hotplug.active_writer >> and run the hotplug process without racing another thread. Validate this >> assumption with a lockdep assertion. >> >> Cc: Michal Hocko <mhocko@xxxxxxxx> >> Cc: Toshi Kani <toshi.kani@xxxxxxx> >> Cc: Vlastimil Babka <vbabka@xxxxxxx> >> Cc: Logan Gunthorpe <logang@xxxxxxxxxxxx> >> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> >> Reported-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> >> Signed-off-by: Dan Williams <dan.j.williams@xxxxxxxxx> >> --- >> drivers/base/core.c | 5 +++++ >> include/linux/device.h | 1 + >> mm/memory_hotplug.c | 2 ++ >> 3 files changed, 8 insertions(+) >> >> diff --git a/drivers/base/core.c b/drivers/base/core.c >> index 8c25e68e67d7..3050e6f99403 100644 >> --- a/drivers/base/core.c >> +++ b/drivers/base/core.c >> @@ -638,6 +638,11 @@ int lock_device_hotplug_sysfs(void) >> return restart_syscall(); >> } >> >> +void assert_held_device_hotplug(void) >> +{ >> + lockdep_assert_held(&device_hotplug_lock); >> +} >> + >> #ifdef CONFIG_BLOCK >> static inline int device_is_not_partition(struct device *dev) >> { >> diff --git a/include/linux/device.h b/include/linux/device.h >> index 491b4c0ca633..815965ee55dd 100644 >> --- a/include/linux/device.h >> +++ b/include/linux/device.h >> @@ -1135,6 +1135,7 @@ static inline bool device_supports_offline(struct device *dev) >> extern void lock_device_hotplug(void); >> extern void unlock_device_hotplug(void); >> extern int lock_device_hotplug_sysfs(void); >> +void assert_held_device_hotplug(void); >> extern int device_offline(struct device *dev); >> extern int device_online(struct device *dev); >> extern void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode); >> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c >> index b8c11e063ff0..1635a2a085e5 100644 >> --- a/mm/memory_hotplug.c >> +++ b/mm/memory_hotplug.c >> @@ -126,6 +126,8 @@ void put_online_mems(void) >> >> void mem_hotplug_begin(void) >> { >> + assert_held_device_hotplug(); > > What's the benefit to defining assert_held_device_hotplug() as a one line > wrapper, instead of just calling lockdep_assert_held(&device_hotplug_lock) > directly? > This allows us to keep device_hotplug_lock statically defined and an internal implementation detail of the device core. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>