public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RESEND PATCH] driver core: Clear FWNODE_FLAG_LINKS_ADDED in device_links_purge()
@ 2023-09-27  2:30 Zhenhua Huang
  2023-09-27  5:57 ` Greg KH
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Zhenhua Huang @ 2023-09-27  2:30 UTC (permalink / raw)
  To: gregkh, rafael
  Cc: Zhenhua Huang, linux-kernel, quic_pkondeti, quic_tingweiz,
	saravanak

Flag FWNODE_FLAG_LINKS_ADDED stops fwnode links creation. Current kernel
only adds it once after fwnode links creation in fw_devlink_parse_fwnode().
After that even device links being purged, the flag will not be cleared.

Fwnode links are converted to device links and will not be added back
forever in normal case. Essentially if a device is registered and
unregisted (also deleted) before it is probed (due to missing fwlink
dependencies, abort in device_links_check_suppliers), the fwlink is not
setup next when device is newly created again. This means the probe gets
called without meeting all dependencies.

It usuallly happens in the case of a glue driver. Of_platform_populate()
allows us to populate subnodes. We may do it in ancestor node probing
function, then check subnode's probing status because there may be chances
that suppliers of subnode are not ready. We may further need to do
of_platform_depopulate(which purges device links) and in some time
of_platform_populate() again. Such case we miss fwnode links(so that device
links) during second time of populating subnodes.

Fix it by Clearing FWNODE_FLAG_LINKS_ADDED flag in purging device link
func, indicates both fwnode links and device links are absent.

Signed-off-by: Zhenhua Huang <quic_zhenhuah@quicinc.com>
---
 drivers/base/core.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index b7d7f41..2a1975d 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -1630,6 +1630,10 @@ static void device_links_purge(struct device *dev)
 		__device_link_del(&link->kref);
 	}
 
+	/* Clear flags in fwnode. Give a chance to create fwnode link again */
+	if (dev->fwnode)
+		dev->fwnode->flags &= ~FWNODE_FLAG_LINKS_ADDED;
+
 	device_links_write_unlock();
 }
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2023-10-05 16:02 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-27  2:30 [RESEND PATCH] driver core: Clear FWNODE_FLAG_LINKS_ADDED in device_links_purge() Zhenhua Huang
2023-09-27  5:57 ` Greg KH
2023-09-27  6:32   ` Zhenhua Huang
2023-09-27  8:08     ` Greg KH
2023-09-27  5:57 ` Greg KH
2023-09-27  6:34   ` Zhenhua Huang
2023-09-27  8:08     ` Greg KH
2023-09-27  9:53       ` Zhenhua Huang
2023-10-02 21:40 ` Saravana Kannan
2023-10-03  3:34   ` Pavan Kondeti
2023-10-05  9:32 ` Greg KH
2023-10-05 10:49   ` Pavan Kondeti

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox