diff options
author | Saravana Kannan <[email protected]> | 2023-02-06 17:41:57 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <[email protected]> | 2023-02-08 13:37:54 +0100 |
commit | 67cad5c67019c38126b749621665b6723d3ae7e6 (patch) | |
tree | be019064eaecfb2fda50fc474b232fc0e7763881 /lib/string_helpers.c | |
parent | 38dfa56b3db354b4bd399fc686c3e74ad32ffa57 (diff) |
driver core: fw_devlink: Add DL_FLAG_CYCLE support to device links
fw_devlink uses DL_FLAG_SYNC_STATE_ONLY device link flag for two
purposes:
1. To allow a parent device to proxy its child device's dependency on a
supplier so that the supplier doesn't get its sync_state() callback
before the child device/consumer can be added and probed. In this
usage scenario, we need to ignore cycles for ensure correctness of
sync_state() callbacks.
2. When there are dependency cycles in firmware, we don't know which of
those dependencies are valid. So, we have to ignore them all wrt
probe ordering while still making sure the sync_state() callbacks
come correctly.
However, when detecting dependency cycles, there can be multiple
dependency cycles between two devices that we need to detect. For
example:
A -> B -> A and A -> C -> B -> A.
To detect multiple cycles correct, we need to be able to differentiate
DL_FLAG_SYNC_STATE_ONLY device links used for (1) vs (2) above.
To allow this differentiation, add a DL_FLAG_CYCLE that can be use to
mark use case (2). We can then use the DL_FLAG_CYCLE to decide which
DL_FLAG_SYNC_STATE_ONLY device links to follow when looking for
dependency cycles.
Fixes: 2de9d8e0d2fe ("driver core: fw_devlink: Improve handling of cyclic dependencies")
Signed-off-by: Saravana Kannan <[email protected]>
Tested-by: Colin Foster <[email protected]>
Tested-by: Sudeep Holla <[email protected]>
Tested-by: Douglas Anderson <[email protected]>
Tested-by: Geert Uytterhoeven <[email protected]>
Tested-by: Luca Weiss <[email protected]> # qcom/sm7225-fairphone-fp4
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Diffstat (limited to 'lib/string_helpers.c')
0 files changed, 0 insertions, 0 deletions