[12/12] PM / OPP: Update Documentation to remove RCU specific bits

Message ID 20170110043941.GE6332@vireshk-i7
State New
Headers show

Commit Message

Viresh Kumar Jan. 10, 2017, 4:39 a.m.
On 09-01-17, 14:39, Stephen Boyd wrote:
> On 12/07, Viresh Kumar wrote:

> > @@ -137,15 +121,18 @@ functions return the matching pointer representing the opp if a match is

> >  found, else returns error. These errors are expected to be handled by standard

> >  error checks such as IS_ERR() and appropriate actions taken by the caller.

> >  

> > +Callers of these functions shall call dev_pm_opp_put() after they have used the

> > +OPP. Otherwise the memory for the OPP will never get freed and result in

> > +memleak.

> > +

> >  dev_pm_opp_find_freq_exact - Search for an OPP based on an *exact* frequency and

> >  	availability. This function is especially useful to enable an OPP which

> >  	is not available by default.

> >  	Example: In a case when SoC framework detects a situation where a

> >  	higher frequency could be made available, it can use this function to

> >  	find the OPP prior to call the dev_pm_opp_enable to actually make it available.

> > -	 rcu_read_lock();

> >  	 opp = dev_pm_opp_find_freq_exact(dev, 1000000000, false);

> > -	 rcu_read_unlock();

> > +	 dev_pm_opp_put(opp);

> >  	 /* dont operate on the pointer.. just do a sanity check.. */

> >  	 if (IS_ERR(opp)) {

> >  		pr_err("frequency not disabled!\n");

> > @@ -163,9 +150,8 @@ dev_pm_opp_find_freq_floor - Search for an available OPP which is *at most* the

> >  	frequency.

> >  	Example: To find the highest opp for a device:

> >  	 freq = ULONG_MAX;

> > -	 rcu_read_lock();

> >  	 dev_pm_opp_find_freq_floor(dev, &freq);

> > -	 rcu_read_unlock();

> > +	 dev_pm_opp_put(opp);

> 

> opp doesn't exist in the scope here. Missing an assignment during

> the dev_pm_opp_find_freq_floor() call?


Thanks for noticing this. Following is the diff I am adding to this patch:



Please add your RBY if it looks fine to you now.

-- 
viresh
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Stephen Boyd Jan. 13, 2017, 8:44 a.m. | #1
On 01/10, Viresh Kumar wrote:
> @@ -252,6 +252,7 @@ dev_pm_opp_get_freq - Retrieve the freq represented by the opp pointer.

>                  if (!IS_ERR(max_opp) && !IS_ERR(requested_opp))

>                         r = soc_test_validity(max_opp, requested_opp);

>                  dev_pm_opp_put(max_opp);

> +                dev_pm_opp_put(requested_opp);

>                 /* do other things */

>          }

>          soc_test_validity(..)

> 

> 

> Please add your RBY if it looks fine to you now.

> 


Sure.

Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>


-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/Documentation/power/opp.txt b/Documentation/power/opp.txt
index be895e32022d..0c007e250cd1 100644
--- a/Documentation/power/opp.txt
+++ b/Documentation/power/opp.txt
@@ -150,7 +150,7 @@  dev_pm_opp_find_freq_floor - Search for an available OPP which is *at most* the
        frequency.
        Example: To find the highest opp for a device:
         freq = ULONG_MAX;
-        dev_pm_opp_find_freq_floor(dev, &freq);
+        opp = dev_pm_opp_find_freq_floor(dev, &freq);
         dev_pm_opp_put(opp);
 
 dev_pm_opp_find_freq_ceil - Search for an available OPP which is *at least* the
@@ -159,7 +159,7 @@  dev_pm_opp_find_freq_ceil - Search for an available OPP which is *at least* the
        frequency.
        Example 1: To find the lowest opp for a device:
         freq = 0;
-        dev_pm_opp_find_freq_ceil(dev, &freq);
+        opp = dev_pm_opp_find_freq_ceil(dev, &freq);
         dev_pm_opp_put(opp);
        Example 2: A simplified implementation of a SoC cpufreq_driver->target:
         soc_cpufreq_target(..)
@@ -252,6 +252,7 @@  dev_pm_opp_get_freq - Retrieve the freq represented by the opp pointer.
                 if (!IS_ERR(max_opp) && !IS_ERR(requested_opp))
                        r = soc_test_validity(max_opp, requested_opp);
                 dev_pm_opp_put(max_opp);
+                dev_pm_opp_put(requested_opp);
                /* do other things */
         }
         soc_test_validity(..)