Messages in this thread | | | Subject | Re: [PATCH 2/2] device core: Add flag to autoremove device link on supplier unbind | From | Vivek Gautam <> | Date | Wed, 4 Jul 2018 12:46:20 +0530 |
| |
Adding Ulf and Marek.
On 6/27/2018 6:20 PM, Vivek Gautam wrote: > Add a flag to autoremove the device links on supplier driver > unbind. This obviates the need to explicitly delete the link > in the remove path. > We remove these links only when the supplier's link to its > consumers has gone to DL_STATE_SUPPLIER_UNBIND state. > > Signed-off-by: Vivek Gautam <vivek.gautam@codeaurora.org> > Suggested-by: Lukas Wunner <lukas@wunner.de> > Cc: Jonathan Corbet <corbet@lwn.net> > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > Cc: Robin Murphy <robin.murphy@arm.com> > Cc: linux-doc@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-pm@vger.kernel.org > Cc: linux-arm-msm@vger.kernel.org > ---
Hi Rafael, et al.
Gentle ping. Do you have comments on this series. I would really like to conclude these device link additions sooner, and get things moving on the long awaited arm-smmu clock/runtime support series.
Thanks again for reviewing these patches.
Best regards Vivek > Documentation/driver-api/device_link.rst | 4 ++++ > drivers/base/core.c | 10 ++++++++++ > include/linux/device.h | 2 ++ > 3 files changed, 16 insertions(+) > > diff --git a/Documentation/driver-api/device_link.rst b/Documentation/driver-api/device_link.rst > index a005b904a264..d6763272e747 100644 > --- a/Documentation/driver-api/device_link.rst > +++ b/Documentation/driver-api/device_link.rst > @@ -86,6 +86,10 @@ automatically purged when the consumer fails to probe or later unbinds. > This obviates the need to explicitly delete the link in the ``->remove`` > callback or in the error path of the ``->probe`` callback. > > +Similarly, when the device link is added from supplier's ``->probe`` callback, > +``DL_FLAG_AUTOREMOVE_SUPPLIER`` causes the device link to be automatically > +purged when the supplier fails to probe or later unbinds. > + > Limitations > =========== > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 14c1e3151e08..e721218bf352 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -518,6 +518,16 @@ void device_links_driver_cleanup(struct device *dev) > > WARN_ON(link->flags & DL_FLAG_AUTOREMOVE_CONSUMER); > WARN_ON(link->status != DL_STATE_SUPPLIER_UNBIND); > + > + /* > + * autoremove the links between this @dev and its consumer > + * devices that are not active, i.e. where the link state > + * has moved to DL_STATE_SUPPLIER_UNBIND. > + */ > + if (link->status == DL_STATE_SUPPLIER_UNBIND && > + link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER) > + kref_put(&link->kref, __device_link_del); > + > WRITE_ONCE(link->status, DL_STATE_DORMANT); > } > > diff --git a/include/linux/device.h b/include/linux/device.h > index 3929805cdd59..e80920452b49 100644 > --- a/include/linux/device.h > +++ b/include/linux/device.h > @@ -787,11 +787,13 @@ enum device_link_state { > * AUTOREMOVE_CONSUMER: Remove the link automatically on consumer driver unbind. > * PM_RUNTIME: If set, the runtime PM framework will use this link. > * RPM_ACTIVE: Run pm_runtime_get_sync() on the supplier during link creation. > + * AUTOREMOVE_SUPPLIER: Remove the link automatically on supplier driver unbind. > */ > #define DL_FLAG_STATELESS BIT(0) > #define DL_FLAG_AUTOREMOVE_CONSUMER BIT(1) > #define DL_FLAG_PM_RUNTIME BIT(2) > #define DL_FLAG_RPM_ACTIVE BIT(3) > +#define DL_FLAG_AUTOREMOVE_SUPPLIER BIT(4) > > /** > * struct device_link - Device link representation.
| |