linux-stable/drivers/mfd
Andy Shevchenko d4c83f8e64 mfd: dln2: Run event handler loop under spinlock
[ Upstream commit 3d85894225 ]

The event handler loop must be run with interrupts disabled.
Otherwise we will have a warning:

[ 1970.785649] irq 31 handler lineevent_irq_handler+0x0/0x20 enabled interrupts
[ 1970.792739] WARNING: CPU: 0 PID: 0 at kernel/irq/handle.c:159 __handle_irq_event_percpu+0x162/0x170
[ 1970.860732] RIP: 0010:__handle_irq_event_percpu+0x162/0x170
...
[ 1970.946994] Call Trace:
[ 1970.949446]  <IRQ>
[ 1970.951471]  handle_irq_event_percpu+0x2c/0x80
[ 1970.955921]  handle_irq_event+0x23/0x43
[ 1970.959766]  handle_simple_irq+0x57/0x70
[ 1970.963695]  generic_handle_irq+0x42/0x50
[ 1970.967717]  dln2_rx+0xc1/0x210 [dln2]
[ 1970.971479]  ? usb_hcd_unmap_urb_for_dma+0xa6/0x1c0
[ 1970.976362]  __usb_hcd_giveback_urb+0x77/0xe0
[ 1970.980727]  usb_giveback_urb_bh+0x8e/0xe0
[ 1970.984837]  tasklet_action_common.isra.0+0x4a/0xe0
...

Recently xHCI driver switched to tasklets in the commit 36dc01657b
("usb: host: xhci: Support running urb giveback in tasklet context").

The handle_irq_event_* functions are expected to be called with interrupts
disabled and they rightfully complain here because we run in tasklet context
with interrupts enabled.

Use a event spinlock to protect event handler from being interrupted.

Note, that there are only two users of this GPIO and ADC drivers and both of
them are using generic_handle_irq() which makes above happen.

