+++ /dev/null
-From b8b5a7f210780d8d7ffd6efe0339756db7c8b58e Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 20 Jun 2024 07:29:15 +0300
-Subject: gpio: pca953x: fix pca953x_irq_bus_sync_unlock race
-
-From: Ian Ray <ian.ray@gehealthcare.com>
-
-[ Upstream commit bfc6444b57dc7186b6acc964705d7516cbaf3904 ]
-
-Ensure that `i2c_lock' is held when setting interrupt latch and mask in
-pca953x_irq_bus_sync_unlock() in order to avoid races.
-
-The other (non-probe) call site pca953x_gpio_set_multiple() ensures the
-lock is held before calling pca953x_write_regs().
-
-The problem occurred when a request raced against irq_bus_sync_unlock()
-approximately once per thousand reboots on an i.MX8MP based system.
-
- * Normal case
-
- 0-0022: write register AI|3a {03,02,00,00,01} Input latch P0
- 0-0022: write register AI|49 {fc,fd,ff,ff,fe} Interrupt mask P0
- 0-0022: write register AI|08 {ff,00,00,00,00} Output P3
- 0-0022: write register AI|12 {fc,00,00,00,00} Config P3
-
- * Race case
-
- 0-0022: write register AI|08 {ff,00,00,00,00} Output P3
- 0-0022: write register AI|08 {03,02,00,00,01} *** Wrong register ***
- 0-0022: write register AI|12 {fc,00,00,00,00} Config P3
- 0-0022: write register AI|49 {fc,fd,ff,ff,fe} Interrupt mask P0
-
-Signed-off-by: Ian Ray <ian.ray@gehealthcare.com>
-Link: https://lore.kernel.org/r/20240620042915.2173-1-ian.ray@gehealthcare.com
-Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpio/gpio-pca953x.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
-index dc4088a47ab2d..5dcc31e5fb3eb 100644
---- a/drivers/gpio/gpio-pca953x.c
-+++ b/drivers/gpio/gpio-pca953x.c
-@@ -489,6 +489,8 @@ static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
- u8 invert_irq_mask[MAX_BANK];
-
- if (chip->driver_data & PCA_PCAL) {
-+ guard(mutex)(&chip->i2c_lock);
-+
- /* Enable latch on interrupt-enabled inputs */
- pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask);
-
---
-2.43.0
-
input-elantech-fix-touchpad-state-on-resume-for-leno.patch
bytcr_rt5640-inverse-jack-detect-for-archos-101-cesi.patch
can-kvaser_usb-fix-return-value-for-hif_usb_send_reg.patch
-gpio-pca953x-fix-pca953x_irq_bus_sync_unlock-race.patch
s390-sclp-fix-sclp_init-cleanup-on-failure.patch
alsa-dmaengine_pcm-terminate-dmaengine-before-synchr.patch
net-usb-qmi_wwan-add-telit-fn912-compositions.patch
+++ /dev/null
-From 58a8bf13538c0a1ae8d551eb7f38fb999dc3bebf Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Thu, 20 Jun 2024 07:29:15 +0300
-Subject: gpio: pca953x: fix pca953x_irq_bus_sync_unlock race
-
-From: Ian Ray <ian.ray@gehealthcare.com>
-
-[ Upstream commit bfc6444b57dc7186b6acc964705d7516cbaf3904 ]
-
-Ensure that `i2c_lock' is held when setting interrupt latch and mask in
-pca953x_irq_bus_sync_unlock() in order to avoid races.
-
-The other (non-probe) call site pca953x_gpio_set_multiple() ensures the
-lock is held before calling pca953x_write_regs().
-
-The problem occurred when a request raced against irq_bus_sync_unlock()
-approximately once per thousand reboots on an i.MX8MP based system.
-
- * Normal case
-
- 0-0022: write register AI|3a {03,02,00,00,01} Input latch P0
- 0-0022: write register AI|49 {fc,fd,ff,ff,fe} Interrupt mask P0
- 0-0022: write register AI|08 {ff,00,00,00,00} Output P3
- 0-0022: write register AI|12 {fc,00,00,00,00} Config P3
-
- * Race case
-
- 0-0022: write register AI|08 {ff,00,00,00,00} Output P3
- 0-0022: write register AI|08 {03,02,00,00,01} *** Wrong register ***
- 0-0022: write register AI|12 {fc,00,00,00,00} Config P3
- 0-0022: write register AI|49 {fc,fd,ff,ff,fe} Interrupt mask P0
-
-Signed-off-by: Ian Ray <ian.ray@gehealthcare.com>
-Link: https://lore.kernel.org/r/20240620042915.2173-1-ian.ray@gehealthcare.com
-Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/gpio/gpio-pca953x.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
-index c81d73d5e0159..d4c81373929af 100644
---- a/drivers/gpio/gpio-pca953x.c
-+++ b/drivers/gpio/gpio-pca953x.c
-@@ -696,6 +696,8 @@ static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
- pca953x_read_regs(chip, chip->regs->direction, reg_direction);
-
- if (chip->driver_data & PCA_PCAL) {
-+ guard(mutex)(&chip->i2c_lock);
-+
- /* Enable latch on interrupt-enabled inputs */
- pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask);
-
---
-2.43.0
-
asoc-ti-davinci-mcasp-set-min-period-size-using-fifo.patch
asoc-ti-omap-hdmi-fix-too-long-driver-name.patch
can-kvaser_usb-fix-return-value-for-hif_usb_send_reg.patch
-gpio-pca953x-fix-pca953x_irq_bus_sync_unlock-race.patch
s390-sclp-fix-sclp_init-cleanup-on-failure.patch
alsa-dmaengine_pcm-terminate-dmaengine-before-synchr.patch
net-usb-qmi_wwan-add-telit-fn912-compositions.patch