lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <5879304.DvuYhMxLoT@lukas-hpz440workstation>
Date: Sat, 05 Apr 2025 13:48:25 +0200
From: Lukas Schmid <lukas.schmid@...cube.li>
To: linus.walleij@...aro.org
Cc: linux-gpio@...r.kernel.org, linux-kernel@...r.kernel.org
Subject:
 [BUG] pinctrl_mcp23s08_i2c: mutex used in irq_bus_lock causes 'scheduling
 while atomic' with matrix_keypad

Hi all,

I'm encountering a "BUG: scheduling while atomic" when using the MCP23017 GPIO 
expander with the `matrix_keypad` driver in IRQ mode on Linux v6.12.20

Hardware setup:
- MCP23017 connected via I2C
- 4x4 matrix keypad hooked to MCP23017 GPIOs
- SoC: Allwinner V3s SoC
- Using devicetree-overlay configuration for `microchip,mcp23017` and `gpio-
matrix-keypad`

When I press buttons on the keypad, after some amount of presses I get the 
following error from the Kernel:

[   92.820159] BUG: scheduling while atomic: kworker/0:2/46/0x00000002
[   92.826577] Modules linked in: bluetooth ecdh_generic ecc cfg80211 rfkill 
ipv6 af_packet evdev mcp251xfd can_dev matrix_keypad matrix_keymap 
gpio_pcf857x pinctrl_mcp23s08_i2c pinctrl_mcp23s08 hd44780 hd44780_common 
charlcd sun4i_ss libdes sun4i_codec sun8i_codec_analog sun8i_adda_pr_regmap 
snd_soc_core snd_pcm_dmaengine snd_pcm snd_timer snd soundcore uio_pdrv_genirq 
uio [last unloaded: esp32_sdio(O)]
[   92.862336] CPU: 0 UID: 0 PID: 46 Comm: kworker/0:2 Tainted: G           O       
6.12.20 #1
[   92.862362] Tainted: [O]=OOT_MODULE
[   92.862368] Hardware name: Allwinner sun8i Family
[   92.862378] Workqueue: events matrix_keypad_scan [matrix_keypad]
[   92.862415] Call trace: 
[   92.862429]  unwind_backtrace from show_stack+0x18/0x1c
[   92.862469]  show_stack from dump_stack_lvl+0x68/0x74
[   92.862490]  dump_stack_lvl from __schedule_bug+0x5c/0x70
[   92.862518]  __schedule_bug from __schedule+0xab4/0xc94
[   92.862541]  __schedule from schedule+0x34/0x14c
[   92.862560]  schedule from schedule_preempt_disabled+0x24/0x34
[   92.862580]  schedule_preempt_disabled from __mutex_lock.constprop.
0+0x2e4/0x940
[   92.862605]  __mutex_lock.constprop.0 from mcp23s08_irq_bus_lock+0x20/0x30 
[pinctrl_mcp23s08]
[   92.862650]  mcp23s08_irq_bus_lock [pinctrl_mcp23s08] from 
__irq_get_desc_lock+0x84/0xa8
[   92.862682]  __irq_get_desc_lock from enable_irq+0x38/0xa8
[   92.862710]  enable_irq from matrix_keypad_scan+0x2e0/0x324 [matrix_keypad]
[   92.862738]  matrix_keypad_scan [matrix_keypad] from 
process_one_work+0x160/0x410
[   92.862763]  process_one_work from worker_thread+0x258/0x3f8
[   92.862782]  worker_thread from kthread+0x118/0x134
[   92.862801]  kthread from ret_from_fork+0x14/0x38
[   92.862817] Exception stack(0xc4989fb0 to 0xc4989ff8)
[   92.862829] 9fa0:                                     00000000 00000000 
00000000 00000000
[   92.862840] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000
[   92.862849] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[   93.007968] BUG: workqueue leaked atomic, lock or RCU: kworker/0:2[46]
[   93.007968]      preempt=0xffffffff lock=0->0 RCU=0->0 
workfn=matrix_keypad_scan [matrix_keypad]
[   93.008051] CPU: 0 UID: 0 PID: 46 Comm: kworker/0:2 Tainted: G        W  O       
6.12.20 #1
[   93.008071] Tainted: [W]=WARN, [O]=OOT_MODULE
[   93.008076] Hardware name: Allwinner sun8i Family
[   93.008085] Workqueue: events matrix_keypad_scan [matrix_keypad]
[   93.008108] Call trace: 
[   93.008121]  unwind_backtrace from show_stack+0x18/0x1c
[   93.008158]  show_stack from dump_stack_lvl+0x68/0x74
[   93.008179]  dump_stack_lvl from process_one_work+0x40c/0x410
[   93.008202]  process_one_work from worker_thread+0x258/0x3f8
[   93.008221]  worker_thread from kthread+0x118/0x134
[   93.008240]  kthread from ret_from_fork+0x14/0x38
[   93.008256] Exception stack(0xc4989fb0 to 0xc4989ff8)
[   93.008267] 9fa0:                                     00000000 00000000 
00000000 00000000
[   93.008277] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000
[   93.008286] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000
[   93.008300] BUG: scheduling while atomic: kworker/0:2/46/0x00000000
[   93.115583] Modules linked in: bluetooth ecdh_generic ecc cfg80211 rfkill 
ipv6 af_packet evdev mcp251xfd can_dev matrix_keypad matrix_keymap 
gpio_pcf857x pinctrl_mcp23s08_i2c pinctrl_mcp23s08 hd44780 hd44780_common 
charlcd sun4i_ss libdes sun4i_codec sun8i_codec_analog sun8i_adda_pr_regmap 
snd_soc_core snd_pcm_dmaengine snd_pcm snd_timer snd soundcore uio_pdrv_genirq 
uio [last unloaded: esp32_sdio(O)]
[   93.151453] CPU: 0 UID: 0 PID: 46 Comm: kworker/0:2 Tainted: G        W  O       
6.12.20 #1
[   93.151483] Tainted: [W]=WARN, [O]=OOT_MODULE
[   93.151488] Hardware name: Allwinner sun8i Family
[   93.151496] Workqueue:  0x0 (events)
[   93.151525] Call trace: 
[   93.151537]  unwind_backtrace from show_stack+0x18/0x1c
[   93.151570]  show_stack from dump_stack_lvl+0x68/0x74
[   93.151589]  dump_stack_lvl from __schedule_bug+0x5c/0x70
[   93.151615]  __schedule_bug from __schedule+0xab4/0xc94
[   93.151640]  __schedule from schedule+0x34/0x14c
[   93.151659]  schedule from worker_thread+0x1c8/0x3f8
[   93.151681]  worker_thread from kthread+0x118/0x134
[   93.151698]  kthread from ret_from_fork+0x14/0x38
[   93.151713] Exception stack(0xc4989fb0 to 0xc4989ff8)
[   93.151725] 9fa0:                                     00000000 00000000 
00000000 00000000
[   93.151736] 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 
00000000 00000000
[   93.151746] 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000

Happy to test patches or provide further debugging info.

Best regards,  
Lukas Schmid
Download attachment "signature.asc" of type "application/pgp-signature" (489 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