* [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id
@ 2015-12-23 10:37 Andrzej Hajda
2015-12-23 10:37 ` [PATCH] pinctrl: nsp-gpio: fix type of iterator Andrzej Hajda
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Andrzej Hajda @ 2015-12-23 10:37 UTC (permalink / raw)
To: linux-arm-kernel
The function can return negative values, so its result should
be assigned to signed variable.
The problem has been detected using proposed semantic patch
scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
[1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
---
drivers/cpufreq/scpi-cpufreq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c
index 2c3b16f..de5e89b 100644
--- a/drivers/cpufreq/scpi-cpufreq.c
+++ b/drivers/cpufreq/scpi-cpufreq.c
@@ -31,7 +31,7 @@ static struct scpi_ops *scpi_ops;
static struct scpi_dvfs_info *scpi_get_dvfs_info(struct device *cpu_dev)
{
- u8 domain = topology_physical_package_id(cpu_dev->id);
+ int domain = topology_physical_package_id(cpu_dev->id);
if (domain < 0)
return ERR_PTR(-EINVAL);
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] pinctrl: nsp-gpio: fix type of iterator
2015-12-23 10:37 [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Andrzej Hajda
@ 2015-12-23 10:37 ` Andrzej Hajda
2015-12-23 22:35 ` Ray Jui
2015-12-24 9:03 ` Linus Walleij
2015-12-23 10:41 ` [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Viresh Kumar
2015-12-23 10:48 ` Sudeep Holla
2 siblings, 2 replies; 7+ messages in thread
From: Andrzej Hajda @ 2015-12-23 10:37 UTC (permalink / raw)
To: linux-arm-kernel
Iterator i declared as unsigned is always non-negative so the
loop will never end.
The problem has been detected using proposed semantic patch
scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
[1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
---
drivers/pinctrl/bcm/pinctrl-nsp-gpio.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c b/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
index 34648f6..ad5b04c 100644
--- a/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
+++ b/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
@@ -439,7 +439,8 @@ static int nsp_gpio_set_strength(struct nsp_gpio *chip, unsigned gpio,
static int nsp_gpio_get_strength(struct nsp_gpio *chip, unsigned gpio,
u16 *strength)
{
- unsigned int i, offset, shift;
+ unsigned int offset, shift;
+ int i;
u32 val;
unsigned long flags;
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id
2015-12-23 10:37 [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Andrzej Hajda
2015-12-23 10:37 ` [PATCH] pinctrl: nsp-gpio: fix type of iterator Andrzej Hajda
@ 2015-12-23 10:41 ` Viresh Kumar
2015-12-23 10:48 ` Sudeep Holla
2 siblings, 0 replies; 7+ messages in thread
From: Viresh Kumar @ 2015-12-23 10:41 UTC (permalink / raw)
To: linux-arm-kernel
On 23-12-15, 11:37, Andrzej Hajda wrote:
> The function can return negative values, so its result should
> be assigned to signed variable.
>
> The problem has been detected using proposed semantic patch
> scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
>
> [1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
>
> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
> ---
> drivers/cpufreq/scpi-cpufreq.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c
> index 2c3b16f..de5e89b 100644
> --- a/drivers/cpufreq/scpi-cpufreq.c
> +++ b/drivers/cpufreq/scpi-cpufreq.c
> @@ -31,7 +31,7 @@ static struct scpi_ops *scpi_ops;
>
> static struct scpi_dvfs_info *scpi_get_dvfs_info(struct device *cpu_dev)
> {
> - u8 domain = topology_physical_package_id(cpu_dev->id);
> + int domain = topology_physical_package_id(cpu_dev->id);
>
> if (domain < 0)
> return ERR_PTR(-EINVAL);
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
--
viresh
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id
2015-12-23 10:37 [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Andrzej Hajda
2015-12-23 10:37 ` [PATCH] pinctrl: nsp-gpio: fix type of iterator Andrzej Hajda
2015-12-23 10:41 ` [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Viresh Kumar
@ 2015-12-23 10:48 ` Sudeep Holla
2 siblings, 0 replies; 7+ messages in thread
From: Sudeep Holla @ 2015-12-23 10:48 UTC (permalink / raw)
To: linux-arm-kernel
On 23/12/15 10:37, Andrzej Hajda wrote:
> The function can return negative values, so its result should
> be assigned to signed variable.
>
> The problem has been detected using proposed semantic patch
> scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
>
> [1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
>
There has a patch posted by Dan Carpenter [1] which I reposted[2],
but it again slipped through the cracks. I will poke Rafael again on that.
[1]
http://lists.infradead.org/pipermail/linux-arm-kernel/2015-October/380292.html
[2] https://lkml.org/lkml/2015/12/15/219
--
Regards,
Sudeep
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] pinctrl: nsp-gpio: fix type of iterator
2015-12-23 10:37 ` [PATCH] pinctrl: nsp-gpio: fix type of iterator Andrzej Hajda
@ 2015-12-23 22:35 ` Ray Jui
2015-12-24 5:33 ` Yendapally Reddy Dhananjaya Reddy
2015-12-24 9:03 ` Linus Walleij
1 sibling, 1 reply; 7+ messages in thread
From: Ray Jui @ 2015-12-23 22:35 UTC (permalink / raw)
To: linux-arm-kernel
+ Reddy
On 12/23/2015 2:37 AM, Andrzej Hajda wrote:
> Iterator i declared as unsigned is always non-negative so the
> loop will never end.
>
> The problem has been detected using proposed semantic patch
> scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
>
> [1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
>
> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
> ---
> drivers/pinctrl/bcm/pinctrl-nsp-gpio.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c b/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
> index 34648f6..ad5b04c 100644
> --- a/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
> +++ b/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
> @@ -439,7 +439,8 @@ static int nsp_gpio_set_strength(struct nsp_gpio *chip, unsigned gpio,
> static int nsp_gpio_get_strength(struct nsp_gpio *chip, unsigned gpio,
> u16 *strength)
> {
> - unsigned int i, offset, shift;
> + unsigned int offset, shift;
> + int i;
> u32 val;
> unsigned long flags;
>
>
The fix is a valid fix. And at the same time it exposes other potential
issues in the driver. I just found the loop used in _set_strength and
_get_strength is inconsistent:
In _set_strength:
427 for (i = GPIO_DRV_STRENGTH_BITS; i > 0; i--) {
For i to start at GPIO_DRV_STRENGTH_BITS, it seems to be wrong.
428 val = readl(chip->io_ctrl + offset);
429 val &= ~BIT(shift);
430 val |= ((strength >> (i-1)) & 0x1) << shift;
431 writel(val, chip->io_ctrl + offset);
432 offset += 4;
433 }
In _get_strength:
451 for (i = (GPIO_DRV_STRENGTH_BITS - 1); i >= 0; i--) {
452 val = readl(chip->io_ctrl + offset) & BIT(shift);
453 val >>= shift;
454 *strength += (val << i);
455 offset += 4;
456 }
Reddy, could you please review and comment?
Thanks,
Ray
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] pinctrl: nsp-gpio: fix type of iterator
2015-12-23 22:35 ` Ray Jui
@ 2015-12-24 5:33 ` Yendapally Reddy Dhananjaya Reddy
0 siblings, 0 replies; 7+ messages in thread
From: Yendapally Reddy Dhananjaya Reddy @ 2015-12-24 5:33 UTC (permalink / raw)
To: linux-arm-kernel
On 12/24/2015 4:05 AM, Ray Jui wrote:
> + Reddy
>
> On 12/23/2015 2:37 AM, Andrzej Hajda wrote:
>> Iterator i declared as unsigned is always non-negative so the
>> loop will never end.
>>
>> The problem has been detected using proposed semantic patch
>> scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
>>
>> [1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
>>
>> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
>> ---
>> drivers/pinctrl/bcm/pinctrl-nsp-gpio.c | 3 ++-
>> 1 file changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c b/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
>> index 34648f6..ad5b04c 100644
>> --- a/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
>> +++ b/drivers/pinctrl/bcm/pinctrl-nsp-gpio.c
>> @@ -439,7 +439,8 @@ static int nsp_gpio_set_strength(struct nsp_gpio *chip, unsigned gpio,
>> static int nsp_gpio_get_strength(struct nsp_gpio *chip, unsigned gpio,
>> u16 *strength)
>> {
>> - unsigned int i, offset, shift;
>> + unsigned int offset, shift;
>> + int i;
>> u32 val;
>> unsigned long flags;
>>
>>
> The fix is a valid fix. And at the same time it exposes other potential
> issues in the driver. I just found the loop used in _set_strength and
> _get_strength is inconsistent:
>
> In _set_strength:
>
> 427 for (i = GPIO_DRV_STRENGTH_BITS; i > 0; i--) {
>
> For i to start at GPIO_DRV_STRENGTH_BITS, it seems to be wrong.
>
> 428 val = readl(chip->io_ctrl + offset);
> 429 val &= ~BIT(shift);
> 430 val |= ((strength >> (i-1)) & 0x1) << shift;
> 431 writel(val, chip->io_ctrl + offset);
> 432 offset += 4;
> 433 }
>
> In _get_strength:
>
> 451 for (i = (GPIO_DRV_STRENGTH_BITS - 1); i >= 0; i--) {
> 452 val = readl(chip->io_ctrl + offset) & BIT(shift);
> 453 val >>= shift;
> 454 *strength += (val << i);
> 455 offset += 4;
> 456 }
>
> Reddy, could you please review and comment?
Hi Ray,
The logic is correct. The drive strength has three bits distributed in three registers. In one case the "-1" is in for loop initialization and the other case it is in the for loop body. The fix looks good.
Thanks
Dhananjay
> Thanks,
>
> Ray
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] pinctrl: nsp-gpio: fix type of iterator
2015-12-23 10:37 ` [PATCH] pinctrl: nsp-gpio: fix type of iterator Andrzej Hajda
2015-12-23 22:35 ` Ray Jui
@ 2015-12-24 9:03 ` Linus Walleij
1 sibling, 0 replies; 7+ messages in thread
From: Linus Walleij @ 2015-12-24 9:03 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Dec 23, 2015 at 11:37 AM, Andrzej Hajda <a.hajda@samsung.com> wrote:
> Iterator i declared as unsigned is always non-negative so the
> loop will never end.
>
> The problem has been detected using proposed semantic patch
> scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci [1].
>
> [1]: http://permalink.gmane.org/gmane.linux.kernel/2038576
>
> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
I already applied Dan Carpenters fix, somehow it was earlier
in my mail flow. Thanks anyways!
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-12-24 9:03 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-12-23 10:37 [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Andrzej Hajda
2015-12-23 10:37 ` [PATCH] pinctrl: nsp-gpio: fix type of iterator Andrzej Hajda
2015-12-23 22:35 ` Ray Jui
2015-12-24 5:33 ` Yendapally Reddy Dhananjaya Reddy
2015-12-24 9:03 ` Linus Walleij
2015-12-23 10:41 ` [PATCH] cpufreq/scpi: fix handling return value of topology_physical_package_id Viresh Kumar
2015-12-23 10:48 ` Sudeep Holla
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).