Fixes: 338a128142 ("mfd: Add support for Diolan DLN-2 devices")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-08-21 09:48:22 +02:00
..
88pm80x.c
88pm800.c
88pm805.c
88pm860x-core.c
88pm860x-i2c.c mfd: 88pm860x-i2c: switch to i2c_lock_bus(..., I2C_LOCK_SEGMENT) 2018-09-26 08:38:12 +02:00
aat2870-core.c
ab3100-core.c
ab3100-otp.c
ab8500-core.c mfd: ab8500-core: Return zero in get_register_interruptible() 2019-02-27 10:08:02 +01:00
ab8500-debugfs.c
ab8500-gpadc.c
ab8500-sysctrl.c mfd: ab8500-sysctrl: Handle probe deferral 2017-02-13 09:29:43 +00:00
abx500-core.c
ac100.c
act8945a.c
adp5520.c
altera-a10sr.c mfd: altr_a10sr: Add Arria10 DevKit Reset Controller 2017-04-27 09:25:04 +01:00
arizona-core.c mfd: arizona: Ensure 32k clock is put on driver unbind and error 2020-08-21 09:48:20 +02:00
arizona-i2c.c
arizona-irq.c mfd: arizona: Correctly clean up after IRQs 2017-02-13 09:29:40 +00:00
arizona-spi.c
arizona.h mfd: arizona: Remove totally unused forward declaration 2017-02-13 09:29:40 +00:00
as3711.c
as3722.c
asic3.c mfd: asic3: Make use of raw_spinlock variants 2017-04-27 09:25:05 +01:00
atmel-flexcom.c mfd: atmel: Use devm_of_platform_populate() 2017-07-06 08:29:12 +01:00
atmel-hlcdc.c
atmel-smc.c mfd: syscon: atmel-smc: Add helper to retrieve register layout 2017-09-05 08:46:01 +01:00
axp20x-i2c.c
axp20x-rsb.c mfd: axp20x: Add support for AXP813 PMIC 2017-09-05 08:46:00 +01:00
axp20x.c mfd: axp20x: Use correct platform device ID for many PEK 2017-09-05 08:46:01 +01:00
bcm590xx.c
bd9571mwv.c mfd: bd9571mwv: Add volatile register to make DVFS work 2019-02-27 10:08:03 +01:00
cros_ec.c mfd: cros_ec: Fail early if we cannot identify the EC 2018-08-03 07:50:27 +02:00
cros_ec_acpi_gpe.c mfd: cros_ec: Add ACPI GPE handler for LID0 devices 2017-04-27 09:25:03 +01:00
cros_ec_i2c.c
cros_ec_spi.c mfd: cros ec: spi: Don't send first message too soon 2017-12-29 17:53:46 +01:00
cs47l24-tables.c
cs5535-mfd.c
da903x.c
da9052-core.c mfd: da9052: Fix manual ADC read after timed out read 2017-09-05 08:46:00 +01:00
da9052-i2c.c
da9052-irq.c
da9052-spi.c mfd: da9052: Constify spi_device_id 2017-09-05 08:46:01 +01:00
da9055-core.c
da9055-i2c.c mfd: da9055: Constify i2c_device_id 2017-09-05 08:46:01 +01:00
da9062-core.c mfd: da9062: Fix watchdog compatible string 2020-02-14 16:32:18 -05:00
da9063-core.c
da9063-i2c.c
da9063-irq.c
da9150-core.c
davinci_voicecodec.c
db8500-prcmu.c mfd: db8500-prcmu: Fix some section annotations 2019-02-27 10:08:02 +01:00
dbx500-prcmu-regs.h
dln2.c mfd: dln2: Run event handler loop under spinlock 2020-08-21 09:48:22 +02:00
dm355evm_msp.c mfd: dm355evm_msp: Move header file out of I2C realm 2017-08-15 08:06:14 +01:00
exynos-lpass.c mfd: exynos: Use devm_of_platform_populate() 2017-07-06 08:29:12 +01:00
ezx-pcap.c
fsl-imx25-tsadc.c mfd: fsl-imx25: Clean up irq settings during removal 2017-12-20 10:10:16 +01:00
hi655x-pmic.c mfd: hi655x-pmic: Fix missing return value check for devm_regmap_init_mmio_clk 2019-07-31 07:28:53 +02:00
hi6421-pmic-core.c mfd: hi6421-pmic: Add support for HiSilicon Hi6421v530 2017-09-05 08:46:00 +01:00
htc-i2cpld.c
htc-pasic3.c
intel-lpss-acpi.c mfd: intel-lpss: Remove left over variable 2017-04-27 09:25:04 +01:00
intel-lpss-pci.c mfd: intel-lpss: Add default I2C device properties for Gemini Lake 2020-01-27 14:46:02 +01:00
intel-lpss.c mfd: intel-lpss: Release IDA resources 2020-01-27 14:46:39 +01:00
intel-lpss.h
intel_msic.c
intel_quark_i2c_gpio.c mfd: intel_quark_i2c_gpio: Add support for SIMATIC IOT2000 platform 2017-07-06 08:29:12 +01:00
intel_soc_pmic_bxtwc.c mfd: intel_soc_pmic_bxtwc: Chain power button IRQs as well 2019-12-01 09:13:45 +01:00
intel_soc_pmic_chtwc.c mfd: Add Cherry Trail Whiskey Cove PMIC driver 2017-07-06 08:29:13 +01:00
intel_soc_pmic_core.c mfd: intel_soc_pmic: Differentiate between Bay and Cherry Trail CRC variants 2017-09-05 08:46:02 +01:00
intel_soc_pmic_core.h mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT 2017-09-05 08:46:02 +01:00
intel_soc_pmic_crc.c mfd: intel_soc_pmic: Export separate mfd-cell configs for BYT and CHT 2017-09-05 08:46:02 +01:00
ipaq-micro.c mfd: ipaq-micro: Dump debugging hexdumps 2017-07-06 08:29:11 +01:00
janz-cmodio.c
jz4740-adc.c
Kconfig mfd: intel_soc_pmic: Differentiate between Bay and Cherry Trail CRC variants 2017-09-05 08:46:02 +01:00
kempld-core.c dmi: Mark all struct dmi_system_id instances const 2017-09-14 11:59:30 +02:00
lm3533-core.c
lm3533-ctrlbank.c
lp873x.c
lp3943.c
lp8788-irq.c
lp8788.c
lp87565.c mfd: lp87565: Convert to use devm_mfd_add_devices() 2017-09-05 08:46:01 +01:00
lpc_ich.c mfd: lpc_ich: Avoton/Rangeley uses SPI_BYT method 2017-11-30 08:40:49 +00:00
lpc_sch.c
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
max8907.c
max8925-core.c
max8925-i2c.c mfd: max8925-i2c: Drop unnecessary static 2017-09-05 08:46:00 +01:00
max8997-irq.c
max8997.c mfd: max8997: Enale irq-wakeup unconditionally 2019-12-01 09:13:46 +01:00
max8998-irq.c
max8998.c mfd: max8998: Fix potential NULL pointer dereference 2017-09-05 08:46:00 +01:00
max14577.c
max77620.c
max77686.c mfd: max77686: Remove I2C device ID table 2017-02-13 09:29:43 +00:00
max77693.c
max77843.c
mc13xxx-core.c mfd: mc13xxx-core: Fix PMIC shutdown when reading ADC values 2019-12-01 09:13:45 +01:00
mc13xxx-i2c.c
mc13xxx-spi.c
mc13xxx.h
mcp-core.c
mcp-sa11x0.c
menelaus.c mfd: menelaus: Fix possible race condition and leak 2018-11-13 11:15:00 -08:00
menf21bmc.c
mfd-core.c mfd: core: Set fwnode for created devices 2019-07-31 07:28:53 +02:00
motorola-cpcap.c mfd: motorola-cpcap: Use devm_of_platform_populate() 2017-07-06 08:29:12 +01:00
mt6397-core.c mfd: mt6397: Do not call irq_domain_remove if PMIC unsupported 2019-02-27 10:08:02 +01:00
mxs-lradc.c mfd: mxs-lradc: Fix error handling in mxs_lradc_probe() 2017-12-20 10:10:33 +01:00
omap-usb-host.c mfd: omap-usb-host: Fix dts probe of children 2018-10-18 09:16:21 +02:00
omap-usb-tll.c mfd: omap-usb-tll: Fix register offsets 2017-09-05 08:46:02 +01:00
omap-usb.h
palmas.c mfd: palmas: Assign the right powerhold mask for tps65917 2019-11-12 19:18:19 +01:00
pcf50633-adc.c
pcf50633-core.c
pcf50633-gpio.c
pcf50633-irq.c
qcom-pm8xxx.c
qcom-spmi-pmic.c mfd: qcom-spmi-pmic: Use devm_of_platform_populate() 2017-07-06 08:29:12 +01:00
qcom_rpm.c mfd: qcom_rpm: write fw_version to CTRL_REG 2019-02-27 10:08:03 +01:00
rc5t583-irq.c
rc5t583.c
rdc321x-southbridge.c
retu-mfd.c mfd: retu: Add OF device ID table 2017-07-18 08:27:18 +01:00
rk808.c mfd: rk808: Add RK805 power key support 2017-08-21 08:54:56 +01:00
rn5t618.c mfd: rn5t618: Mark ADC control register volatile 2020-02-14 16:32:18 -05:00
rt5033.c
rtl8411.c
rts5209.c
rts5227.c misc: rtsx: set correct pcr_ops for rts522A 2020-04-24 08:00:31 +02:00
rts5229.c
rts5249.c
rtsx_pcr.c mfd: rtsx: Make arrays depth and cd_mask static const 2017-09-05 08:45:59 +01:00
rtsx_pcr.h
rtsx_usb.c
sec-core.c
sec-irq.c
si476x-cmd.c
si476x-i2c.c
si476x-prop.c
sky81452.c
sm501.c mfd: sm501: Set coherent_dma_mask when creating subdevices 2018-09-15 09:45:28 +02:00
smsc-ece1099.c mfd: smsc-ece: Use devm_of_platform_populate() 2017-07-06 08:29:12 +01:00
ssbi.c
sta2x11-mfd.c mfd: Convert remaining uses of pr_warning to pr_warn 2017-04-27 09:25:05 +01:00
stm32-lptimer.c mfd: Add STM32 LPTimer driver 2017-09-04 14:49:04 +01:00
stm32-timers.c mfd: stm32-timers: Use devm_of_platform_populate() 2017-07-06 08:29:12 +01:00
stmpe-i2c.c
stmpe-spi.c
stmpe.c mfd: stmpe: Fix bit clearing on STMPE1600 2017-04-27 09:25:07 +01:00
stmpe.h
stw481x.c
sun4i-gpadc.c
sun6i-prcm.c mfd: sun6i-prcm: Add codec analog controls sub-device for Allwinner A23 2017-02-13 09:29:40 +00:00
syscon.c
t7l66xb.c mfd: t7l66xb: Handle return value of clk_prepare_enable 2017-09-05 08:46:01 +01:00
tc3589x.c
tc6387xb.c
tc6393xb.c mfd: tc6393xb: Handle return value of clk_prepare_enable 2017-07-06 08:29:12 +01:00
ti-lmu.c mfd: Add TI LMU driver 2017-04-27 09:25:04 +01:00
ti_am335x_tscadc.c mfd: ti_am335x_tscadc: Keep ADC interface on if child is wakeup capable 2019-11-24 08:23:24 +01:00
timberdale.c Input: tsc2007 - move header file out of I2C realm 2017-05-22 17:26:58 -07:00
timberdale.h
tmio_core.c
tps6105x.c mfd: tps6105x: Add OF device ID table 2017-07-18 08:27:37 +01:00
tps6507x.c
tps6586x.c mfd: tps6586x: Handle interrupts on suspend 2019-01-23 08:09:49 +01:00
tps65010.c mfd: tps65010: Move header file out of I2C realm 2017-08-15 08:27:22 +01:00
tps65086.c
tps65090.c
tps65217.c
tps65218.c mfd: tps65218: Use devm_regmap_add_irq_chip and clean up error path in probe() 2019-02-27 10:08:03 +01:00
tps65910.c regulator: tps65910: wire up sleep control configuration 2017-06-15 18:23:27 +01:00
tps65911-comparator.c
tps65912-core.c
tps65912-i2c.c mfd: tps65912: Export OF device ID table as module aliases 2017-02-13 09:29:43 +00:00
tps65912-spi.c mfd: tps65912-spi: Add missing of table registration 2019-06-15 11:54:52 +02:00
tps68470.c mfd: Add support for TPS68470 device 2017-09-05 08:46:01 +01:00
tps80031.c
twl-core.c mfd: twl-core: Fix section annotations on {,un}protect_pm_master 2019-02-27 10:08:02 +01:00
twl-core.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
twl4030-audio.c mfd: twl4030-audio: Fix sibling-node lookup 2017-12-29 17:53:46 +01:00
twl4030-irq.c mfd: twl: Move header file out of I2C realm 2017-09-04 14:41:02 +01:00
twl4030-power.c mfd: twl: Move header file out of I2C realm 2017-09-04 14:41:02 +01:00
twl6030-irq.c mfd: twl: Move header file out of I2C realm 2017-09-04 14:41:02 +01:00
twl6040.c mfd: twl6040: Fix device init errors for ACCCTL register 2019-06-15 11:54:52 +02:00
ucb1x00-assabet.c
ucb1x00-core.c
ucb1x00-ts.c
ucb1400_core.c
vexpress-sysreg.c
viperboard.c
vx855.c
wl1273-core.c
wm831x-auxadc.c
wm831x-core.c mfd: wm831x: Remove redundant !pdata checks 2017-07-06 08:29:11 +01:00
wm831x-i2c.c mfd: wm831x-i2c: Add NULL check before pointer dereference 2017-07-06 08:29:11 +01:00
wm831x-irq.c mfd: wm831x: Add basic device tree binding 2017-03-23 11:45:50 +00:00
wm831x-otp.c
wm831x-spi.c mfd: wm831x-spi: Add NULL check before pointer dereference 2017-07-06 08:29:11 +01:00
wm5102-tables.c
wm5110-tables.c mfd: wm5110: Add missing ASRC rate register 2019-02-27 10:08:03 +01:00
wm8350-core.c
wm8350-gpio.c
wm8350-i2c.c
wm8350-irq.c
wm8350-regmap.c
wm8400-core.c
wm8994-core.c mfd: wm8994: Fix driver operation if loaded as modules 2020-06-25 15:41:49 +02:00
wm8994-irq.c
wm8994-regmap.c
wm8994.h
wm8997-tables.c
wm8998-tables.c