linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* re: PM / OPP: Add clock-latency-ns support
@ 2015-08-10 16:38 Dan Carpenter
  2015-08-11  8:12 ` Viresh Kumar
  0 siblings, 1 reply; 6+ messages in thread
From: Dan Carpenter @ 2015-08-10 16:38 UTC (permalink / raw)
  To: viresh.kumar; +Cc: linux-pm

Hello Viresh Kumar,

The patch 3ca9bb33c627: "PM / OPP: Add clock-latency-ns support" from
Jul 29, 2015, leads to the following static checker warning:

	drivers/base/power/opp.c:949 _opp_add_static_v2()
	warn: passing casted pointer '&new_opp->clock_latency_ns' to 'of_property_read_u32()' 64 vs 32.

drivers/base/power/opp.c
   946          new_opp->np = np;
   947          new_opp->dynamic = false;
   948          new_opp->available = true;
   949          of_property_read_u32(np, "clock-latency-ns",
   950                               (u32 *)&new_opp->clock_latency_ns);
                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^

This code will break on 64 bit, big endian machines.  I doin't know if
that is an issue for this driver.  I saw this was in the power/
directory and I spent a minute googling to see if PowerPC machines are
big endian...  :P

   951  
   952          ret = opp_get_microvolt(new_opp, dev);
   953          if (ret)
   954                  goto free_opp;
   955  

Also:

	drivers/base/power/opp.c:956 _opp_add_static_v2()
	warn: passing casted pointer '&new_opp->u_amp' to 'of_property_read_u32()' 64 vs 32.

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PM / OPP: Add clock-latency-ns support
  2015-08-10 16:38 PM / OPP: Add clock-latency-ns support Dan Carpenter
@ 2015-08-11  8:12 ` Viresh Kumar
  2015-08-11 13:53   ` Dan Carpenter
  0 siblings, 1 reply; 6+ messages in thread
From: Viresh Kumar @ 2015-08-11  8:12 UTC (permalink / raw)
  To: Dan Carpenter, Stephen Boyd; +Cc: linux-pm

On 10-08-15, 19:38, Dan Carpenter wrote:
> Hello Viresh Kumar,
> 
> The patch 3ca9bb33c627: "PM / OPP: Add clock-latency-ns support" from
> Jul 29, 2015, leads to the following static checker warning:
> 
> 	drivers/base/power/opp.c:949 _opp_add_static_v2()
> 	warn: passing casted pointer '&new_opp->clock_latency_ns' to 'of_property_read_u32()' 64 vs 32.
> 
> drivers/base/power/opp.c
>    946          new_opp->np = np;
>    947          new_opp->dynamic = false;
>    948          new_opp->available = true;
>    949          of_property_read_u32(np, "clock-latency-ns",
>    950                               (u32 *)&new_opp->clock_latency_ns);
>                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> This code will break on 64 bit, big endian machines.  I doin't know if
> that is an issue for this driver.  I saw this was in the power/
> directory and I spent a minute googling to see if PowerPC machines are
> big endian...  :P
> 
>    951  
>    952          ret = opp_get_microvolt(new_opp, dev);
>    953          if (ret)
>    954                  goto free_opp;
>    955  
> 
> Also:
> 
> 	drivers/base/power/opp.c:956 _opp_add_static_v2()
> 	warn: passing casted pointer '&new_opp->u_amp' to 'of_property_read_u32()' 64 vs 32.

Hi Dan,

The problem is that the value here is of type 'unsigned long' which is
32/64 bit on 32/64 bit machines.

So, I looked at how other places in code has done it, and that's what
I found.

-- 
viresh

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PM / OPP: Add clock-latency-ns support
  2015-08-11  8:12 ` Viresh Kumar
@ 2015-08-11 13:53   ` Dan Carpenter
  2015-08-11 18:54     ` Stephen Boyd
  0 siblings, 1 reply; 6+ messages in thread
From: Dan Carpenter @ 2015-08-11 13:53 UTC (permalink / raw)
  To: Viresh Kumar; +Cc: Stephen Boyd, linux-pm

