All of lore.kernel.org
 help / color / mirror / Atom feed
From: Phil Reid <preid@electromag.com.au>
To: Geert Uytterhoeven <geert+renesas@glider.be>,
	Linus Walleij <linus.walleij@linaro.org>,
	Alexandre Courbot <gnurou@gmail.com>
Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] gpio: pca953x: Fix pca953x_gpio_set_multiple() on 64-bit
Date: Sat, 12 Mar 2016 23:20:40 +0800	[thread overview]
Message-ID: <56E433C8.10609@electromag.com.au> (raw)
In-Reply-To: <1457713887-7748-1-git-send-email-geert+renesas@glider.be>

On 12/03/2016 12:31 AM, Geert Uytterhoeven wrote:
> pca953x_gpio_set_multiple() divides by 4 to convert from longs to bytes,
> which assumes a 32-bit platform, and is not correct on 64-bit platforms.
> Use "sizeof(...)" instead to fix this.
>
> Fixes: b4818afeacbd8182 ("gpio: pca953x: Add set_multiple to allow multiple bits to be set in one write.")
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Acked-by: Phil Reid <preid@electromag.com.au>

> ---
> Untested, found by code inspection.
>
> This bug was introduced in v4.5-rc1, but unless Linus (the other one ;-)
> will make a v4.5-rc8, it's probably too late to get this fixed in v4.5.
> ---
>   drivers/gpio/gpio-pca953x.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
> index 23196c5fc17ceb6b..99b375c959987fe9 100644
> --- a/drivers/gpio/gpio-pca953x.c
> +++ b/drivers/gpio/gpio-pca953x.c
> @@ -367,9 +367,11 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
>   	memcpy(reg_val, chip->reg_output, NBANK(chip));
>   	mutex_lock(&chip->i2c_lock);
>   	for(bank=0; bank<NBANK(chip); bank++) {
> -		unsigned bankmask = mask[bank/4] >> ((bank % 4) * 8);
> +		unsigned bankmask = mask[bank / sizeof(*mask)] >>
> +				    ((bank % sizeof(*mask)) * 8);
>   		if(bankmask) {
> -			unsigned bankval  = bits[bank/4] >> ((bank % 4) * 8);
> +			unsigned bankval  = bits[bank / sizeof(*bits)] >>
> +					    ((bank % sizeof(*bits)) * 8);
>   			reg_val[bank] = (reg_val[bank] & ~bankmask) | bankval;
>   		}
>   	}
>


-- 
Regards
Phil Reid

ElectroMagnetic Imaging Technology Pty Ltd
Development of Geophysical Instrumentation & Software
www.electromag.com.au

3 The Avenue, Midland WA 6056, AUSTRALIA
Ph: +61 8 9250 8100
Fax: +61 8 9250 7100
Email: preid@electromag.com.au

  reply	other threads:[~2016-03-12 15:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-11 16:31 [PATCH] gpio: pca953x: Fix pca953x_gpio_set_multiple() on 64-bit Geert Uytterhoeven
2016-03-12 15:20 ` Phil Reid [this message]
2016-03-16 12:03 ` Linus Walleij

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56E433C8.10609@electromag.com.au \
    --to=preid@electromag.com.au \
    --cc=geert+renesas@glider.be \
    --cc=gnurou@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.