linux/drivers/gpio
Patrice Chotard b888fb6f2a gpio: stmpe: i2c transfer are forbiden in atomic context
Move the workaround from stmpe_gpio_irq_unmask() which is executed
in atomic context to stmpe_gpio_irq_sync_unlock() which is not.

It fixes the following issue:

[    1.500000] BUG: scheduling while atomic: swapper/1/0x00000002
[    1.500000] CPU: 0 PID: 1 Comm: swapper Not tainted 4.15.0-rc2-00020-gbd4301f-dirty #28
[    1.520000] Hardware name: STM32 (Device Tree Support)
[    1.520000] [<0000bfc9>] (unwind_backtrace) from [<0000b347>] (show_stack+0xb/0xc)
[    1.530000] [<0000b347>] (show_stack) from [<0001fc49>] (__schedule_bug+0x39/0x58)
[    1.530000] [<0001fc49>] (__schedule_bug) from [<00168211>] (__schedule+0x23/0x2b2)
[    1.550000] [<00168211>] (__schedule) from [<001684f7>] (schedule+0x57/0x64)
[    1.550000] [<001684f7>] (schedule) from [<0016a513>] (schedule_timeout+0x137/0x164)
[    1.550000] [<0016a513>] (schedule_timeout) from [<00168b91>] (wait_for_common+0x8d/0xfc)
[    1.570000] [<00168b91>] (wait_for_common) from [<00139753>] (stm32f4_i2c_xfer+0xe9/0xfe)
[    1.580000] [<00139753>] (stm32f4_i2c_xfer) from [<00138545>] (__i2c_transfer+0x111/0x148)
[    1.590000] [<00138545>] (__i2c_transfer) from [<001385cf>] (i2c_transfer+0x53/0x70)
[    1.590000] [<001385cf>] (i2c_transfer) from [<001388a5>] (i2c_smbus_xfer+0x12f/0x36e)
[    1.600000] [<001388a5>] (i2c_smbus_xfer) from [<00138b49>] (i2c_smbus_read_byte_data+0x1f/0x2a)
[    1.610000] [<00138b49>] (i2c_smbus_read_byte_data) from [<00124fdd>] (__stmpe_reg_read+0xd/0x24)
[    1.620000] [<00124fdd>] (__stmpe_reg_read) from [<001252b3>] (stmpe_reg_read+0x19/0x24)
[    1.630000] [<001252b3>] (stmpe_reg_read) from [<0002c4d1>] (unmask_irq+0x17/0x22)
[    1.640000] [<0002c4d1>] (unmask_irq) from [<0002c57f>] (irq_startup+0x6f/0x78)
[    1.650000] [<0002c57f>] (irq_startup) from [<0002b7a1>] (__setup_irq+0x319/0x47c)
[    1.650000] [<0002b7a1>] (__setup_irq) from [<0002bad3>] (request_threaded_irq+0x6b/0xe8)
[    1.660000] [<0002bad3>] (request_threaded_irq) from [<0002d0b9>] (devm_request_threaded_irq+0x3b/0x6a)
[    1.670000] [<0002d0b9>] (devm_request_threaded_irq) from [<001446e7>] (mmc_gpiod_request_cd_irq+0x49/0x8a)
[    1.680000] [<001446e7>] (mmc_gpiod_request_cd_irq) from [<0013d45d>] (mmc_start_host+0x49/0x60)
[    1.690000] [<0013d45d>] (mmc_start_host) from [<0013e40b>] (mmc_add_host+0x3b/0x54)
[    1.700000] [<0013e40b>] (mmc_add_host) from [<00148119>] (mmci_probe+0x4d1/0x60c)
[    1.710000] [<00148119>] (mmci_probe) from [<000f903b>] (amba_probe+0x7b/0xbe)
[    1.720000] [<000f903b>] (amba_probe) from [<001170e5>] (driver_probe_device+0x169/0x1f8)
[    1.730000] [<001170e5>] (driver_probe_device) from [<001171b7>] (__driver_attach+0x43/0x5c)
[    1.740000] [<001171b7>] (__driver_attach) from [<0011618d>] (bus_for_each_dev+0x3d/0x46)
[    1.740000] [<0011618d>] (bus_for_each_dev) from [<001165cd>] (bus_add_driver+0xcd/0x124)
[    1.740000] [<001165cd>] (bus_add_driver) from [<00117713>] (driver_register+0x4d/0x7a)
[    1.760000] [<00117713>] (driver_register) from [<001fc765>] (do_one_initcall+0xbd/0xe8)
[    1.770000] [<001fc765>] (do_one_initcall) from [<001fc88b>] (kernel_init_freeable+0xfb/0x134)
[    1.780000] [<001fc88b>] (kernel_init_freeable) from [<00167ee3>] (kernel_init+0x7/0x9c)
[    1.790000] [<00167ee3>] (kernel_init) from [<00009b65>] (ret_from_fork+0x11/0x2c)

