Re: [PATCH v2 3/4] PM / devfreq: Cache OPP table reference in devfreq
On Tue, Jul 16, 2019 at 10:36 AM Sibi Sankar wrote: > > Hey Saravana, > > On 6/26/19 3:03 AM, Saravana Kannan wrote: > > The OPP table can be used often in devfreq. Trying to get it each time can > > be expensive, so cache it in the devfreq struct. > > > > Signed-off-by: Saravana Kannan > > --- > > drivers/devfreq/devfreq.c | 6 ++ > > include/linux/devfreq.h | 1 + > > 2 files changed, 7 insertions(+) > > > > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c > > index 6b6991f0e873..ac62b78dc035 100644 > > --- a/drivers/devfreq/devfreq.c > > +++ b/drivers/devfreq/devfreq.c > > @@ -597,6 +597,8 @@ static void devfreq_dev_release(struct device *dev) > > if (devfreq->profile->exit) > > devfreq->profile->exit(devfreq->dev.parent); > > > > + if (devfreq->opp_table) > > + dev_pm_opp_put_opp_table(devfreq->opp_table); > > mutex_destroy(&devfreq->lock); > > kfree(devfreq); > > } > > @@ -677,6 +679,10 @@ struct devfreq *devfreq_add_device(struct device *dev, > > devfreq->max_freq = devfreq->scaling_max_freq; > > > > devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); > > + devfreq->opp_table = dev_pm_opp_get_opp_table(dev); > > + if (IS_ERR(devfreq->opp_table)) > > + devfreq->opp_table = NULL; > > + > > atomic_set(&devfreq->suspend_count, 0); > > > > dev_set_name(&devfreq->dev, "devfreq%d", > > diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h > > index fbffa74bfc1b..0d877c9513d7 100644 > > --- a/include/linux/devfreq.h > > +++ b/include/linux/devfreq.h > > @@ -156,6 +156,7 @@ struct devfreq { > > struct devfreq_dev_profile *profile; > > const struct devfreq_governor *governor; > > char governor_name[DEVFREQ_NAME_LEN]; > > + struct opp_table *opp_table; > > please add it to the function docs as well Will do. -Saravana
Re: [PATCH v2 3/4] PM / devfreq: Cache OPP table reference in devfreq
Hey Saravana, On 6/26/19 3:03 AM, Saravana Kannan wrote: The OPP table can be used often in devfreq. Trying to get it each time can be expensive, so cache it in the devfreq struct. Signed-off-by: Saravana Kannan --- drivers/devfreq/devfreq.c | 6 ++ include/linux/devfreq.h | 1 + 2 files changed, 7 insertions(+) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 6b6991f0e873..ac62b78dc035 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -597,6 +597,8 @@ static void devfreq_dev_release(struct device *dev) if (devfreq->profile->exit) devfreq->profile->exit(devfreq->dev.parent); + if (devfreq->opp_table) + dev_pm_opp_put_opp_table(devfreq->opp_table); mutex_destroy(&devfreq->lock); kfree(devfreq); } @@ -677,6 +679,10 @@ struct devfreq *devfreq_add_device(struct device *dev, devfreq->max_freq = devfreq->scaling_max_freq; devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); + devfreq->opp_table = dev_pm_opp_get_opp_table(dev); + if (IS_ERR(devfreq->opp_table)) + devfreq->opp_table = NULL; + atomic_set(&devfreq->suspend_count, 0); dev_set_name(&devfreq->dev, "devfreq%d", diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index fbffa74bfc1b..0d877c9513d7 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h @@ -156,6 +156,7 @@ struct devfreq { struct devfreq_dev_profile *profile; const struct devfreq_governor *governor; char governor_name[DEVFREQ_NAME_LEN]; + struct opp_table *opp_table; please add it to the function docs as well struct notifier_block nb; struct delayed_work work; -- Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc, is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
Re: [PATCH v2 3/4] PM / devfreq: Cache OPP table reference in devfreq
Hi Saravana, On 19. 6. 26. 오전 6:33, Saravana Kannan wrote: > The OPP table can be used often in devfreq. Trying to get it each time can > be expensive, so cache it in the devfreq struct. > > Signed-off-by: Saravana Kannan > --- > drivers/devfreq/devfreq.c | 6 ++ > include/linux/devfreq.h | 1 + > 2 files changed, 7 insertions(+) > > diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c > index 6b6991f0e873..ac62b78dc035 100644 > --- a/drivers/devfreq/devfreq.c > +++ b/drivers/devfreq/devfreq.c > @@ -597,6 +597,8 @@ static void devfreq_dev_release(struct device *dev) > if (devfreq->profile->exit) > devfreq->profile->exit(devfreq->dev.parent); > > + if (devfreq->opp_table) > + dev_pm_opp_put_opp_table(devfreq->opp_table); > mutex_destroy(&devfreq->lock); > kfree(devfreq); > } > @@ -677,6 +679,10 @@ struct devfreq *devfreq_add_device(struct device *dev, > devfreq->max_freq = devfreq->scaling_max_freq; > > devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); > + devfreq->opp_table = dev_pm_opp_get_opp_table(dev); > + if (IS_ERR(devfreq->opp_table)) > + devfreq->opp_table = NULL; > + > atomic_set(&devfreq->suspend_count, 0); > > dev_set_name(&devfreq->dev, "devfreq%d", > diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h > index fbffa74bfc1b..0d877c9513d7 100644 > --- a/include/linux/devfreq.h > +++ b/include/linux/devfreq.h > @@ -156,6 +156,7 @@ struct devfreq { > struct devfreq_dev_profile *profile; > const struct devfreq_governor *governor; > char governor_name[DEVFREQ_NAME_LEN]; > + struct opp_table *opp_table; > struct notifier_block nb; > struct delayed_work work; > > Looks good to me. Reviewed-by: Chanwoo Choi -- Best Regards, Chanwoo Choi Samsung Electronics
RE: [PATCH v2 3/4] PM / devfreq: Cache OPP table reference in devfreq
>The OPP table can be used often in devfreq. Trying to get it each time can >be expensive, so cache it in the devfreq struct. > >Signed-off-by: Saravana Kannan >--- > drivers/devfreq/devfreq.c | 6 ++ > include/linux/devfreq.h | 1 + > 2 files changed, 7 insertions(+) Acked-by: MyungJoo Ham Cheers, MyungJoo
[PATCH v2 3/4] PM / devfreq: Cache OPP table reference in devfreq
The OPP table can be used often in devfreq. Trying to get it each time can be expensive, so cache it in the devfreq struct. Signed-off-by: Saravana Kannan --- drivers/devfreq/devfreq.c | 6 ++ include/linux/devfreq.h | 1 + 2 files changed, 7 insertions(+) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 6b6991f0e873..ac62b78dc035 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -597,6 +597,8 @@ static void devfreq_dev_release(struct device *dev) if (devfreq->profile->exit) devfreq->profile->exit(devfreq->dev.parent); + if (devfreq->opp_table) + dev_pm_opp_put_opp_table(devfreq->opp_table); mutex_destroy(&devfreq->lock); kfree(devfreq); } @@ -677,6 +679,10 @@ struct devfreq *devfreq_add_device(struct device *dev, devfreq->max_freq = devfreq->scaling_max_freq; devfreq->suspend_freq = dev_pm_opp_get_suspend_opp_freq(dev); + devfreq->opp_table = dev_pm_opp_get_opp_table(dev); + if (IS_ERR(devfreq->opp_table)) + devfreq->opp_table = NULL; + atomic_set(&devfreq->suspend_count, 0); dev_set_name(&devfreq->dev, "devfreq%d", diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index fbffa74bfc1b..0d877c9513d7 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h @@ -156,6 +156,7 @@ struct devfreq { struct devfreq_dev_profile *profile; const struct devfreq_governor *governor; char governor_name[DEVFREQ_NAME_LEN]; + struct opp_table *opp_table; struct notifier_block nb; struct delayed_work work; -- 2.22.0.410.gd8fdbe21b5-goog