linux/Documentation/driver-api
Rafael J. Wysocki 15cfb09416 driver core: Fix adding device links to probing suppliers
Currently, it is not valid to add a device link from a consumer
driver ->probe callback to a supplier that is still probing too, but
generally this is a valid use case.  For example, if the consumer has
just acquired a resource that can only be available if the supplier
is functional, adding a device link to that supplier right away
should be safe (and even desirable arguably), but device_link_add()
doesn't handle that case correctly and the initial state of the link
created by it is wrong then.

To address this problem, change the initial state of device links
added between a probing supplier and a probing consumer to
DL_STATE_CONSUMER_PROBE and update device_links_driver_bound() to
skip such links on the supplier side.

With this change, if the supplier probe completes first,
device_links_driver_bound() called for it will skip the link state
update and when it is called for the consumer, the link state will
be updated to "active".  In turn, if the consumer probe completes
first, device_links_driver_bound() called for it will change the
state of the link to "active" and when it is called for the
supplier, the link status update will be skipped.

However, in principle the supplier or consumer probe may still fail
after the link has been added, so modify device_links_no_driver() to
change device links in the "active" or "consumer probe" state to
"dormant" on the supplier side and update __device_links_no_driver()
to change the link state to "available" only if it is "consumer
probe" or "active".

Then, if the supplier probe fails first, the leftover link to the
probing consumer will become "dormant" and device_links_no_driver()
called for the consumer (when its probe fails) will clean it up.
In turn, if the consumer probe fails first, it will either drop the
link, or change its state to "available" and, in the latter case,
when device_links_no_driver() is called for the supplier, it will
update the link state to "dormant".  [If the supplier probe fails,
but the consumer probe succeeds, which should not happen as long as
the consumer driver is correct, the link still will be around, but
it will be "dormant" until the supplier is probed again.]

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-02-01 10:04:08 +01:00
..
80211 cfg80211: remove unused function ieee80211_data_from_8023() 2017-09-21 11:42:02 +02:00
dmaengine dmaengine-4.21-rc1 2019-01-01 15:45:48 -08:00
firmware Documentation: driver-api: add stratix10 service layer 2018-11-26 20:15:07 +01:00
fpga docs: fpga: document programming fpgas using regions 2018-10-16 11:13:50 +02:00
gpio gpio: Pass a flag to gpiochip_request_own_desc() 2018-12-14 14:24:33 +01:00
i3c docs: driver-api: Add I3C documentation 2018-11-12 10:33:49 +01:00
iio docs: driver-api: add iio hw consumer section 2018-01-10 10:30:06 +00:00
pci PCI/P2PDMA: Clean up documentation and kernel-doc 2018-12-11 07:53:07 -06:00
pm doc:process: add links where missing 2018-12-06 10:21:19 -07:00
soundwire Documentation: soundwire: fix stream.rst markup warnings 2018-09-17 09:12:36 -07:00
usb usb: typec: Improve Alt Mode documentation 2018-12-19 08:13:25 +01:00
basics.rst docs: Introduce deprecated APIs list 2018-10-18 12:22:43 -06:00
clk.rst This time we have a good set of changes to the core framework that do some 2018-06-09 12:06:24 -07:00
conf.py doc-rst: make driver-api folder buildable stand-alone 2016-10-26 17:25:00 -06:00
device_connection.rst Documentation: driver-api: fix device_connection.rst kernel-doc error 2018-04-27 17:17:34 -06:00
device_link.rst driver core: Fix adding device links to probing suppliers 2019-02-01 10:04:08 +01:00
device-io.rst docs: Convert the deviceio template to RST 2017-01-31 17:31:21 -07:00
dma-buf.rst dma-fence: Polish kernel-doc for dma-fence.c 2018-07-04 12:18:37 +02:00
edac.rst edac.rst: move concepts dictionary from edac.h 2016-12-15 08:58:12 -02:00
firewire.rst FireWire: add driver-api Introduction section 2018-09-06 09:41:16 -06:00
frame-buffer.rst
hsi.rst docs: split up serial-interfaces.rst 2016-09-06 09:14:52 -06:00
i2c.rst Merge branch 'i2c/for-4.13' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2017-07-12 10:04:56 -07:00
index.rst docs: driver-api: Add I3C documentation 2018-11-12 10:33:49 +01:00
infrastructure.rst dma-mapping: move all DMA mapping code to kernel/dma 2018-06-14 08:50:37 +02:00
input.rst
libata.rst libata: remove ata_sff_data_xfer_noirq() 2018-07-11 10:45:28 -07:00
message-based.rst docs: Don't format internal MPT docs 2016-09-06 09:15:48 -06:00
misc_devices.rst docs-rst: core_api: move driver-specific stuff to drivers_api 2017-04-02 14:17:43 -06:00
miscellaneous.rst docs: driver-api: Remove trailing blank line 2017-08-07 14:27:45 -06:00
mtdnand.rst mtd: rawnand: Deprecate ->chip_delay 2018-10-03 11:12:25 +02:00
pinctl.rst pinctrl/gpio: Unify namespace for cross-calls 2017-09-22 11:02:10 +02:00
rapidio.rst docs-rst: convert rapidio book to ReST 2017-05-16 08:44:16 -03:00
regulator.rst docs: Convert the regulator docbook to RST 2017-01-31 17:31:41 -07:00
s390-drivers.rst s390/docs: reword airq section 2018-02-02 10:47:15 +01:00
scsi.rst scsi: target: add driver-api document 2018-04-20 19:14:40 -04:00
slimbus.rst slimbus: stream: add stream support 2018-07-07 17:25:23 +02:00
sound.rst
spi.rst docs: split up serial-interfaces.rst 2016-09-06 09:14:52 -06:00
target.rst scsi: target: add driver-api document 2018-04-20 19:14:40 -04:00
uio-howto.rst docs/uio: fix a grammar nitpick 2018-10-16 11:15:51 +02:00
vme.rst docs: Update VME documentation to include kerneldoc comments 2017-03-17 15:10:49 +09:00
w1.rst There has been a fair amount of activity in the docs tree this time 2017-07-03 21:13:25 -07:00