Cc: stable@vger.kernel.org
Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2018-01-17 07:44:14 +01:00
..
devres.c gpio: Export devm_gpiod_get_from_of_node() for consumers 2018-01-12 11:05:24 +01:00
gpio-74x164.c gpio: 74x164: Introduce 'enable-gpios' property 2017-08-14 16:24:02 +02:00
gpio-74xx-mmio.c gpio: 74xx-mmio: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:19:42 +05:30
gpio-104-dio-48e.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-104-idi-48.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-104-idio-16.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-adnp.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-adp5520.c gpio: adp5520: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:34:06 +05:30
gpio-adp5588.c gpio: adp5588: move header file out of I2C realm 2017-05-29 13:36:45 +02:00
gpio-altera-a10sr.c gpio: altera-a10sr: constify gpio_chip structure 2017-08-14 15:01:12 +02:00
gpio-altera.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-amd8111.c gpio: amd8111: Use devm_request_region 2016-02-16 00:19:52 +01:00
gpio-amdpt.c gpio: amdpt: Add a new ACPI HID 2016-03-30 10:38:51 +02:00
gpio-arizona.c gpio: arizona: Add support for GPIOs that need to be maintained 2017-05-29 11:09:01 +02:00
gpio-aspeed.c gpio: fix aspeed_gpio_banks array size check 2017-12-28 13:53:06 +01:00
gpio-ath79.c gpio: ath79: add missing MODULE_DESCRIPTION/LICENSE 2017-12-02 22:42:22 +01:00
gpio-bcm-kona.c gpio: bcm-kona: make use of raw_spinlock variants 2017-03-16 21:52:07 +01:00
gpio-bd9571mwv.c gpio: Add ROHM BD9571MWV-M PMIC GPIO driver 2017-04-28 09:47:46 +02:00
gpio-brcmstb.c drivers: gpio: remove duplicate includes 2017-12-20 13:08:10 +01:00
gpio-bt8xx.c
gpio-clps711x.c gpio: clps711x: Remove board support 2016-06-08 10:49:58 +02:00
gpio-crystalcove.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-cs5535.c gpio: cs5535: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:35:28 +05:30
gpio-da9052.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-da9055.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-davinci.c gpio: davinci: Handle the return value of davinci_gpio_irq_setup function 2017-08-14 15:03:39 +02:00
gpio-dln2.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-dwapb.c gpio: dwapb: fix bgpio usage 2017-10-25 11:25:10 +02:00
gpio-em.c pinctrl/gpio: Unify namespace for cross-calls 2017-09-22 11:02:10 +02:00
gpio-ep93xx.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
gpio-etraxfs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
gpio-exar.c gpio: exar: Use correct property prefix and document bindings 2017-08-01 13:43:55 +02:00
gpio-f7188x.c gpio: f7188x: Add a missing break 2017-04-28 10:09:16 +02:00
gpio-ftgpio010.c gpio: ftgpio010: Fix platform_get_irq's error checking 2017-12-02 22:42:35 +01:00
gpio-ge.c gpio: Convert to using %pOF instead of full_name 2017-08-14 15:01:12 +02:00
gpio-gpio-mm.c Annotate hardware config module parameters in drivers/gpio/ 2017-04-20 12:02:32 +01:00
gpio-grgpio.c gpio: grgpio: Do not use gc->pin2mask() 2017-10-25 11:25:38 +02:00
gpio-htc-egpio.c gpio: htc-egpio: read output value from cache 2016-11-13 11:50:22 +01:00
gpio-ich.c gpio: ich: Use devm_request_region 2016-02-16 00:19:53 +01:00
gpio-ingenic.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-intel-mid.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-iop.c gpio: iop: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE 2017-12-02 22:42:21 +01:00
gpio-it87.c gpio: it87: fix mojibake in module metadata 2017-12-02 22:42:32 +01:00
gpio-janz-ttl.c gpio: janz-ttl: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:35:33 +05:30
gpio-kempld.c gpio: kempld: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:35:34 +05:30
gpio-ks8695.c gpio: ks8695: remove irq_to_gpio function 2016-02-19 00:20:30 +01:00
gpio-loongson1.c gpio: loongson1: fix bgpio usage 2017-10-25 11:25:38 +02:00
gpio-loongson.c gpio: convert remaining users to gpiochip_add_data() 2016-01-05 11:21:20 +01:00
gpio-lp873x.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
gpio-lp3943.c Revert "gpio: lp3943: Drop pin_used and lp3943_gpio_request/lp3943_gpio_free" 2016-03-09 22:00:27 +07:00
gpio-lp87565.c gpio: lp87565: Set proper output level and direction for direction_output 2017-07-31 15:26:57 +02:00
gpio-lpc18xx.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-lpc32xx.c gpio: lpc32xx: remove unused platform data file 2016-09-12 14:23:37 +02:00
gpio-lynxpoint.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-max730x.c gpio: max730x: set gpiochip data pointer before using it 2016-08-10 15:40:44 +02:00
gpio-max732x.c gpio: max732x: Remove duplicate NULL check 2017-11-29 13:25:23 +01:00
gpio-max3191x.c gpio: Add driver for Maxim MAX3191x industrial serializer 2017-10-19 22:40:07 +02:00
gpio-max7300.c
gpio-max7301.c
gpio-max77620.c gpio: max77620: Make regmap_irq_chip const 2017-08-14 16:06:24 +02:00
gpio-mb86s7x.c gpio: mb86s70: Revert "Return error if requesting an already assigned gpio" 2017-10-31 13:13:34 +01:00
gpio-mc9s08dz60.c gpio: mc9s08dz60: make explicitly non-modular 2016-03-31 15:02:09 +02:00
gpio-mc33880.c
gpio-menz127.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
gpio-merrifield.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-ml-ioh.c gpio: ml-ioh: use devres for irq generic chip 2017-08-21 00:06:35 +02:00
gpio-mm-lantiq.c gpio: update my email address 2016-12-30 09:18:10 +01:00
gpio-mmio.c gpio-mmio: Use the new .get_multiple() callback 2017-10-30 08:35:32 +01:00
gpio-mockup.c gpio: mockup: fix a return value check 2017-12-08 15:34:15 +01:00
gpio-mpc8xxx.c gpio: mpc8xxx: Do not reverse bits using bgpio 2017-10-25 11:25:40 +02:00
gpio-mpc5200.c gpio: Include linux/gpio.h instead of asm/gpio.h 2016-02-16 00:20:03 +01:00
gpio-msic.c gpio: msic: fix error return code in platform_msic_gpio_probe() 2017-08-14 15:03:38 +02:00
gpio-mvebu.c gpio: mvebu: Fix cause computation in irq handler 2017-08-14 15:00:43 +02:00
gpio-mxc.c gpio: mxc: use devres for irq generic chip 2017-08-21 00:09:33 +02:00
gpio-mxs.c gpio: mxs: use devres for irq generic chip 2017-08-21 00:10:00 +02:00
gpio-octeon.c gpio: octeon: Constify octeon_gpio_match table 2016-03-30 10:38:51 +02:00
gpio-omap.c gpio: omap: Give unique labels to each GPIO bank/chip 2018-01-03 08:46:08 +01:00
gpio-palmas.c gpio: palmas: fix implicit assumption module.h is present 2016-09-15 13:57:43 +02:00
gpio-pca953x.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-pcf857x.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-pch.c gpio: pch: use devres for irq generic chip 2017-08-21 00:08:52 +02:00
gpio-pci-idio-16.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-pcie-idio-24.c gpio: Add GPIO support for the ACCES PCIe-IDIO-24 family 2018-01-10 14:39:28 +01:00
gpio-pisosr.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-pl061.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-pxa.c gpio: pxa: Use library functions 2017-10-07 00:01:08 +02:00
gpio-rc5t583.c gpio: rc5t583: make explicitly non-modular 2016-04-05 17:02:35 +02:00
gpio-rcar.c Merge branch 'gpio-irqchip-rework' of /home/linus/linux-gpio into devel 2017-11-09 09:38:42 +01:00
gpio-rdc321x.c gpio: remove redundant owner assignments of drivers 2016-06-07 09:35:16 +02:00
gpio-reg.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-sa1100.c gpio: sa1100: implement get_direction method 2017-03-24 14:04:37 +01:00
gpio-sch311x.c gpio: remove redundant owner assignments of drivers 2016-06-07 09:35:16 +02:00
gpio-sch.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-sodaville.c gpio: sodaville: use resource management for irqs 2017-03-15 11:16:36 +01:00
gpio-spear-spics.c gpio: spear-spics: drop unused MODULE_ tags from non-modular code 2016-08-23 11:23:41 +02:00
gpio-sta2x11.c gpio: sta2x11: use devres for irq generic chip 2017-08-21 00:06:04 +02:00
gpio-stmpe.c gpio: stmpe: i2c transfer are forbiden in atomic context 2018-01-17 07:44:14 +01:00
gpio-stp-xway.c gpio: update my email address 2016-12-30 09:18:10 +01:00
gpio-syscon.c gpio: syscon: Change the compatibility string 2016-06-08 10:48:17 +02:00
gpio-tb10x.c gpio: tb10x: Handle return value of devm_kasprintf 2017-09-21 14:14:17 +02:00
gpio-tc3589x.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-tegra186.c gpio: tegra186: Remove tegra186_gpio_lock_class 2017-11-13 11:43:10 +01:00
gpio-tegra.c pinctrl/gpio: Unify namespace for cross-calls 2017-09-22 11:02:10 +02:00
gpio-thunderx.c gpio: thunderx: fix error return code in thunderx_gpio_probe() 2018-01-11 10:49:32 +01:00
gpio-timberdale.c gpio: timberdale: make it explicitly non-modular 2016-05-11 13:49:11 +02:00
gpio-tpic2810.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-tps6586x.c gpio: remove redundant owner assignments of drivers 2016-06-07 09:35:16 +02:00
gpio-tps65086.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-tps65218.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
gpio-tps65910.c gpio: remove redundant owner assignments of drivers 2016-06-07 09:35:16 +02:00
gpio-tps65912.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-tps68470.c gpio: Add support for TPS68470 GPIOs 2017-08-14 15:37:38 +02:00
gpio-ts4800.c gpio: ts4800: Fix module autoload 2016-10-21 14:55:07 +02:00
gpio-ts4900.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-ts5500.c gpio: ts5500: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:35:49 +05:30
gpio-twl4030.c mfd: twl: Move header file out of I2C realm 2017-09-04 14:41:02 +01:00
gpio-twl6040.c gpio: twl6040: remove unneeded forward declaration 2017-08-23 10:20:16 +02:00
gpio-tz1090-pdc.c
gpio-tz1090.c pinctrl/gpio: Unify namespace for cross-calls 2017-09-22 11:02:10 +02:00
gpio-ucb1400.c gpio: ucb1400: Use devm_gpiochip_add_data() for gpio registration 2016-02-23 20:35:50 +05:30
gpio-uniphier.c This is the bulk of GPIO changes for the v4.15 kernel cycle: 2017-11-14 17:23:44 -08:00
gpio-vf610.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-viperboard.c gpio: remove redundant owner assignments of drivers 2016-06-07 09:35:16 +02:00
gpio-vr41xx.c gpio: convert remaining users to gpiochip_add_data() 2016-01-05 11:21:20 +01:00
gpio-vx855.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
gpio-wcove.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-winbond.c gpio: winbond: Add driver 2018-01-09 14:51:00 +01:00
gpio-wm831x.c gpio: wm831x: Add basic device tree support 2017-03-23 11:45:55 +00:00
gpio-wm8350.c gpio: constify gpio_chip structures 2016-09-13 10:35:56 +02:00
gpio-wm8994.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
gpio-ws16c48.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-xgene-sb.c This is the bulk of GPIO changes for the v4.15 kernel cycle: 2017-11-14 17:23:44 -08:00
gpio-xgene.c gpio: xgene: mark PM functions as __maybe_unused 2017-03-06 14:35:22 +01:00
gpio-xilinx.c gpio: Convert to using %pOF instead of full_name 2017-08-14 15:01:12 +02:00
gpio-xlp.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-xra1403.c gpio: xra1403: Add EXAR XRA1403 SPI GPIO expander driver 2017-05-22 17:48:41 +02:00
gpio-xtensa.c gpio: convert remaining users to gpiochip_add_data() 2016-01-05 11:21:20 +01:00
gpio-zevio.c gpio: zevio: make gpio_chip const 2017-08-23 09:21:54 +02:00
gpio-zx.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpio-zynq.c gpio: Move irqdomain into struct gpio_irq_chip 2017-11-08 14:06:21 +01:00
gpiolib-acpi.c gpiolib: acpi: Introduce NO_RESTRICTION quirk 2017-11-30 10:53:52 +01:00
gpiolib-devprop.c gpio: gpiolib-devprop: Check chip->parent pointer before dereferencing 2016-10-25 20:23:19 +02:00
gpiolib-legacy.c Revert "gpiolib: Split GPIO flags parsing and GPIO configuration" 2016-07-04 16:51:29 +02:00
gpiolib-of.c gpio: of: Add special quirk to parse regulator flags 2018-01-12 11:05:24 +01:00
gpiolib-sysfs.c gpio: sysfs: avoid using kstrtol() in 'value' attribute write 2017-12-20 10:34:58 +01:00
gpiolib.c gpio: Export devm_gpiod_get_from_of_node() for consumers 2018-01-12 11:05:24 +01:00
gpiolib.h gpio: Export devm_gpiod_get_from_of_node() for consumers 2018-01-12 11:05:24 +01:00
Kconfig gpio: winbond: fix ISA_BUS_API dependency 2018-01-11 10:17:32 +01:00
Makefile gpio: Add GPIO support for the ACCES PCIe-IDIO-24 family 2018-01-10 14:39:28 +01:00