stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] gpio: pca953x: Backported patches for 4.8
@ 2016-11-22  2:34 Phil Reid
  2016-11-22  2:34 ` [PATCH 1/2] gpio: pca953x: Move memcpy into mutex lock for set multiple Phil Reid
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Phil Reid @ 2016-11-22  2:34 UTC (permalink / raw)
  To: linus.walleij, preid, stable, gregkh

The following two patches should apply to the 4.8 branch.

checkpatch complained about the commit reference format but looking at other 
patches in the 4.8 history I see some like this with the full id.
So I'm not exactly sure if I've done this correctly.


Phil Reid (2):
  gpio: pca953x: Move memcpy into mutex lock for set multiple
  gpio: pca953x: Fix corruption of other gpios in set_multiple.

 drivers/gpio/gpio-pca953x.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

-- 
1.8.3.1


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

* [PATCH 1/2] gpio: pca953x: Move memcpy into mutex lock for set multiple
  2016-11-22  2:34 [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Phil Reid
@ 2016-11-22  2:34 ` Phil Reid
  2016-11-22  2:34 ` [PATCH 2/2] gpio: pca953x: Fix corruption of other gpios in set_multiple Phil Reid
  2016-11-22  8:02 ` [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Greg KH
  2 siblings, 0 replies; 4+ messages in thread
From: Phil Reid @ 2016-11-22  2:34 UTC (permalink / raw)
  To: linus.walleij, preid, stable, gregkh

commit 386377b5473043c09b2de40bfe5abfb0fc87e1b4 upstream.

Need to ensure that reg_output is not updated while setting multiple
bits. This makes the mutex locking behaviour for the set_multiple call
consistent with that of the set_value call.

Cc: stable@vger.kernel.org
Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
Signed-off-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpio/gpio-pca953x.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 02f2a56..5fae629 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -372,8 +372,8 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
 		break;
 	}
 
-	memcpy(reg_val, chip->reg_output, NBANK(chip));
 	mutex_lock(&chip->i2c_lock);
+	memcpy(reg_val, chip->reg_output, NBANK(chip));
 	for(bank=0; bank<NBANK(chip); bank++) {
 		unsigned bankmask = mask[bank / sizeof(*mask)] >>
 				    ((bank % sizeof(*mask)) * 8);
-- 
1.8.3.1


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

* [PATCH 2/2] gpio: pca953x: Fix corruption of other gpios in set_multiple.
  2016-11-22  2:34 [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Phil Reid
  2016-11-22  2:34 ` [PATCH 1/2] gpio: pca953x: Move memcpy into mutex lock for set multiple Phil Reid
@ 2016-11-22  2:34 ` Phil Reid
  2016-11-22  8:02 ` [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Greg KH
  2 siblings, 0 replies; 4+ messages in thread
From: Phil Reid @ 2016-11-22  2:34 UTC (permalink / raw)
  To: linus.walleij, preid, stable, gregkh

commit 53f8d322234649b4d6f1515b20c127a577efd164 upstream.

gpiod_set_array_value_complex does not clear the bits field.
Therefore when the drivers set_multiple funciton is called bits outside
the mask are undefined and can be either set or not. So bank_val needs
to be masked with bank_mask before or with the reg_val cache.

Cc: stable@vger.kernel.org
Fixes: b4818afeacbd ("gpio: pca953x: Add set_multiple to allow multiple")
Signed-off-by: Phil Reid <preid@electromag.com.au>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpio/gpio-pca953x.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 5fae629..47d08b9 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -380,6 +380,7 @@ static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
 		if(bankmask) {
 			unsigned bankval  = bits[bank / sizeof(*bits)] >>
 					    ((bank % sizeof(*bits)) * 8);
+			bankval &= bankmask;
 			reg_val[bank] = (reg_val[bank] & ~bankmask) | bankval;
 		}
 	}
-- 
1.8.3.1


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

* Re: [PATCH 0/2] gpio: pca953x: Backported patches for 4.8
  2016-11-22  2:34 [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Phil Reid
  2016-11-22  2:34 ` [PATCH 1/2] gpio: pca953x: Move memcpy into mutex lock for set multiple Phil Reid
  2016-11-22  2:34 ` [PATCH 2/2] gpio: pca953x: Fix corruption of other gpios in set_multiple Phil Reid
@ 2016-11-22  8:02 ` Greg KH
  2 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2016-11-22  8:02 UTC (permalink / raw)
  To: Phil Reid; +Cc: linus.walleij, stable

On Tue, Nov 22, 2016 at 10:34:44AM +0800, Phil Reid wrote:
> The following two patches should apply to the 4.8 branch.
> 
> checkpatch complained about the commit reference format but looking at other 
> patches in the 4.8 history I see some like this with the full id.
> So I'm not exactly sure if I've done this correctly.

Looks great to me, thanks for doing this.

greg k-h

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

end of thread, other threads:[~2016-11-22  8:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-22  2:34 [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Phil Reid
2016-11-22  2:34 ` [PATCH 1/2] gpio: pca953x: Move memcpy into mutex lock for set multiple Phil Reid
2016-11-22  2:34 ` [PATCH 2/2] gpio: pca953x: Fix corruption of other gpios in set_multiple Phil Reid
2016-11-22  8:02 ` [PATCH 0/2] gpio: pca953x: Backported patches for 4.8 Greg KH

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).