Vincent Whitchurch
d49b48f088
gpio: Fix crash due to registration race
...
gpiochip_add_data_with_key() adds the gpiochip to the gpio_devices list
before of_gpiochip_add() is called, but it's only the latter which sets
the ->of_xlate function pointer. gpiochip_find() can be called by
someone else between these two actions, and it can find the chip and
call of_gpiochip_match_node_and_xlate() which leads to the following
crash due to a NULL ->of_xlate().
Unhandled prefetch abort: page domain fault (0x01b) at 0x00000000
Modules linked in: leds_gpio(+) gpio_generic(+)
CPU: 0 PID: 830 Comm: insmod Not tainted 4.18.0+ #43
Hardware name: ARM-Versatile Express
PC is at (null)
LR is at of_gpiochip_match_node_and_xlate+0x2c/0x38
Process insmod (pid: 830, stack limit = 0x(ptrval))
(of_gpiochip_match_node_and_xlate) from (gpiochip_find+0x48/0x84)
(gpiochip_find) from (of_get_named_gpiod_flags+0xa8/0x238)
(of_get_named_gpiod_flags) from (gpiod_get_from_of_node+0x2c/0xc8)
(gpiod_get_from_of_node) from (devm_fwnode_get_index_gpiod_from_child+0xb8/0x144)
(devm_fwnode_get_index_gpiod_from_child) from (gpio_led_probe+0x208/0x3c4 [leds_gpio])
(gpio_led_probe [leds_gpio]) from (platform_drv_probe+0x48/0x9c)
(platform_drv_probe) from (really_probe+0x1d0/0x3d4)
(really_probe) from (driver_probe_device+0x78/0x1c0)
(driver_probe_device) from (__driver_attach+0x120/0x13c)
(__driver_attach) from (bus_for_each_dev+0x68/0xb4)
(bus_for_each_dev) from (bus_add_driver+0x1a8/0x268)
(bus_add_driver) from (driver_register+0x78/0x10c)
(driver_register) from (do_one_initcall+0x54/0x1fc)
(do_one_initcall) from (do_init_module+0x64/0x1f4)
(do_init_module) from (load_module+0x2198/0x26ac)
(load_module) from (sys_finit_module+0xe0/0x110)
(sys_finit_module) from (ret_fast_syscall+0x0/0x54)
One way to fix this would be to rework the hairy registration sequence
in gpiochip_add_data_with_key(), but since I'd probably introduce a
couple of new bugs if I attempted that, simply add a check for a
non-NULL of_xlate function pointer in
of_gpiochip_match_node_and_xlate(). This works since the driver looking
for the gpio will simply fail to find the gpio and defer its probe and
be reprobed when the driver which is registering the gpiochip has fully
completed its probe.
Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2018-08-31 11:30:45 +02:00
..
devres.c
gpio: Export devm_gpiod_get_from_of_node() for consumers
2018-01-12 11:05:24 +01:00
gpio-74x164.c
The is the bulk of GPIO changes for the v4.16 kernel cycle.
2018-01-31 12:25:27 -08:00
gpio-74xx-mmio.c
gpio: 74xx-mmio: Use of_device_get_match_data()
2018-05-16 14:35:24 +02:00
gpio-104-dio-48e.c
gpio: 104-dio-48e: make array 'ports' static, shrinks object size
2018-05-16 14:35:24 +02:00
gpio-104-idi-48.c
gpio: make several const arrays static, shrinks object size
2018-05-16 14:35:24 +02:00
gpio-104-idio-16.c
gpio: 104-idio-16: Implement get_multiple callback
2018-03-26 10:10:18 +02:00
gpio-adnp.c
treewide: devm_kzalloc() -> devm_kcalloc()
2018-06-12 16:19:22 -07:00
gpio-adp5520.c
gpio: adp5520: Include proper header
2018-01-13 22:12:07 +01:00
gpio-adp5588.c
gpio: adp5588: Fix sleep-in-atomic-context bug
2018-08-29 10:54:38 +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: altera: Include GPIO driver header
2018-01-13 22:18:34 +01:00
gpio-amd8111.c
gpio: amd8111: Include proper header
2018-01-13 22:22:49 +01:00
gpio-amdpt.c
gpio-arizona.c
gpio: arizona: Include proper header
2018-01-13 22:47:48 +01:00
gpio-aspeed.c
gpio: aspeed: fix compile testing warning
2018-07-13 09:05:06 +02:00
gpio-ath79.c
gpio: fix meaningless return expression
2018-07-29 23:34:54 +02:00
gpio-bcm-kona.c
gpio: bcm-kona: Don't shadow error code of gpiochip_lock_as_irq()
2018-08-06 23:46:55 +02:00
gpio-bd9571mwv.c
gpio: Add ROHM BD9571MWV-M PMIC GPIO driver
2017-04-28 09:47:46 +02:00
gpio-brcmstb.c
The is the bulk of GPIO changes for the v4.16 kernel cycle.
2018-01-31 12:25:27 -08:00
gpio-bt8xx.c
gpio: bt8xx: Include proper header
2018-01-13 22:56:52 +01:00
gpio-clps711x.c
gpio-crystalcove.c
gpio: crystalcove: Include proper header
2018-01-14 01:48:48 +01:00
gpio-cs5535.c
gpio: cs5535: Include proper header
2018-01-14 01:56:24 +01:00
gpio-da9052.c
gpio: da905x: Include proper header
2018-01-14 02:00:10 +01:00
gpio-da9055.c
gpio: da905x: Include proper header
2018-01-14 02:00:10 +01:00
gpio-davinci.c
gpio: davinci: Do not assume continuous IRQ numbering
2018-06-18 07:55:30 +02:00
gpio-dln2.c
gpio: dln2: Include proper header
2018-03-19 01:50:07 +01:00
gpio-dwapb.c
gpio: dwapb: Fix error handling in dwapb_gpio_probe()
2018-08-29 14:04:04 +02:00
gpio-eic-sprd.c
gpio: eic: Add edge trigger emulation for EIC
2018-05-16 14:35:24 +02:00
gpio-em.c
gpio: em: Don't shadow error code of gpiochip_lock_as_irq()
2018-08-06 23:46:55 +02:00
gpio-ep93xx.c
pinctrl / gpio: Introduce .set_config() callback for GPIO chips
2017-01-26 15:27:37 +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: Drop of_gpio.h include
2018-03-19 01:50:24 +01:00
gpio-ge.c
gpio: ge: Fix build warning
2018-05-16 14:35:24 +02:00
gpio-gpio-mm.c
gpio: make several const arrays static, shrinks object size
2018-05-16 14:35:24 +02:00
gpio-grgpio.c
gpio: grgpio: Include the right header
2018-03-19 01:50:28 +01:00
gpio-hlwd.c
gpio: Add GPIO driver for Nintendo Wii
2018-02-22 13:54:35 +01:00
gpio-htc-egpio.c
treewide: devm_kzalloc() -> devm_kcalloc()
2018-06-12 16:19:22 -07:00
gpio-ich.c
gpio: ich: Use BIT() macro
2018-03-19 01:50:29 +01:00
gpio-ingenic.c
gpio: ingenic: Use of_device_get_match_data()
2018-05-16 14:35:24 +02:00
gpio-intel-mid.c
gpio-intel-mid: Delete an error message
2018-02-22 15:29:05 +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: Add support for IT8613
2018-08-10 23:19:17 +02:00
gpio-janz-ttl.c
gpio: janz-ttl: Use BIT() macro
2018-03-19 01:50:30 +01:00
gpio-kempld.c
gpio: kempld: Include the right header
2018-03-19 01:50:31 +01:00
gpio-ks8695.c
gpio: ks8695: Include the right header
2018-03-19 01:50:31 +01:00
gpio-loongson.c
gpio: loongson: Use BIT() macros
2018-05-16 14:35:24 +02:00
gpio-loongson1.c
gpio: loongson1: fix bgpio usage
2017-10-25 11:25:38 +02:00
gpio-lp873x.c
gpio: lp873x: Include the right header
2018-05-16 14:35:24 +02:00
gpio-lp3943.c
gpio: lp3943: Include the right header
2018-05-16 14:35:24 +02: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-lpc32xx.c
gpio: lpc32xx: Include the right header
2018-05-16 14:35:24 +02:00
gpio-lynxpoint.c
gpio: lynxpoint: Include the right header
2018-05-16 14:35:24 +02:00
gpio-madera.c
gpio: madera: Support Cirrus Logic Madera class codecs
2018-06-05 11:15:30 +01:00
gpio-max730x.c
gpio: max730x: Include the right header
2018-05-16 14:35:24 +02:00
gpio-max732x.c
gpio: max732x: add error handling for i2c_new_dummy
2018-06-18 07:55:30 +02:00
gpio-max3191x.c
gpio: Remove VLA from MAX3191X driver
2018-03-27 15:18:06 +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: Include the right header
2018-05-16 14:35:24 +02:00
gpio-mc33880.c
gpio: mc33880: Include the right header
2018-05-16 14:35:24 +02:00
gpio-menz127.c
gpio: Fix wrong rounding in gpio-menz127
2018-06-18 07:55:30 +02:00
gpio-merrifield.c
gpio: merrifield: Delete an error message
2018-02-22 15:25:40 +01:00
gpio-ml-ioh.c
gpio: ml-ioh: Fix buffer underwrite on probe error path
2018-07-29 23:13:09 +02:00
gpio-mm-lantiq.c
gpio: mm-lantiq: Include the right header
2018-05-16 14:35:24 +02:00
gpio-mmio.c
gpio: mmio: Fix up inverted direction registers
2018-08-10 23:19:17 +02:00
gpio-mockup.c
gpio: mockup: use the SPDX identifier and remove license boilerplate
2018-05-16 14:35:24 +02:00
gpio-mpc8xxx.c
gpio: mpc8xxx: Do not reverse bits using bgpio
2017-10-25 11:25:40 +02:00
gpio-mpc5200.c
gpio-msic.c
gpio: msic: Include the right header
2018-05-16 14:35:24 +02:00
gpio-mt7621.c
gpio: mt7621: Edit to preferred syntax
2018-07-09 13:51:57 +02:00
gpio-mvebu.c
gpio: mvebu: Use the proper APIs
2018-05-16 14:35:24 +02:00
gpio-mxc.c
gpio: mxc: add power management support
2018-07-29 22:23:17 +02:00
gpio-mxs.c
gpio: mxs: Fit writel() into a single line
2018-07-29 23:21:07 +02:00
gpio-octeon.c
gpio: octeon: Include the right header
2018-05-24 14:22:04 +02:00
gpio-omap.c
gpio: omap: Add get/set_multiple() callbacks
2018-08-06 23:46:55 +02:00
gpio-palmas.c
gpio: palmas: Include the right header
2018-05-24 14:25:13 +02:00
gpio-pca953x.c
gpio: pca953x: suppress interrupts warning when not applicable
2018-07-02 16:00:49 +02:00
gpio-pcf857x.c
gpio: pcf857x: Include the right header
2018-05-24 17:09:41 +02:00
gpio-pch.c
gpio: pch: Include the right header
2018-05-24 17:09:41 +02:00
gpio-pci-idio-16.c
gpio: pci-idio-16: Fix port memory offset for get_multiple callback
2018-04-27 00:55:16 +02:00
gpio-pcie-idio-24.c
gpio: pcie-idio-24: Fix off-by-one error in get_multiple loop
2018-04-30 10:48:08 +02:00
gpio-pisosr.c
gpio-pisosr: add support for get_multiple
2018-07-29 21:55:33 +02:00
gpio-pl061.c
gpio: pl061: Include the right header
2018-05-24 17:09:41 +02:00
gpio-pmic-eic-sprd.c
gpio: pmic_eic: Add edge trigger emulation for PMIC EIC
2018-05-16 14:35:24 +02:00
gpio-pxa.c
gpio: pxa: remove set but not used variable 'gpio_offset'
2018-08-02 23:32:29 +02:00
gpio-raspberrypi-exp.c
gpio: raspberrypi-exp: Driver for RPi3 GPIO expander via mailbox service
2018-02-22 13:49:59 +01:00
gpio-rc5t583.c
gpio: rc5t583: Include the right header
2018-07-02 16:00:49 +02:00
gpio-rcar.c
gpio: rcar: Implement .get_direction() callback
2018-07-13 10:55:26 +02:00
gpio-rdc321x.c
gpio: rdc321x: Include the right header
2018-07-02 16:00:49 +02:00
gpio-reg.c
gpio: gpio-reg: fix build
2017-12-22 15:24:31 +01:00
gpio-sa1100.c
gpio: sa1100: Include the right header
2018-07-02 16:00:49 +02:00
gpio-sch.c
gpio: sch: Implement .get_direction()
2018-07-02 16:00:49 +02:00
gpio-sch311x.c
gpio: sch311x: Replace unsigned char with u8
2018-07-02 16:00:49 +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: Include the right header
2018-07-02 16:00:49 +02:00
gpio-sprd.c
gpio: Add GPIO driver for Spreadtrum SC9860 platform
2018-03-02 11:00:43 +01:00
gpio-sta2x11.c
gpio: sta2x11: Inline regs macro
2018-07-02 16:00:49 +02:00
gpio-stmpe.c
gpio: stmpe: Include the right header
2018-07-02 16:00:49 +02:00
gpio-stp-xway.c
gpio: stp-xway: Include the right header
2018-07-02 16:00:49 +02:00
gpio-syscon.c
gpio: syscon: rockchip: add GRF GPIO support for rk3328
2018-08-06 23:46:55 +02:00
gpio-tb10x.c
gpio: tb10x: Use the right include
2018-08-10 23:04:27 +02:00
gpio-tc3589x.c
gpio: Move irqdomain into struct gpio_irq_chip
2017-11-08 14:06:21 +01:00
gpio-tegra.c
This is the bulk of GPIO changes for the v4.19 kernel cycle:
2018-08-15 21:35:38 -07:00
gpio-tegra186.c
gpio: tegra186: Add support for Tegra194
2018-07-02 16:01:02 +02:00
gpio-thunderx.c
treewide: devm_kzalloc() -> devm_kcalloc()
2018-06-12 16:19:22 -07:00
gpio-timberdale.c
gpio: timberdale: Include the right header
2018-08-10 23:04:27 +02:00
gpio-tpic2810.c
gpio-tps6586x.c
gpio-tps65086.c
gpio-tps65218.c
pinctrl / gpio: Introduce .set_config() callback for GPIO chips
2017-01-26 15:27:37 +01:00
gpio-tps65910.c
gpio-tps65912.c
gpio-tps68470.c
gpio: tps68470: Update to SPDX license identifier
2018-02-23 15:26:42 +01:00
gpio-ts4800.c
gpio-ts4900.c
gpio: ts4900: Use of_device_get_match_data()
2018-05-16 14:35:24 +02:00
gpio-ts5500.c
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-ucb1400.c
gpio-uniphier.c
This is the bulk of GPIO changes for the v4.19 kernel cycle:
2018-08-15 21:35:38 -07:00
gpio-vf610.c
gpio: vf610: Use of_device_get_match_data()
2018-05-16 14:35:24 +02:00
gpio-viperboard.c
gpio-vr41xx.c
gpio: vr41xx: Bail out on gpiochip_lock_as_irq() error
2018-08-06 23:46:55 +02: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: Use seq_putc() in wm831x_gpio_dbg_show()
2018-02-12 09:36:06 +01:00
gpio-wm8350.c
gpio-wm8994.c
pinctrl / gpio: Introduce .set_config() callback for GPIO chips
2017-01-26 15:27:37 +01:00
gpio-ws16c48.c
gpio: ws16c48: Implement get_multiple callback
2018-03-26 10:28:19 +02:00
gpio-xgene-sb.c
gpio: xgene-sb: Don't shadow error code of gpiochip_lock_as_irq()
2018-08-06 23:46:55 +02:00
gpio-xgene.c
gpio: xgene: mark PM functions as __maybe_unused
2017-03-06 14:35:22 +01:00
gpio-xilinx.c
gpio: xilinx: Use the right include
2018-08-10 23:19:17 +02:00
gpio-xlp.c
gpio: xlp: Use of_device_get_match_data()
2018-05-16 14:35:24 +02:00
gpio-xra1403.c
gpio: xra1403: Switch to a fixed upper bound for registers
2018-04-27 01:06:21 +02:00
gpio-xtensa.c
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: zynq: Setup chip->base based on alias ID
2018-05-23 11:43:03 +02:00
gpiolib-acpi.c
gpiolib-acpi: Register GpioInt ACPI event handlers from a late_initcall
2018-08-29 13:32:00 +02:00
gpiolib-devprop.c
gpio: fix "gpio-line-names" property retrieval
2017-12-22 15:24:31 +01:00
gpiolib-legacy.c
gpiolib-of.c
gpio: Fix crash due to registration race
2018-08-31 11:30:45 +02:00
gpiolib-sysfs.c
gpio: sysfs: avoid using kstrtol() in 'value' attribute write
2017-12-20 10:34:58 +01:00
gpiolib.c
gpiolib: Avoid calling chip->request() for unused gpios
2018-08-10 23:19:17 +02:00
gpiolib.h
gpiolib: Mark gpio_suffixes array with __maybe_unused
2018-07-13 09:00:08 +02:00
Kconfig
- New Drivers
2018-08-20 15:38:44 -07:00
Makefile
- New Drivers
2018-08-20 15:38:44 -07:00