On Tue, Aug 11, 2015 at 01:42:28PM +0530, Viresh Kumar wrote:
> On 10-08-15, 19:38, Dan Carpenter wrote:
> > Hello Viresh Kumar,
> > 
> > The patch 3ca9bb33c627: "PM / OPP: Add clock-latency-ns support" from
> > Jul 29, 2015, leads to the following static checker warning:
> > 
> > 	drivers/base/power/opp.c:949 _opp_add_static_v2()
> > 	warn: passing casted pointer '&new_opp->clock_latency_ns' to 'of_property_read_u32()' 64 vs 32.
> > 
> > drivers/base/power/opp.c
> >    946          new_opp->np = np;
> >    947          new_opp->dynamic = false;
> >    948          new_opp->available = true;
> >    949          of_property_read_u32(np, "clock-latency-ns",
> >    950                               (u32 *)&new_opp->clock_latency_ns);
> >                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
> > 
> > This code will break on 64 bit, big endian machines.  I doin't know if
> > that is an issue for this driver.  I saw this was in the power/
> > directory and I spent a minute googling to see if PowerPC machines are
> > big endian...  :P
> > 
> >    951  
> >    952          ret = opp_get_microvolt(new_opp, dev);
> >    953          if (ret)
> >    954                  goto free_opp;
> >    955  
> > 
> > Also:
> > 
> > 	drivers/base/power/opp.c:956 _opp_add_static_v2()
> > 	warn: passing casted pointer '&new_opp->u_amp' to 'of_property_read_u32()' 64 vs 32.
> 
> Hi Dan,
> 
> The problem is that the value here is of type 'unsigned long' which is
> 32/64 bit on 32/64 bit machines.

Yep.  It won't work on 64 bit big endian machines as described earlier.

> 
> So, I looked at how other places in code has done it, and that's what
> I found.

It's not portable.  Sometimes we don't care about that because we know
we don't care about 64 bit big endian systems.  Hence, my email.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: PM / OPP: Add clock-latency-ns support
  2015-08-11 13:53   ` Dan Carpenter
@ 2015-08-11 18:54     ` Stephen Boyd
  2015-08-12  6:57       ` Viresh Kumar
  0 siblings, 1 reply; 6+ messages in thread
From: Stephen Boyd @ 2015-08-11 18:54 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: Viresh Kumar, linux-pm

On 08/11, Dan Carpenter wrote:
> On Tue, Aug 11, 2015 at 01:42:28PM +0530, Viresh Kumar wrote:
> > 
> > The problem is that the value here is of type 'unsigned long' which is
> > 32/64 bit on 32/64 bit machines.
> 
> Yep.  It won't work on 64 bit big endian machines as described earlier.
> 
> > 
> > So, I looked at how other places in code has done it, and that's what
> > I found.
> 
> It's not portable.  Sometimes we don't care about that because we know
> we don't care about 64 bit big endian systems.  Hence, my email.
> 

Making it portable should be simple enough by having a temporary
variable of type u32 though.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
---8<---
diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index 51b220e615d3..022715d1894c 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -919,6 +919,7 @@ static int _opp_add_static_v2(struct device *dev, struct device_node *np)
 	struct dev_pm_opp *new_opp;
 	u64 rate;
 	int ret;
+	u32 val;
 
 	/* Hold our list modification lock here */
 	mutex_lock(&dev_opp_list_lock);
@@ -946,14 +947,15 @@ static int _opp_add_static_v2(struct device *dev, struct device_node *np)
 	new_opp->np = np;
 	new_opp->dynamic = false;
 	new_opp->available = true;
-	of_property_read_u32(np, "clock-latency-ns",
-			     (u32 *)&new_opp->clock_latency_ns);
+	of_property_read_u32(np, "clock-latency-ns", &val);
+	new_opp->clock_latency_ns = val;
 
 	ret = opp_get_microvolt(new_opp, dev);
 	if (ret)
 		goto free_opp;
 
-	of_property_read_u32(np, "opp-microamp", (u32 *)&new_opp->u_amp);
+	of_property_read_u32(np, "opp-microamp", &val);
+	new_opp->u_amp = val;
 
 	ret = _opp_add(dev, new_opp, dev_opp);
 	if (ret)

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: PM / OPP: Add clock-latency-ns support
  2015-08-11 18:54     ` Stephen Boyd
