mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [BUG] pinctrl_mcp23s08_i2c: mutex used in irq_bus_lock causes 'scheduling while atomic' with matrix_keypad
@ 2025-04-05 11:48 Lukas Schmid
  2025-04-15  8:13 ` Linus Walleij
  0 siblings, 1 reply; 2+ messages in thread
From: Lukas Schmid @ 2025-04-05 11:48 UTC (permalink / raw)
  To: linus.walleij; +Cc: linux-gpio, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 5347 bytes --]

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

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [BUG] pinctrl_mcp23s08_i2c: mutex used in irq_bus_lock causes 'scheduling while atomic' with matrix_keypad
  2025-04-05 11:48 [BUG] pinctrl_mcp23s08_i2c: mutex used in irq_bus_lock causes 'scheduling while atomic' with matrix_keypad Lukas Schmid
@ 2025-04-15  8:13 ` Linus Walleij
  0 siblings, 0 replies; 2+ messages in thread
From: Linus Walleij @ 2025-04-15  8:13 UTC (permalink / raw)
  To: Lukas Schmid; +Cc: linux-gpio, linux-kernel

On Sat, Apr 5, 2025 at 1:48 PM Lukas Schmid <lukas.schmid@netcube.li> wrote:

> 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

Apply this commit from the upstream kernel:

commit a37eecb705f33726f1fb7cd2a67e514a15dfe693 (tag: pinctrl-v6.13-2)
Author: Evgenii Shatokhin <e.shatokhin@yadro.com>
Date:   Mon Dec 9 10:46:59 2024 +0300

    pinctrl: mcp23s08: Fix sleeping in atomic context due to regmap locking

    If a device uses MCP23xxx IO expander to receive IRQs, the following
    bug can happen:

      BUG: sleeping function called from invalid context
        at kernel/locking/mutex.c:283
      in_atomic(): 1, irqs_disabled(): 1, non_block: 0, ...
      preempt_count: 1, expected: 0
      ...
      Call Trace:
      ...
      __might_resched+0x104/0x10e
      __might_sleep+0x3e/0x62
      mutex_lock+0x20/0x4c
      regmap_lock_mutex+0x10/0x18
      regmap_update_bits_base+0x2c/0x66
      mcp23s08_irq_set_type+0x1ae/0x1d6
      __irq_set_trigger+0x56/0x172
      __setup_irq+0x1e6/0x646
      request_threaded_irq+0xb6/0x160
      ...


Yours,
Linus Walleij

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-04-15  8:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-05 11:48 [BUG] pinctrl_mcp23s08_i2c: mutex used in irq_bus_lock causes 'scheduling while atomic' with matrix_keypad Lukas Schmid
2025-04-15  8:13 ` Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®