Message ID | 1466144820-6286-8-git-send-email-m.szyprowski@samsung.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
On Friday, June 17, 2016 08:26:57 AM Marek Szyprowski wrote: > Set proper link state if link is created between already probed supplier > device and to be probed consumer device. > > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > --- > drivers/base/core.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 4e778539b750..d9c5c5542a6b 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -125,7 +125,9 @@ struct devlink *device_link_add(struct device *consumer, > > link->flags = flags; > link->status = (flags & DEVICE_LINK_PROBE_TIME) ? > - DEVICE_LINK_CONSUMER_PROBE : DEVICE_LINK_DORMANT; > + DEVICE_LINK_CONSUMER_PROBE : > + (supplier->driver ? DEVICE_LINK_AVAILABLE : > + DEVICE_LINK_DORMANT); > spin_lock_init(&link->lock); > > /* > The supplier->driver check is insufficient and racy. It is insufficient, because supplier->driver is also set during supplier probe and the probe may still not be successful. It is racy, because supplier->driver may be modified right after this check. The only way to address the issue at hand I can see is to add a flag to indicate to device_link_add() that the supplier has already been probed successfully. Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/base/core.c b/drivers/base/core.c index 4e778539b750..d9c5c5542a6b 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -125,7 +125,9 @@ struct devlink *device_link_add(struct device *consumer, link->flags = flags; link->status = (flags & DEVICE_LINK_PROBE_TIME) ? - DEVICE_LINK_CONSUMER_PROBE : DEVICE_LINK_DORMANT; + DEVICE_LINK_CONSUMER_PROBE : + (supplier->driver ? DEVICE_LINK_AVAILABLE : + DEVICE_LINK_DORMANT); spin_lock_init(&link->lock); /*
Set proper link state if link is created between already probed supplier device and to be probed consumer device. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> --- drivers/base/core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)