Messages in this thread | | | From | Aisheng Dong <> | Subject | RE: [PATCH 1/3] driver core: simply go out if the same device_link is added again | Date | Thu, 19 Nov 2020 15:44:20 +0000 |
| |
> From: Rafael J. Wysocki <rafael@kernel.org> > Sent: Thursday, November 19, 2020 8:12 PM > > On Thu, Nov 19, 2020 at 12:18 PM Dong Aisheng <aisheng.dong@nxp.com> > wrote: > > > > It's possible that the same device link may be added by parsing the > > function dependecy in DT. e.g. clock/gpio/regulators. > > Simply go out for this case. > > Why? > > > Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > Cc: "Rafael J. Wysocki" <rafael@kernel.org> > > Cc: Saravana Kannan <saravanak@google.com> > > Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> > > --- > > drivers/base/core.c | 3 +++ > > 1 file changed, 3 insertions(+) > > > > diff --git a/drivers/base/core.c b/drivers/base/core.c index > > 4c03bdd3a268..7d91d4074136 100644 > > --- a/drivers/base/core.c > > +++ b/drivers/base/core.c > > @@ -567,6 +567,9 @@ struct device_link *device_link_add(struct device > *consumer, > > if (link->consumer != consumer) > > continue; > > > > + if (flags == link->flags) > > + goto out; > > But this prevents rpm_count from being incremented if DL_FLAG_RPM_ACTIVE > is set in flags, which is necessary, because the supplier's PM-runtime usage > counter has been incremented already. > > Moreover, every attempt to create a stateless link must cause a new reference > on the existing link to be acquired, or the removal will not work correctly.
Yes, I see. Thanks for the explanation.
Regards Aisheng
> > > + > > if (flags & DL_FLAG_PM_RUNTIME) { > > if (!(link->flags & DL_FLAG_PM_RUNTIME)) { > > pm_runtime_new_link(consumer); > > --
| |