Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Thu, 19 Nov 2020 13:11:38 +0100 | Subject | Re: [PATCH 1/3] driver core: simply go out if the same device_link is added again |
| |
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.
> + > if (flags & DL_FLAG_PM_RUNTIME) { > if (!(link->flags & DL_FLAG_PM_RUNTIME)) { > pm_runtime_new_link(consumer); > --
| |