lkml.org 
[lkml]   [2019]   [Jul]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 5/5] PM / devfreq: Add required OPPs support to passive governor
    On 17-07-19, 15:23, Saravana Kannan wrote:
    > Look at the required OPPs of the "parent" device to determine the OPP that
    > is required from the slave device managed by the passive governor. This
    > allows having mappings between a parent device and a slave device even when
    > they don't have the same number of OPPs.
    >
    > Signed-off-by: Saravana Kannan <saravanak@google.com>
    > Acked-by: MyungJoo Ham <myungjoo.ham@samsung.com>
    > Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
    > ---
    > drivers/devfreq/governor_passive.c | 20 +++++++++++++++-----
    > 1 file changed, 15 insertions(+), 5 deletions(-)
    >
    > diff --git a/drivers/devfreq/governor_passive.c b/drivers/devfreq/governor_passive.c
    > index 58308948b863..24ce94c80f06 100644
    > --- a/drivers/devfreq/governor_passive.c
    > +++ b/drivers/devfreq/governor_passive.c
    > @@ -19,7 +19,7 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq,
    > = (struct devfreq_passive_data *)devfreq->data;
    > struct devfreq *parent_devfreq = (struct devfreq *)p_data->parent;
    > unsigned long child_freq = ULONG_MAX;
    > - struct dev_pm_opp *opp;
    > + struct dev_pm_opp *opp = NULL, *p_opp = NULL;

    This won't be required if ...

    > int i, count, ret = 0;
    >
    > /*
    > @@ -56,13 +56,20 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq,
    > * list of parent device. Because in this case, *freq is temporary
    > * value which is decided by ondemand governor.
    > */
    > - opp = devfreq_recommended_opp(parent_devfreq->dev.parent, freq, 0);
    > - if (IS_ERR(opp)) {
    > - ret = PTR_ERR(opp);
    > + p_opp = devfreq_recommended_opp(parent_devfreq->dev.parent, freq, 0);
    > + if (IS_ERR(p_opp)) {
    > + ret = PTR_ERR(p_opp);
    > goto out;
    > }
    >
    > - dev_pm_opp_put(opp);
    > + if (devfreq->opp_table && parent_devfreq->opp_table)
    > + opp = dev_pm_opp_xlate_opp(parent_devfreq->opp_table,
    > + devfreq->opp_table, p_opp);

    you put p_opp right here.

    Also shouldn't you try to get p_opp under the above if block only? As
    that is the only user of it ?

    > + if (opp) {
    > + *freq = dev_pm_opp_get_freq(opp);
    > + dev_pm_opp_put(opp);
    > + goto out;
    > + }
    >
    > /*
    > * Get the OPP table's index of decided freqeuncy by governor
    > @@ -89,6 +96,9 @@ static int devfreq_passive_get_target_freq(struct devfreq *devfreq,
    > *freq = child_freq;
    >
    > out:
    > + if (!IS_ERR_OR_NULL(opp))
    > + dev_pm_opp_put(p_opp);
    > +
    > return ret;
    > }
    >
    > --
    > 2.22.0.510.g264f2c817a-goog

    --
    viresh

    \
     
     \ /
      Last update: 2019-07-23 12:05    [W:4.255 / U:0.564 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site