linux/drivers/base
Rafael J. Wysocki 80dd33cf72 drivers: base: Fix device link removal
When device_link_free() drops references to the supplier and
consumer devices of the device link going away and the reference
being dropped turns out to be the last one for any of those
device objects, its ->release callback will be invoked and it
may sleep which goes against the SRCU callback execution
requirements.

To address this issue, make the device link removal code carry out
the device_link_free() actions preceded by SRCU synchronization from
a separate work item (the "long" workqueue is used for that, because
it does not matter when the device link memory is released and it may
take time to get to that point) instead of using SRCU callbacks.

While at it, make the code work analogously when SRCU is not enabled
to reduce the differences between the SRCU and non-SRCU cases.

Fixes: 843e600b8a ("driver core: Fix sleeping in invalid context during device link deletion")
Cc: stable <stable@vger.kernel.org>
Reported-by: chenxiang (M) <chenxiang66@hisilicon.com>
Tested-by: chenxiang (M) <chenxiang66@hisilicon.com>
Reviewed-by: Saravana Kannan <saravanak@google.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lore.kernel.org/r/5722787.lOV4Wx5bFT@kreacher
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-05-21 22:12:09 +02:00
..
firmware_loader init/initramfs.c: do unpacking asynchronously 2021-05-07 00:26:33 -07:00
power PM: runtime: Fix unpaired parent child_count for force_resume 2021-05-10 19:14:01 +02:00
regmap regmap-irq: Fix dereference of a potentially null d->virt_buf 2021-04-07 16:58:33 +01:00
test kunit: software node: adhear to KUNIT formatting standard 2021-04-15 08:56:27 +02:00
arch_numa.c arch_numa: fix common code printing of phys_addr_t 2021-02-18 23:18:04 -08:00
arch_topology.c arch_topology: Export arch_freq_scale and helpers 2021-03-12 10:35:57 +05:30
attribute_container.c driver core: attribute_container: remove kernel-doc warnings 2021-04-02 16:40:07 +02:00
auxiliary.c driver core: auxiliary bus: Remove unneeded module bits 2021-03-23 10:47:55 +01:00
base.h driver core: Improve fw_devlink & deferred_probe_timeout interaction 2021-04-05 09:17:56 +02:00
bus.c drivers: base: change 'driver_create_groups' to 'driver_add_groups' in printk 2021-01-27 14:35:09 +01:00
cacheinfo.c drivers core: Use sysfs_emit for shared_cpu_map_show and shared_cpu_list_show 2020-10-02 13:24:40 +02:00
class.c drivers: base: fix some kernel-doc markups 2020-11-09 18:56:49 +01:00
component.c driver core: component: remove dentry pointer in "struct master" 2021-03-23 10:49:02 +01:00
container.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
core.c drivers: base: Fix device link removal 2021-05-21 22:12:09 +02:00
cpu.c drivers/base/cpu: remove redundant assignment of variable retval 2021-03-23 14:56:50 +01:00
dd.c Linux 5.12-rc7 2021-04-14 19:53:39 +02:00
devcoredump.c devcoredump: fix kernel-doc warning 2021-04-02 16:40:08 +02:00
devres.c driver core: Replace printf() specifier and drop unneeded casting 2021-04-02 17:02:45 +02:00
devtmpfs.c devtmpfs: actually reclaim some init memory 2021-03-23 14:57:35 +01:00
driver.c drivers: base: Convert to printk alias functions 2020-07-10 14:16:44 +02:00
firmware.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
hypervisor.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
init.c driver core: auxiliary bus: Fix calling stage for auxiliary bus init 2021-02-11 08:43:03 +01:00
isa.c isa: Make the remove callback for isa drivers return void 2021-01-26 07:42:27 +01:00
Kconfig RISC-V Patches for the 5.12 Merge Window 2021-02-26 10:28:35 -08:00
Makefile numa: Move numa implementation to common code 2021-01-14 15:08:55 -08:00
map.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
memory.c mm,memory_hotplug: allocate memmap from the added memory range 2021-05-05 11:27:26 -07:00
module.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
node.c node: fix device cleanups in error handling code 2021-04-10 11:10:21 +02:00
pinctrl.c driver core: Remove redundant license text 2017-12-07 18:36:44 +01:00
platform-msi.c platform-msi: fix kernel-doc warnings 2021-04-02 16:40:08 +02:00
platform.c Revert "driver core: platform: Make platform_get_irq_optional() optional" 2021-04-07 11:47:56 +02:00
property.c media: device property: Call fwnode_graph_get_endpoint_by_id() for fwnode->secondary 2021-01-26 19:24:18 +01:00
soc.c soc: fix comment for freeing soc_dev_attr 2020-12-09 19:46:31 +01:00
swnode.c software node: Allow node addition to already existing device 2021-04-15 10:36:07 +02:00
syscore.c syscore: Use pm_pr_dbg() for syscore_{suspend,resume}() 2020-09-08 13:32:06 +02:00
topology.c drivers core: Miscellaneous changes for sysfs_emit 2020-10-02 13:12:07 +02:00
transport_class.c scsi: drivers: base: Propagate errors through the transport component 2020-01-15 22:55:37 -05:00