Re: [BUG] AB-BA deadlock between net and led-trigger module

From: Andrew Lunn

Date: Sat Feb 21 2026 - 14:42:35 EST


On Sat, Feb 21, 2026 at 06:01:46PM +0800, Shiji Yang wrote:
> The OpenWrt community reports that sometimes devices fail to start[1]
> on 5.15 kernel. After further tracking, this is caused by a AB-BA
> deadlock which can be reproduced in at least 5.15, 6.6, 6.12 and latest
> 6.18 LTS kenrel.

Thanks for the bug report. I will take a look at this.

I was initially assuming this was the netdev trigger causing the
deadlock. However:

> Stack tracing on 6.12 kernel:
> ```
> Task1 "netifd" is used to start/restart the network:
>
> [ 1361.967916] task:netifd state:D stack:0 pid:4743 tgid:4743 ppid:1 flags:0x08100000
> [ 1361.977269] Stack : 00000001 00000001 00000006 800bf464 817a0cb0 800b67ac 00000001 83261b20
> [ 1361.985668] 83261a54 00000000 83261aac 000007ef 00000000 80c04d74 00000000 00000002
> [ 1361.994138] 83aba760 80ce0000 83261af8 00000002 83261af8 80cd0000 00000002 80d8058c
> [ 1362.002582] 80cc0000 809bae70 00000002 80d80000 80cd0000 80d80568 00000001 00000000
> [ 1362.011033] 809baecc 83261af8 00000002 80d80560 80d80568 809bb11c 809c09c8 806614d0
> [ 1362.019484] ...
> [ 1362.021942] Call Trace:
> [ 1362.024380] [<809ba6fc>] __schedule+0x504/0xc28
> [ 1362.028974] [<809bae70>] schedule+0x50/0x190
> [ 1362.033251] [<809bb11c>] schedule_preempt_disabled+0x1c/0x34
> [ 1362.038958] [<809c0b94>] rwsem_down_write_slowpath+0x240/0x7f8
> [ 1362.044789] [<809c11c0>] down_write+0x74/0x90
> [ 1362.049207] [<8054e4b8>] led_trigger_register+0x5c/0x1fc <-- Trying to get lock "triggers_list_lock" via down_write(&triggers_list_lock);
> [ 1362.054536] [<80662830>] phy_led_triggers_register+0xd0/0x234

This is the code in drivers/net/phy/phy_led_triggers.c.

> Task2 "led" is used to set the led-trigger "netdev" for a GPIO LED:

If you are using the led-trigger netdev, do you even need
phy_led_triggers.c? As a workaround, could you disable
CONFIG_LED_TRIGGER_PHY?

I'm not sure familiar with phy_led_triggers.c, so i don't have a quick
real fix.

Andrew