diff mbox series

pmdomain: core: add dummy release function to genpd device

Message ID 20241218184433.1930532-1-l.stach@pengutronix.de (mailing list archive)
State Handled Elsewhere, archived
Headers show
Series pmdomain: core: add dummy release function to genpd device | expand

Commit Message

Lucas Stach Dec. 18, 2024, 6:44 p.m. UTC
The genpd device, which is really only used as a handle to lookup
OPP, but not even registered to the device core otherwise and thus
lifetime linked to the genpd struct it is contained in, is missing
a release function. After b8f7bbd1f4ec ("pmdomain: core: Add
missing put_device()") the device will be cleaned up going through
the driver core device_release() function, which will warn when no
release callback is present for the device. Add a dummy release
function to shut up the warning.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
It's a bit unfortunate that the genpd even needs to have this
not-really-a-device just for the sake of the OPP lookup.
---
 drivers/pmdomain/core.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Luca Ceresoli Dec. 19, 2024, 8:26 a.m. UTC | #1
Hello Lucas,

On Wed, 18 Dec 2024 19:44:33 +0100
Lucas Stach <l.stach@pengutronix.de> wrote:

> The genpd device, which is really only used as a handle to lookup
> OPP, but not even registered to the device core otherwise and thus
> lifetime linked to the genpd struct it is contained in, is missing
> a release function. After b8f7bbd1f4ec ("pmdomain: core: Add
> missing put_device()") the device will be cleaned up going through
> the driver core device_release() function, which will warn when no
> release callback is present for the device. Add a dummy release
> function to shut up the warning.
> 
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>

Tested-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

Thanks for the very quick response!

Luca
Ulf Hansson Dec. 19, 2024, 2:40 p.m. UTC | #2
On Wed, 18 Dec 2024 at 19:44, Lucas Stach <l.stach@pengutronix.de> wrote:
>
> The genpd device, which is really only used as a handle to lookup
> OPP, but not even registered to the device core otherwise and thus
> lifetime linked to the genpd struct it is contained in, is missing
> a release function. After b8f7bbd1f4ec ("pmdomain: core: Add
> missing put_device()") the device will be cleaned up going through
> the driver core device_release() function, which will warn when no
> release callback is present for the device. Add a dummy release
> function to shut up the warning.
>
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> ---
> It's a bit unfortunate that the genpd even needs to have this
> not-really-a-device just for the sake of the OPP lookup.

Right. Although, I have patches in the pipe that will make use of it
that isn't limited to the use for OPP.

> ---
>  drivers/pmdomain/core.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> index bb11f467dc78..83659d79e07d 100644
> --- a/drivers/pmdomain/core.c
> +++ b/drivers/pmdomain/core.c
> @@ -2142,6 +2142,11 @@ static int genpd_set_default_power_state(struct generic_pm_domain *genpd)
>         return 0;
>  }
>
> +static void genpd_release_opp_dev(struct device *dev)

The above said, would you mind changing the name to
"genpd_provider_release". Or something along those lines.

> +{
> +       /* nothing to be done here */
> +}
> +
>  static int genpd_alloc_data(struct generic_pm_domain *genpd)
>  {
>         struct genpd_governor_data *gd = NULL;
> @@ -2173,6 +2178,7 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
>
>         genpd->gd = gd;
>         device_initialize(&genpd->dev);
> +       genpd->dev.release = genpd_release_opp_dev;
>
>         if (!genpd_is_dev_name_fw(genpd)) {
>                 dev_set_name(&genpd->dev, "%s", genpd->name);
> --
> 2.47.1
>

Kind regards
Uffe
Ulf Hansson Dec. 19, 2024, 2:48 p.m. UTC | #3
On Thu, 19 Dec 2024 at 15:40, Ulf Hansson <ulf.hansson@linaro.org> wrote:
>
> On Wed, 18 Dec 2024 at 19:44, Lucas Stach <l.stach@pengutronix.de> wrote:
> >
> > The genpd device, which is really only used as a handle to lookup
> > OPP, but not even registered to the device core otherwise and thus
> > lifetime linked to the genpd struct it is contained in, is missing
> > a release function. After b8f7bbd1f4ec ("pmdomain: core: Add
> > missing put_device()") the device will be cleaned up going through
> > the driver core device_release() function, which will warn when no
> > release callback is present for the device. Add a dummy release
> > function to shut up the warning.
> >
> > Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
> > ---
> > It's a bit unfortunate that the genpd even needs to have this
> > not-really-a-device just for the sake of the OPP lookup.
>
> Right. Although, I have patches in the pipe that will make use of it
> that isn't limited to the use for OPP.
>
> > ---
> >  drivers/pmdomain/core.c | 6 ++++++
> >  1 file changed, 6 insertions(+)
> >
> > diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
> > index bb11f467dc78..83659d79e07d 100644
> > --- a/drivers/pmdomain/core.c
> > +++ b/drivers/pmdomain/core.c
> > @@ -2142,6 +2142,11 @@ static int genpd_set_default_power_state(struct generic_pm_domain *genpd)
> >         return 0;
> >  }
> >
> > +static void genpd_release_opp_dev(struct device *dev)
>
> The above said, would you mind changing the name to
> "genpd_provider_release". Or something along those lines.
>

Well, it's kind of trivial so I just amended the patch when applying.
Thanks for fixing this!

Applied for fixes and by adding a stable tag.

Kind rergards
Uffe
diff mbox series

Patch

diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index bb11f467dc78..83659d79e07d 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -2142,6 +2142,11 @@  static int genpd_set_default_power_state(struct generic_pm_domain *genpd)
 	return 0;
 }
 
+static void genpd_release_opp_dev(struct device *dev)
+{
+	/* nothing to be done here */
+}
+
 static int genpd_alloc_data(struct generic_pm_domain *genpd)
 {
 	struct genpd_governor_data *gd = NULL;
@@ -2173,6 +2178,7 @@  static int genpd_alloc_data(struct generic_pm_domain *genpd)
 
 	genpd->gd = gd;
 	device_initialize(&genpd->dev);
+	genpd->dev.release = genpd_release_opp_dev;
 
 	if (!genpd_is_dev_name_fw(genpd)) {
 		dev_set_name(&genpd->dev, "%s", genpd->name);