From: Saravana Kannan Date: Sat, 21 Nov 2020 02:02:24 +0000 (-0800) Subject: driver core: Allow only unprobed consumers for SYNC_STATE_ONLY device links X-Git-Tag: v5.11-rc1~165^2~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac66c5bbb4371073dcace77e47c234d2e36a006b;p=thirdparty%2Fkernel%2Flinux.git driver core: Allow only unprobed consumers for SYNC_STATE_ONLY device links SYNC_STATE_ONLY device links only affect the behavior of sync_state() callbacks. Specifically, they prevent sync_state() only callbacks from being called on a device if one or more of its consumers haven't probed. So, creating a SYNC_STATE_ONLY device link from an already probed consumer is useless. So, don't allow creating such device links. Signed-off-by: Saravana Kannan Link: https://lore.kernel.org/r/20201121020232.908850-10-saravanak@google.com Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/base/core.c b/drivers/base/core.c index 972d42dedfc84..edde79fc3d338 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -649,6 +649,17 @@ struct device_link *device_link_add(struct device *consumer, goto out; } + /* + * SYNC_STATE_ONLY links are useless once a consumer device has probed. + * So, only create it if the consumer hasn't probed yet. + */ + if (flags & DL_FLAG_SYNC_STATE_ONLY && + consumer->links.status != DL_DEV_NO_DRIVER && + consumer->links.status != DL_DEV_PROBING) { + link = NULL; + goto out; + } + /* * DL_FLAG_AUTOREMOVE_SUPPLIER indicates that the link will be needed * longer than for DL_FLAG_AUTOREMOVE_CONSUMER and setting them both