mirror of https://github.com/torvalds/linux.git
The gpio_chip settings in this driver say the controller can't sleep
but it actually uses a mutex for synchronization. This triggers the
following BUG():
[ 9.233659] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:281
[ 9.233665] in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 554, name: (udev-worker)
[ 9.233669] preempt_count: 1, expected: 0
[ 9.233673] RCU nest depth: 0, expected: 0
[ 9.233688] Tainted: [W]=WARN
[ 9.233690] Hardware name: Dell Inc. Latitude 7455/0FK7MX, BIOS 2.10.1 05/20/2025
[ 9.233694] Call trace:
[ 9.233696] show_stack+0x24/0x38 (C)
[ 9.233709] dump_stack_lvl+0x40/0x88
[ 9.233716] dump_stack+0x18/0x24
[ 9.233722] __might_resched+0x148/0x160
[ 9.233731] __might_sleep+0x38/0x98
[ 9.233736] mutex_lock+0x30/0xd8
[ 9.233749] lpi_config_set+0x2e8/0x3c8 [pinctrl_lpass_lpi]
[ 9.233757] lpi_gpio_direction_output+0x58/0x90 [pinctrl_lpass_lpi]
[ 9.233761] gpiod_direction_output_raw_commit+0x110/0x428
[ 9.233772] gpiod_direction_output_nonotify+0x234/0x358
[ 9.233779] gpiod_direction_output+0x38/0xd0
[ 9.233786] gpio_shared_proxy_direction_output+0xb8/0x2a8 [gpio_shared_proxy]
[ 9.233792] gpiod_direction_output_raw_commit+0x110/0x428
[ 9.233799] gpiod_direction_output_nonotify+0x234/0x358
[ 9.233806] gpiod_configure_flags+0x2c0/0x580
[ 9.233812] gpiod_find_and_request+0x358/0x4f8
[ 9.233819] gpiod_get_index+0x7c/0x98
[ 9.233826] devm_gpiod_get+0x34/0xb0
[ 9.233829] reset_gpio_probe+0x58/0x128 [reset_gpio]
[ 9.233836] auxiliary_bus_probe+0xb0/0xf0
[ 9.233845] really_probe+0x14c/0x450
[ 9.233853] __driver_probe_device+0xb0/0x188
[ 9.233858] driver_probe_device+0x4c/0x250
[ 9.233863] __driver_attach+0xf8/0x2a0
[ 9.233868] bus_for_each_dev+0xf8/0x158
[ 9.233872] driver_attach+0x30/0x48
[ 9.233876] bus_add_driver+0x158/0x2b8
[ 9.233880] driver_register+0x74/0x118
[ 9.233886] __auxiliary_driver_register+0x94/0xe8
[ 9.233893] init_module+0x34/0xfd0 [reset_gpio]
[ 9.233898] do_one_initcall+0xec/0x300
[ 9.233903] do_init_module+0x64/0x260
[ 9.233910] load_module+0x16c4/0x1900
[ 9.233915] __arm64_sys_finit_module+0x24c/0x378
[ 9.233919] invoke_syscall+0x4c/0xe8
[ 9.233925] el0_svc_common+0x8c/0xf0
[ 9.233929] do_el0_svc+0x28/0x40
[ 9.233934] el0_svc+0x38/0x100
[ 9.233938] el0t_64_sync_handler+0x84/0x130
[ 9.233943] el0t_64_sync+0x17c/0x180
Mark the controller as sleeping.
Fixes:
|
||
|---|---|---|
| .. | ||
| actions | ||
| aspeed | ||
| bcm | ||
| berlin | ||
| cirrus | ||
| cix | ||
| freescale | ||
| intel | ||
| mediatek | ||
| meson | ||
| mvebu | ||
| nomadik | ||
| nuvoton | ||
| nxp | ||
| pxa | ||
| qcom | ||
| realtek | ||
| renesas | ||
| samsung | ||
| sophgo | ||
| spacemit | ||
| spear | ||
| sprd | ||
| starfive | ||
| stm32 | ||
| sunplus | ||
| sunxi | ||
| tegra | ||
| ti | ||
| uniphier | ||
| visconti | ||
| vt8500 | ||
| Kconfig | ||
| Makefile | ||
| core.c | ||
| core.h | ||
| devicetree.c | ||
| devicetree.h | ||
| pinconf-generic.c | ||
| pinconf.c | ||
| pinconf.h | ||
| pinctrl-amd.c | ||
| pinctrl-amd.h | ||
| pinctrl-amdisp.c | ||
| pinctrl-amdisp.h | ||
| pinctrl-apple-gpio.c | ||
| pinctrl-artpec6.c | ||
| pinctrl-as3722.c | ||
| pinctrl-at91-pio4.c | ||
| pinctrl-at91.c | ||
| pinctrl-at91.h | ||
| pinctrl-aw9523.c | ||
| pinctrl-axp209.c | ||
| pinctrl-bm1880.c | ||
| pinctrl-cy8c95x0.c | ||
| pinctrl-da850-pupd.c | ||
| pinctrl-da9062.c | ||
| pinctrl-digicolor.c | ||
| pinctrl-eic7700.c | ||
| pinctrl-ep93xx.c | ||
| pinctrl-equilibrium.c | ||
| pinctrl-equilibrium.h | ||
| pinctrl-eyeq5.c | ||
| pinctrl-falcon.c | ||
| pinctrl-gemini.c | ||
| pinctrl-ingenic.c | ||
| pinctrl-k210.c | ||
| pinctrl-k230.c | ||
| pinctrl-keembay.c | ||
| pinctrl-lantiq.c | ||
| pinctrl-lantiq.h | ||
| pinctrl-loongson2.c | ||
| pinctrl-lpc18xx.c | ||
| pinctrl-max7360.c | ||
| pinctrl-max77620.c | ||
| pinctrl-mcp23s08.c | ||
| pinctrl-mcp23s08.h | ||
| pinctrl-mcp23s08_i2c.c | ||
| pinctrl-mcp23s08_spi.c | ||
| pinctrl-microchip-sgpio.c | ||
| pinctrl-mlxbf3.c | ||
| pinctrl-mpfs-iomux0.c | ||
| pinctrl-ocelot.c | ||
| pinctrl-palmas.c | ||
| pinctrl-pef2256.c | ||
| pinctrl-pic32.c | ||
| pinctrl-pic32.h | ||
| pinctrl-pic64gx-gpio2.c | ||
| pinctrl-pistachio.c | ||
| pinctrl-rk805.c | ||
| pinctrl-rockchip.c | ||
| pinctrl-rockchip.h | ||
| pinctrl-rp1.c | ||
| pinctrl-scmi.c | ||
| pinctrl-single.c | ||
| pinctrl-st.c | ||
| pinctrl-stmfx.c | ||
| pinctrl-sx150x.c | ||
| pinctrl-tb10x.c | ||
| pinctrl-th1520.c | ||
| pinctrl-tps6594.c | ||
| pinctrl-upboard.c | ||
| pinctrl-utils.c | ||
| pinctrl-utils.h | ||
| pinctrl-xway.c | ||
| pinctrl-zynq.c | ||
| pinctrl-zynqmp.c | ||
| pinmux.c | ||
| pinmux.h | ||