kernel_optimize_test/drivers/gpio
Mario Limonciello 54e6180c8c gpio: Request interrupts after IRQ is initialized
commit 06fb4ecfeac7e00d6704fa5ed19299f2fefb3cc9 upstream.

Commit 5467801f1fcb ("gpio: Restrict usage of GPIO chip irq members
before initialization") attempted to fix a race condition that lead to a
NULL pointer, but in the process caused a regression for _AEI/_EVT
declared GPIOs.

This manifests in messages showing deferred probing while trying to
allocate IRQs like so:

  amd_gpio AMDI0030:00: Failed to translate GPIO pin 0x0000 to IRQ, err -517
  amd_gpio AMDI0030:00: Failed to translate GPIO pin 0x002C to IRQ, err -517
  amd_gpio AMDI0030:00: Failed to translate GPIO pin 0x003D to IRQ, err -517
  [ .. more of the same .. ]

The code for walking _AEI doesn't handle deferred probing and so this
leads to non-functional GPIO interrupts.

Fix this issue by moving the call to `acpi_gpiochip_request_interrupts`
to occur after gc->irc.initialized is set.

Fixes: 5467801f1fcb ("gpio: Restrict usage of GPIO chip irq members before initialization")
Link: https://lore.kernel.org/linux-gpio/BL1PR12MB51577A77F000A008AA694675E2EF9@BL1PR12MB5157.namprd12.prod.outlook.com/
Link: https://bugzilla.suse.com/show_bug.cgi?id=1198697
Link: https://bugzilla.kernel.org/show_bug.cgi?id=215850
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1979
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/1976
Reported-by: Mario Limonciello <mario.limonciello@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Shreeya Patel <shreeya.patel@collabora.com>
Tested-By: Samuel Čavoj <samuel@cavoj.net>
Tested-By: lukeluk498@gmail.com Link:
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-and-tested-by: Takashi Iwai <tiwai@suse.de>
Cc: Shreeya Patel <shreeya.patel@collabora.com>
Cc: stable@vger.kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-04-27 13:53:55 +02:00
..
gpio-74x164.c gpio: 74x164: utilize the for_each_set_clump8 macro 2019-12-04 19:44:12 -08:00
gpio-74xx-mmio.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-104-dio-48e.c gpio: 104-dio-48e: Use irqchip template 2020-07-23 15:09:26 +02:00
gpio-104-idi-48.c gpio: 104-idi-48: Use irqchip template 2020-07-23 15:09:54 +02:00
gpio-104-idio-16.c gpio: 104-idio-16: Use irqchip template 2020-07-23 15:10:25 +02:00
gpio-adnp.c gpio: adnp: Use irqchip template 2020-07-20 15:34:59 +02:00
gpio-adp5520.c
gpio-adp5588.c gpio: adp5588: Use irqchip template 2020-07-20 15:47:50 +02:00
gpio-aggregator.c gpio: aggregator: Fix calling into sleeping GPIO controllers 2022-02-16 12:54:23 +01:00
gpio-altera-a10sr.c
gpio-altera.c gpio: gpio-altera: Add missing kerneldoc entry and demote comment 2020-07-08 09:24:07 +02:00
gpio-amd-fch.c gpio: amd-fch: correct logic of GPIO_LINE_DIRECTION 2020-09-28 12:22:04 +02:00
gpio-amd8111.c
gpio-amdpt.c
gpio-arizona.c gpio: arizona: disable pm_runtime in case of failure 2020-12-02 10:40:54 +01:00
gpio-aspeed-sgpio.c Some late GPIO fixes for the v5.9 series: 2020-10-02 09:51:42 -07:00
gpio-aspeed.c gpio: aspeed: Convert aspeed_gpio.lock to raw_spinlock 2022-01-27 10:54:15 +01:00
gpio-ath79.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
gpio-bcm-kona.c gpio: bcm-kona: Simplify with dev_err_probe() 2020-08-28 20:13:51 +02:00
gpio-bd9571mwv.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-bd70528.c This is the bulk of GPIO changes for the v5.5 kernel cycle 2019-12-01 17:56:50 -08:00
gpio-bd71828.c gpio: bd71828: Remove unneeded defines for GPIO_LINE_DIRECTION_IN/OUT 2020-02-10 10:55:18 +01:00
gpio-brcmstb.c gpio: brcmstb: support gpio-line-names property 2020-03-26 00:02:03 +01:00
gpio-bt8xx.c
gpio-cadence.c gpio: cadence: Add missing MODULE_DEVICE_TABLE 2021-06-03 09:00:39 +02:00
gpio-clps711x.c
gpio-creg-snps.c gpio: aspeed-sgpio: fixed typos 2020-01-23 16:16:05 +01:00
gpio-crystalcove.c gpio: crystalcove: Free IRQ on error path 2020-08-04 01:25:02 +02:00
gpio-cs5535.c docs: driver-model: move it to the driver-api book 2019-07-15 11:03:02 -03:00
gpio-da9052.c
gpio-da9055.c
gpio-davinci.c gpio: davinci: Simplify with dev_err_probe() 2020-08-28 20:15:06 +02:00
gpio-dln2.c gpio: dln2: Fix interrupts when replugging the device 2021-12-29 12:26:03 +01:00
gpio-dwapb.c gpio: dwapb: fix NULL pointer dereference at dwapb_gpio_suspend() 2020-12-02 10:40:54 +01:00
gpio-eic-sprd.c gpio: eic-sprd: break loop when getting NULL device resource 2020-12-09 09:41:49 +01:00
gpio-em.c gpio: em: Use platform_get_irq() to obtain interrupts 2019-11-13 13:47:48 +01:00
gpio-ep93xx.c gpio: ep93xx: Fix single irqchip with multi gpiochips 2021-02-17 11:02:20 +01:00
gpio-exar.c gpio: exar: Fix bad handling for ida_simple_get error path 2020-05-05 18:24:56 +02:00
gpio-f7188x.c gpio-f7188x: Add GPIO support for F81865 2020-05-05 18:22:26 +02:00
gpio-ftgpio010.c gpio: ftgpio010: Fix small typo 2020-04-28 15:50:28 +02:00
gpio-ge.c
gpio-gpio-mm.c gpio: gpio-mm: utilize for_each_set_clump8 macro 2019-12-04 19:44:12 -08:00
gpio-grgpio.c gpio: Remove the unused flags 2020-01-15 11:24:19 +01:00
gpio-gw-pld.c
gpio-hlwd.c gpio: hlwd: Pass irqchip when adding gpiochip 2019-08-15 09:57:29 +02:00
gpio-htc-egpio.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-ich.c gpio: ich: changed every 'unsigned' to 'unsigned int' 2020-07-22 16:00:27 +03:00
gpio-intel-mid.c gpio: intel-mid: Move hardware initialization to callback 2019-10-15 01:18:51 +02:00
gpio-iop.c Merge branch 'i2c/for-5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2019-07-15 21:10:39 -07:00
gpio-it87.c gpio: gpio-it87: Fix formatting issues which confuse kerneldoc 2020-07-08 09:24:08 +02:00
gpio-ixp4xx.c gpio: updates for v5.4 2019-09-03 16:04:19 +02:00
gpio-janz-ttl.c
gpio-kempld.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-logicvc.c gpio: Add support for the Xylon LogiCVC GPIOs 2019-12-13 09:50:29 +01:00
gpio-loongson.c MIPS: Loongson64: Rename CPU TYPES 2019-10-31 15:03:10 -07:00
gpio-loongson1.c
gpio-lp873x.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-lp3943.c
gpio-lp87565.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-lpc18xx.c
gpio-lpc32xx.c gpio: lpc32xx: allow building on non-lpc32xx targets 2019-08-15 21:33:07 +02:00
gpio-madera.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-max730x.c gpio: max730x: bring gpiochip_add_data after port config 2020-05-22 17:01:25 +02:00
gpio-max732x.c gpio: max732x: Use irqchip template 2020-08-04 01:12:43 +02:00
gpio-max3191x.c gpio: max3191x: utilize the for_each_set_clump8 macro 2019-12-04 19:44:13 -08:00
gpio-max7300.c
gpio-max7301.c
gpio-max77620.c gpio: max77620: Use helper variable and clarify 2020-07-17 14:03:38 +02:00
gpio-max77650.c gpio: max77650: add MODULE_ALIAS() 2019-07-29 00:03:52 +02:00
gpio-mb86s7x.c gpio: mb86s7x: Remove superfluous test for ACPI companion 2020-05-18 09:15:16 +02:00
gpio-mc9s08dz60.c
gpio-mc33880.c
gpio-menz127.c drivers: mcb: use symbol namespaces 2019-11-03 19:54:53 +01:00
gpio-merrifield.c gpio: merrifield: Better show how GPIO and IRQ bases are derived from hardware 2020-04-16 20:41:06 +03:00
gpio-ml-ioh.c gpio: gpio-ml-ioh: Fix missing ':' in 'struct ioh_gpio_reg_data 2020-06-30 17:00:11 +03:00
gpio-mlxbf.c gpio: gpio-mlxbf: Tell the compiler that ACPI functions may not be used 2020-07-08 09:24:08 +02:00
gpio-mlxbf2.c gpio: mlxbf2.c: Add check for bgpio_init failure 2021-11-18 14:03:42 +01:00
gpio-mm-lantiq.c gpio: mm-lantiq: Fix small typo 2020-04-28 22:41:25 +02:00
gpio-mmio.c gpio: mmio: replace open-coded for_each_set_bit() 2020-07-16 15:07:18 +02:00
gpio-mockup.c gpio: mockup: refactor the module init function 2020-09-30 10:52:21 +02:00
gpio-moxtet.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-mpc8xxx.c gpio: mpc8xxx: Use 'devm_gpiochip_add_data()' to simplify the code and avoid a leak 2021-09-22 12:28:04 +02:00
gpio-mpc5200.c
gpio-msic.c
gpio-mt7621.c gpio: mt7621: add BGPIOF_NO_SET_ON_INPUT flag 2020-03-25 09:50:45 +01:00
gpio-mvebu.c gpio: mvebu: fix pwm .get_state period calculation 2021-01-30 13:55:16 +01:00
gpio-mxc.c gpio: mxc: Fix disabled interrupt wake-up support 2021-07-07 08:22:46 -04:00
gpio-mxs.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-octeon.c
gpio-omap.c gpio: omap: Save and restore sysconfig 2021-04-28 13:39:59 +02:00
gpio-palmas.c
gpio-pca953x.c gpio: pca953x: Improve bias setting 2021-10-20 11:45:03 +02:00
gpio-pca9570.c gpio: pca9570: add GPO driver for PCA9570 2020-07-16 14:35:12 +02:00
gpio-pcf857x.c gpio: pcf857x: Fix missing first interrupt 2021-03-04 11:38:40 +01:00
gpio-pch.c gpio: pch: Add a blank line between declaration and code 2020-07-21 19:12:57 +03:00
gpio-pci-idio-16.c gpio: pci-idio-16: Use irqchip template 2020-07-23 15:11:26 +02:00
gpio-pcie-idio-24.c gpio: pcie-idio-24: Enable PEX8311 interrupts 2020-11-06 15:19:44 +01:00
gpio-pisosr.c gpio: pisosr: Simplify with dev_err_probe() 2020-08-28 20:15:51 +02:00
gpio-pl061.c gpio: pl061: Support building as module 2020-04-14 16:23:46 +02:00
gpio-pmic-eic-sprd.c gpio: gpio-pmic-eic-sprd: Fix incorrectly named property 'map' 2020-07-08 09:24:07 +02:00
gpio-pxa.c gpio: pxa: Fix return value of pxa_gpio_probe() 2020-05-25 11:14:36 +02:00
gpio-raspberrypi-exp.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-rc5t583.c
gpio-rcar.c gpio: rcar: Use irqchip template 2020-07-30 00:13:10 +02:00
gpio-rda.c gpio: Add RDA Micro GPIO controller support 2019-10-29 15:12:52 +01:00
gpio-rdc321x.c
gpio-reg.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-regmap.c gpio: add a reusable generic gpio_chip using regmap 2020-06-03 10:48:37 +02:00
gpio-sa1100.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-sama5d2-piobu.c gpio: gpio-sama5d2-piobu: Demote all kerneldoc headers to basic comment blocks 2020-07-08 09:24:07 +02:00
gpio-sch.c gpio: sch: Add a blank line between declaration and code 2020-07-22 16:00:27 +03:00
gpio-sch311x.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-sifive.c gpio: sifive: use the correct register to read output values 2022-02-16 12:54:24 +01:00
gpio-siox.c gpio: siox: explicitly support only threaded irqs 2020-09-09 12:59:15 +02:00
gpio-sl28cpld.c gpio: Add support for the sl28cpld GPIO controller 2020-09-17 16:00:20 +01:00
gpio-sodaville.c
gpio-spear-spics.c
gpio-sprd.c gpio: sprd: Clear interrupt when setting the type as edge 2020-08-31 18:06:28 +02:00
gpio-sta2x11.c
gpio-stmpe.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
gpio-stp-xway.c gpio: stp-xway: automatically drive GPHY leds on ar10 and grx390 2020-08-18 21:32:28 +02:00
gpio-syscon.c gpio: gpio-syscon: Fix formatting issues which confuse kerneldoc 2020-07-08 09:24:08 +02:00
gpio-tb10x.c gpio: remove unneeded MODULE_VERSION() usage 2019-12-12 17:09:50 +01:00
gpio-tc3589x.c GPIO bulk changes for the v5.10 kernel cycle: 2020-10-13 10:09:33 -07:00
gpio-tegra.c gpio: tegra: mask GPIO IRQs during IRQ shutdown 2020-04-28 16:22:33 +02:00
gpio-tegra186.c gpio: tegra186: Fix chip_data type confusion 2022-03-02 11:42:57 +01:00
gpio-thunderx.c gpio: thunderx: Switch to GPIOLIB_IRQCHIP 2020-01-15 11:18:29 +01:00
gpio-timberdale.c
gpio-tpic2810.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-tps6586x.c
gpio-tps65086.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-tps65218.c
gpio-tps65910.c
gpio-tps65912.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-tps68470.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-tqmx86.c gpio: tqmx86: really make IRQ optional 2021-08-12 13:22:06 +02:00
gpio-ts4800.c
gpio-ts4900.c gpio: ts4900: Do not set DAT and OE together 2022-03-16 14:15:59 +01:00
gpio-ts5500.c
gpio-twl4030.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-twl6040.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-ucb1400.c
gpio-uniphier.c gpio: uniphier: Fix void functions to remove return value 2021-09-30 10:11:03 +02:00
gpio-vf610.c gpio: vf610: Pass irqchip when adding gpiochip 2019-08-23 09:41:18 +02:00
gpio-viperboard.c gpio: viperboard: Replace 'unsigned' with 'unsigned int' 2019-08-05 11:26:58 +02:00
gpio-vr41xx.c
gpio-vx855.c gpio: vx855: fixed a typo 2020-01-15 13:45:01 +01:00
gpio-wcd934x.c gpio: wcd934x: Fix shift-out-of-bounds error 2021-06-16 12:01:45 +02:00
gpio-wcove.c gpio: wcove: Request IRQ after all initialisation done 2020-08-04 01:25:02 +02:00
gpio-winbond.c
gpio-wm831x.c
gpio-wm8350.c
gpio-wm8994.c
gpio-ws16c48.c gpio: ws16c48: Use irqchip template 2020-07-23 15:08:55 +02:00
gpio-xgene-sb.c gpio: xgene-sb: Drop extra check to call acpi_gpiochip_request_interrupts() 2020-05-18 09:16:31 +02:00
gpio-xgene.c gpio: Use new GPIO_LINE_DIRECTION 2019-11-07 09:27:48 +01:00
gpio-xgs-iproc.c gpio: xgs-iproc: fix parsing of ngpios property 2021-11-02 19:48:23 +01:00
gpio-xilinx.c gpio: xilinx: Fix bug where the wrong GPIO register is written to 2020-02-10 12:52:34 +01:00
gpio-xlp.c gpio: xlp: Pass irqchip when adding gpiochip 2019-08-15 09:55:07 +02:00
gpio-xra1403.c gpio: xra1403: Make use of for_each_requested_gpio() 2020-06-20 23:13:27 +02:00
gpio-xtensa.c gpio: xtensa: fix driver build 2019-12-09 10:40:18 +01:00
gpio-zevio.c
gpio-zx.c gpio: Unconditionally assign .request()/.free() 2020-04-02 09:16:06 +02:00
gpio-zynq.c gpio: zynq: Check return value of irq_get_irq_data 2021-07-20 16:05:43 +02:00
gpiolib-acpi.c gpiolib: acpi: use correct format characters 2022-04-20 09:23:11 +02:00
gpiolib-acpi.h gpiolib: acpi: make acpi_can_fallback_to_crs() static 2019-09-10 11:34:20 +01:00
gpiolib-cdev.c gpiolib: cdev: zero padding during conversion to gpioline_info_changed 2021-06-30 08:47:24 -04:00
gpiolib-cdev.h gpiolib: fix sysfs when cdev is not selected 2020-11-05 15:35:40 +01:00
gpiolib-devres.c gpio: don't use same lockdep class for all devm_gpiochip_add_data users 2020-08-04 01:22:02 +02:00
gpiolib-legacy.c
gpiolib-of.c gpiolib: generalize devprop_gpiochip_set_names() for device properties 2020-09-14 10:54:01 +02:00
gpiolib-of.h gpio: of: Add DT overlay support for GPIO hogs 2020-02-21 17:10:33 +01:00
gpiolib-sysfs.c gpio: sysfs: Obey valid_mask 2021-04-21 13:00:50 +02:00
gpiolib-sysfs.h gpiolib: move gpiolib-sysfs function declarations into their own header 2020-07-12 10:22:00 +02:00
gpiolib.c gpio: Request interrupts after IRQ is initialized 2022-04-27 13:53:55 +02:00
gpiolib.h gpiolib: cdev: support setting debounce 2020-09-30 10:57:04 +02:00
Kconfig gpio: AMD8111 and TQMX86 require HAS_IOPORT_MAP 2021-07-07 08:22:46 -04:00
Makefile - New Drivers 2020-10-14 15:56:58 -07:00
TODO drivers: gpio: Fix trivial spelling 2020-06-15 10:15:29 +02:00