@ 2015-08-12  6:57       ` Viresh Kumar
  2015-08-12  7:58         ` Dan Carpenter
  0 siblings, 1 reply; 6+ messages in thread
From: Viresh Kumar @ 2015-08-12  6:57 UTC (permalink / raw)
  To: Stephen Boyd; +Cc: Dan Carpenter, linux-pm

On 11-08-15, 11:54, Stephen Boyd wrote:
> Making it portable should be simple enough by having a temporary
> variable of type u32 though.

Right.

@Dan: Does this look fine to you?

Message-Id: <40b3ad3c99c5fe1c50d997ba5418dd602c673f13.1439362565.git.viresh.kumar@linaro.org>
From: Viresh Kumar <viresh.kumar@linaro.org>
Date: Wed, 12 Aug 2015 12:20:49 +0530
Subject: [PATCH] PM / OPP: Fix static checker warning (broken 64bit big endian
 systems)

Dan Carpenter reported (generated with static checker):

drivers/base/power/opp.c:949 _opp_add_static_v2()
warn: passing casted pointer '&new_opp->clock_latency_ns' to
'of_property_read_u32()' 64 vs 32.

This code will break on 64 bit, big endian machines.

Fix this by reading the value in a u32 type variable first and then
assigning it to the unsigned long variable.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Suggested-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/base/power/opp.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/base/power/opp.c b/drivers/base/power/opp.c
index 204c6c945168..a9e0af0dd9e5 100644
--- a/drivers/base/power/opp.c
+++ b/drivers/base/power/opp.c
@@ -918,6 +918,7 @@ static int _opp_add_static_v2(struct device *dev, struct device_node *np)
 	struct device_opp *dev_opp;
 	struct dev_pm_opp *new_opp;
 	u64 rate;
+	u32 val;
 	int ret;
 
 	/* Hold our list modification lock here */
@@ -946,14 +947,15 @@ static int _opp_add_static_v2(struct device *dev, struct device_node *np)
 	new_opp->np = np;
 	new_opp->dynamic = false;
 	new_opp->available = true;
-	of_property_read_u32(np, "clock-latency-ns",
-			     (u32 *)&new_opp->clock_latency_ns);
+	of_property_read_u32(np, "clock-latency-ns", &val);
+	new_opp->clock_latency_ns = val;
 
 	ret = opp_get_microvolt(new_opp, dev);
 	if (ret)
 		goto free_opp;
 
-	of_property_read_u32(np, "opp-microamp", (u32 *)&new_opp->u_amp);
+	of_property_read_u32(np, "opp-microamp", &val);
+	new_opp->u_amp = val;
 
 	ret = _opp_add(dev, new_opp, dev_opp);
 	if (ret)

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: PM / OPP: Add clock-latency-ns support
  2015-08-12  6:57       ` Viresh Kumar
@ 2015-08-12  7:58         ` Dan Carpenter
  0 siblings, 0 replies; 6+ messages in thread
From: Dan Carpenter @ 2015-08-12  7:58 UTC (permalink / raw)
  To: Viresh Kumar; +Cc: Stephen Boyd, linux-pm

On Wed, Aug 12, 2015 at 12:27:09PM +0530, Viresh Kumar wrote:
> On 11-08-15, 11:54, Stephen Boyd wrote:
> > Making it portable should be simple enough by having a temporary
> > variable of type u32 though.
> 
> Right.
> 
> @Dan: Does this look fine to you?

Looks good.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-08-12  7:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-10 16:38 PM / OPP: Add clock-latency-ns support Dan Carpenter
2015-08-11  8:12 ` Viresh Kumar
2015-08-11 13:53   ` Dan Carpenter
2015-08-11 18:54     ` Stephen Boyd
2015-08-12  6:57       ` Viresh Kumar
2015-08-12  7:58         ` Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).