diff options
author | Andrey Zhizhikin <andrey.zhizhikin@leica-geosystems.com> | 2021-01-11 10:31:15 +0000 |
---|---|---|
committer | Andrey Zhizhikin <andrey.zhizhikin@leica-geosystems.com> | 2021-01-11 10:31:15 +0000 |
commit | d33cc86dff9055abbf92d594a6fab7b3027e05ed (patch) | |
tree | 0c21861d0db961922e2cb09645940434b38075d9 /drivers/base | |
parent | 3b4072dd5163a3c86d328ceaeb0432a238413999 (diff) | |
parent | 6e97ed6efa701db070da0054b055c085895aba86 (diff) |
Merge tag 'v5.4.75' into 5.4-2.3.x-imx
This is the 5.4.75 stable release
Conflicts:
- drivers/i2c/busses/i2c-imx.c:
Drop NXP changes, which are covered by commit [2c58d5e0c754c] from
upstream.
- drivers/net/can/flexcan.c:
Keep NXP implementation, patch [ca10989632d88] from upstream is
covered in the NXP tree.
- drivers/usb/host/xhci.h:
Fix merge fuzz for upstream commit [2600a131e1f61].
Signed-off-by: Andrey Zhizhikin <andrey.zhizhikin@leica-geosystems.com>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/core.c | 4 | ||||
-rw-r--r-- | drivers/base/power/runtime.c | 5 |
2 files changed, 4 insertions, 5 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c index 8a973958d11a..a783cb5a0946 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -3442,6 +3442,7 @@ static inline bool fwnode_is_primary(struct fwnode_handle *fwnode) */ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) { + struct device *parent = dev->parent; struct fwnode_handle *fn = dev->fwnode; if (fwnode) { @@ -3456,7 +3457,8 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) } else { if (fwnode_is_primary(fn)) { dev->fwnode = fn->secondary; - fn->secondary = NULL; + if (!(parent && fn == parent->fwnode)) + fn->secondary = ERR_PTR(-ENODEV); } else { dev->fwnode = NULL; } diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 48616f358854..4244e22e4b40 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -291,8 +291,7 @@ static int rpm_get_suppliers(struct device *dev) device_links_read_lock_held()) { int retval; - if (!(link->flags & DL_FLAG_PM_RUNTIME) || - READ_ONCE(link->status) == DL_STATE_SUPPLIER_UNBIND) + if (!(link->flags & DL_FLAG_PM_RUNTIME)) continue; retval = pm_runtime_get_sync(link->supplier); @@ -312,8 +311,6 @@ static void rpm_put_suppliers(struct device *dev) list_for_each_entry_rcu(link, &dev->links.suppliers, c_node, device_links_read_lock_held()) { - if (READ_ONCE(link->status) == DL_STATE_SUPPLIER_UNBIND) - continue; while (refcount_dec_not_one(&link->rpm_active)) pm_runtime_put(link->supplier); |