* netpoll: raspberrypi [4 5] driver locking woes
@ 2025-08-25 5:53 Mike Galbraith
2025-08-25 10:10 ` Mike Galbraith
2025-08-26 9:49 ` Mike Galbraith
0 siblings, 2 replies; 3+ messages in thread
From: Mike Galbraith @ 2025-08-25 5:53 UTC (permalink / raw)
To: lkml; +Cc: Robert Hancock, Doug Berger, Florian Fainelli, Breno Leitao
Greetings,
After meeting some netconsole+ieee80211 woes recently, I decided to
build a lockdep enabled 6.17-rc2 kernel for my rpi[45] and give it a go
on their wired nics just to make sure there were no surprises lurking..
but damn the bad luck, both cute/dinky boxen whimpered.
The pi5 met locking woes due to...
138badbc21a0 net: macb: use NAPI for TX completion path
...injecting spin_lock/unlock_irq() into polling, which inspired
netpoll.c to point a finger directly at the driver. A quick poke
didn't produce instant gratification, but a wedged in revert did.
On the pi4, lockdep muttered about ring->lock in bcmgenet_xmit() and
bcmgenet_tx_poll() - switching to irqsave/restore spinlock variants
there silenced it.
Note to readers: before turning on lockdep, perhaps consider whacking
lockdep_assert_held() instances in gpiolib.c.. ymmv, but here it would
have saved time and naughty language expenditure.
-Mike
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: netpoll: raspberrypi [4 5] driver locking woes
2025-08-25 5:53 netpoll: raspberrypi [4 5] driver locking woes Mike Galbraith
@ 2025-08-25 10:10 ` Mike Galbraith
2025-08-26 9:49 ` Mike Galbraith
1 sibling, 0 replies; 3+ messages in thread
From: Mike Galbraith @ 2025-08-25 10:10 UTC (permalink / raw)
To: lkml; +Cc: Robert Hancock, Doug Berger, Florian Fainelli, Breno Leitao
On Mon, 2025-08-25 at 07:53 +0200, Mike Galbraith wrote:
>
> On the pi4, lockdep muttered about ring->lock in bcmgenet_xmit() and
> bcmgenet_tx_poll() - switching to irqsave/restore spinlock variants
> there silenced it.
The deadlock splat below.
[ 90.529661] =====================================================
[ 90.535817] WARNING: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected
[ 90.542508] 6.17.0-rc2-v8-lockdep #529 Tainted: G C
[ 90.548929] -----------------------------------------------------
[ 90.555092] swapper/0/0 [HC0[0]:SC1[1]:HE0:SE0] is trying to acquire:
[ 90.561605] ffffff8102518d48 (&ring->lock){+.-.}-{3:3}, at: bcmgenet_xmit+0x78/0x860
[ 90.569439]
[ 90.569439] and this task is already holding:
[ 90.575341] ffffffd6357c3298 (target_list_lock){..-.}-{3:3}, at: write_msg+0x60/0x1b0 [netconsole]
[ 90.584408] which would create a new lock dependency:
[ 90.589507] (target_list_lock){..-.}-{3:3} -> (&ring->lock){+.-.}-{3:3}
[ 90.596283]
[ 90.596283] but this new dependency connects a HARDIRQ-irq-safe lock:
[ 90.604305] (&host->lock){-.-.}-{3:3}
[ 90.604322]
[ 90.604322] ... which became HARDIRQ-irq-safe at:
[ 90.614339] lock_acquire+0x1d4/0x368
[ 90.618124] _raw_spin_lock+0x50/0x70
[ 90.621899] bcm2835_mmc_irq+0x28/0x8c8
[ 90.625870] __handle_irq_event_percpu+0x94/0x318
[ 90.630699] handle_irq_event+0x54/0xb8
[ 90.634668] handle_fasteoi_irq+0x12c/0x270
[ 90.638980] handle_irq_desc+0x48/0x68
[ 90.642846] generic_handle_domain_irq+0x24/0x38
[ 90.647603] gic_handle_irq+0x48/0xd8
[ 90.651391] call_on_irq_stack+0x30/0x70
[ 90.655435] do_interrupt_handler+0xdc/0xe8
[ 90.659762] el1_interrupt+0x34/0x68
[ 90.663450] el1h_64_irq_handler+0x18/0x28
[ 90.667674] el1h_64_irq+0x6c/0x70
[ 90.671195] d_alloc_parallel+0x3dc/0x9e8
[ 90.675332] __lookup_slow+0x98/0x188
[ 90.679112] lookup_noperm+0x74/0x88
[ 90.682810] simple_start_creating+0x70/0xe8
[ 90.687209] start_creating+0x7c/0x110
[ 90.691082] __debugfs_create_file+0x54/0x230
[ 90.695577] debugfs_create_file_unsafe+0x28/0x40
[ 90.700413] debugfs_create_u32+0x78/0x90
[ 90.704562] link_and_create_debugfs+0x78/0xf8
[ 90.709127] _regulator_get_common+0x14c/0x398
[ 90.713716] _regulator_get+0x48/0xa0
[ 90.717489] _devm_regulator_get+0x60/0xb0
[ 90.721720] devm_regulator_get_optional+0x1c/0x30
[ 90.726649] mmc_regulator_get_supply+0x48/0x1c8
[ 90.731402] sdhci_setup_host+0x904/0xd30
[ 90.735534] sdhci_add_host+0x20/0x60
[ 90.739325] sdhci_iproc_probe+0xc8/0x108
[ 90.743462] platform_probe+0x64/0xa8
[ 90.747246] really_probe+0xc4/0x2a8
[ 90.750937] __driver_probe_device+0x80/0x140
[ 90.755432] driver_probe_device+0xe0/0x170
[ 90.759739] __device_attach_driver+0xc0/0x148
[ 90.764322] bus_for_each_drv+0x88/0xf0
[ 90.768282] __device_attach_async_helper+0xb8/0xe8
[ 90.773300] async_run_entry_fn+0x3c/0xf0
[ 90.777436] process_one_work+0x20c/0x5e8
[ 90.781573] worker_thread+0x1c8/0x378
[ 90.785448] kthread+0x168/0x230
[ 90.788792] ret_from_fork+0x10/0x20
[ 90.792488]
[ 90.792488] to a HARDIRQ-irq-unsafe lock:
[ 90.798033] (&ring->lock){+.-.}-{3:3}
[ 90.798051]
[ 90.798051] ... which became HARDIRQ-irq-unsafe at:
[ 90.808240] ...
[ 90.808245] lock_acquire+0x1d4/0x368
[ 90.813784] _raw_spin_lock+0x50/0x70
[ 90.817570] bcmgenet_xmit+0x78/0x860
[ 90.821359] dev_hard_start_xmit+0xc0/0x2d0
[ 90.825671] sch_direct_xmit+0x98/0x1e8
[ 90.829633] __dev_queue_xmit+0x5a0/0x13a8
[ 90.833856] packet_xmit+0xcc/0x150
[ 90.837465] packet_sendmsg+0x8e8/0x1328
[ 90.841515] __sock_sendmsg+0x64/0xc0
[ 90.845295] ____sys_sendmsg+0x270/0x2b0
[ 90.849343] ___sys_sendmsg+0x88/0xf0
[ 90.853133] __sys_sendmsg+0x88/0x100
[ 90.856913] __arm64_sys_sendmsg+0x2c/0x40
[ 90.861138] invoke_syscall+0x50/0x120
[ 90.865011] el0_svc_common.constprop.0+0x48/0xf0
[ 90.869851] do_el0_svc+0x24/0x38
[ 90.873290] el0_svc+0x4c/0x178
[ 90.876543] el0t_64_sync_handler+0xa0/0xe8
[ 90.880858] el0t_64_sync+0x198/0x1a0
[ 90.884644]
[ 90.884644] other info that might help us debug this:
[ 90.884644]
[ 90.892742] Chain exists of:
[ 90.892742] &host->lock --> target_list_lock --> &ring->lock
[ 90.892742]
[ 90.903035] Possible interrupt unsafe locking scenario:
[ 90.903035]
[ 90.909901] CPU0 CPU1
[ 90.914482] ---- ----
[ 90.919060] lock(&ring->lock);
[ 90.922311] local_irq_disable();
[ 90.928297] lock(&host->lock);
[ 90.934107] lock(target_list_lock);
[ 90.940356] <Interrupt>
[ 90.943001] lock(&host->lock);
[ 90.946430]
[ 90.946430] *** DEADLOCK ***
[ 90.946430]
[ 90.952419] 12 locks held by swapper/0/0:
[ 90.956468] #0: ffffff8100049948 ((wq_completion)events_bh_highpri){+.-.}-{0:0}, at: process_one_work+0x190/0x5e8
[ 90.966944] #1: ffffffc080003e60 ((work_completion)(&bh->bh)){+.-.}-{0:0}, at: process_one_work+0x1b8/0x5e8
[ 90.976885] #2: ffffff81082f2230 (&dev->event_lock){..-.}-{3:3}, at: input_event+0x50/0xb8
[ 90.985339] #3: ffffffd6a169c3c8 (rcu_read_lock){....}-{1:3}, at: input_pass_values+0x38/0x2e8
[ 90.994141] #4: ffffffd6a169c3c8 (rcu_read_lock){....}-{1:3}, at: __handle_sysrq+0x8/0x308
[ 91.002591] #5: ffffffd6a162a8e8 (console_lock){+.+.}-{0:0}, at: vprintk_default+0x40/0x58
[ 91.011041] #6: ffffffd6a162a940 (console_srcu){....}-{0:0}, at: console_flush_all+0x88/0x4a8
[ 91.019751] #7: ffffffd6a162ab00 (console_owner){..-.}-{0:0}, at: console_lock_spinning_enable+0x50/0x90
[ 91.029437] #8: ffffffd6a162ab28 (printk_legacy_map-wait-type-override){....}-{4:4}, at: console_flush_all+0x2a0/0x4a8
[ 91.040346] #9: ffffffd6357c3298 (target_list_lock){..-.}-{3:3}, at: write_msg+0x60/0x1b0 [netconsole]
[ 91.049854] #10: ffffffd6a169c3c8 (rcu_read_lock){....}-{1:3}, at: netpoll_send_skb+0x4c/0x4b0
[ 91.058655] #11: ffffff8108050118 (_xmit_ETHER#2){+.-.}-{3:3}, at: netpoll_send_skb+0x3e4/0x4b0
[ 91.067545]
[ 91.067545] the dependencies between HARDIRQ-irq-safe lock and the holding lock:
[ 91.076524] -> (&host->lock){-.-.}-{3:3} {
[ 91.080836] IN-HARDIRQ-W at:
[ 91.084181] lock_acquire+0x1d4/0x368
[ 91.089907] _raw_spin_lock+0x50/0x70
[ 91.095623] bcm2835_mmc_irq+0x28/0x8c8
[ 91.101520] __handle_irq_event_percpu+0x94/0x318
[ 91.108301] handle_irq_event+0x54/0xb8
[ 91.114198] handle_fasteoi_irq+0x12c/0x270
[ 91.120450] handle_irq_desc+0x48/0x68
[ 91.126259] generic_handle_domain_irq+0x24/0x38
[ 91.132944] gic_handle_irq+0x48/0xd8
[ 91.138669] call_on_irq_stack+0x30/0x70
[ 91.144655] do_interrupt_handler+0xdc/0xe8
[ 91.150904] el1_interrupt+0x34/0x68
[ 91.156538] el1h_64_irq_handler+0x18/0x28
[ 91.162699] el1h_64_irq+0x6c/0x70
[ 91.168156] d_alloc_parallel+0x3dc/0x9e8
[ 91.174230] __lookup_slow+0x98/0x188
[ 91.179951] lookup_noperm+0x74/0x88
[ 91.185582] simple_start_creating+0x70/0xe8
[ 91.191919] start_creating+0x7c/0x110
[ 91.197739] __debugfs_create_file+0x54/0x230
[ 91.204164] debugfs_create_file_unsafe+0x28/0x40
[ 91.210927] debugfs_create_u32+0x78/0x90
[ 91.217009] link_and_create_debugfs+0x78/0xf8
[ 91.223517] _regulator_get_common+0x14c/0x398
[ 91.230028] _regulator_get+0x48/0xa0
[ 91.235752] _devm_regulator_get+0x60/0xb0
[ 91.241910] devm_regulator_get_optional+0x1c/0x30
[ 91.248773] mmc_regulator_get_supply+0x48/0x1c8
[ 91.255461] sdhci_setup_host+0x904/0xd30
[ 91.261535] sdhci_add_host+0x20/0x60
[ 91.267260] sdhci_iproc_probe+0xc8/0x108
[ 91.273330] platform_probe+0x64/0xa8
[ 91.279058] really_probe+0xc4/0x2a8
[ 91.284684] __driver_probe_device+0x80/0x140
[ 91.291118] driver_probe_device+0xe0/0x170
[ 91.297367] __device_attach_driver+0xc0/0x148
[ 91.303881] bus_for_each_drv+0x88/0xf0
[ 91.309781] __device_attach_async_helper+0xb8/0xe8
[ 91.316734] async_run_entry_fn+0x3c/0xf0
[ 91.322804] process_one_work+0x20c/0x5e8
[ 91.328878] worker_thread+0x1c8/0x378
[ 91.334686] kthread+0x168/0x230
[ 91.339969] ret_from_fork+0x10/0x20
[ 91.345605] IN-SOFTIRQ-W at:
[ 91.348943] lock_acquire+0x1d4/0x368
[ 91.354671] _raw_spin_lock_irqsave+0x60/0x90
[ 91.361097] bcm2835_mmc_tasklet_finish+0x20/0x100
[ 91.367962] tasklet_action_common+0x1a4/0x1c8
[ 91.374476] tasklet_action+0x48/0x60
[ 91.380187] handle_softirqs+0x144/0x528
[ 91.386175] __do_softirq+0x1c/0x28
[ 91.391725] ____do_softirq+0x18/0x30
[ 91.397444] call_on_irq_stack+0x30/0x70
[ 91.403434] do_softirq_own_stack+0x24/0x38
[ 91.409679] __irq_exit_rcu+0x100/0x1f8
[ 91.415580] irq_exit_rcu+0x18/0x58
[ 91.421126] el1_interrupt+0x38/0x68
[ 91.426759] el1h_64_irq_handler+0x18/0x28
[ 91.432921] el1h_64_irq+0x6c/0x70
[ 91.438377] _raw_spin_unlock_irqrestore+0x6c/0xa0
[ 91.445237] bcm2835_mmc_request+0x64/0xc8
[ 91.451405] __mmc_start_request+0x7c/0x158
[ 91.457654] mmc_start_request+0xa0/0xf0
[ 91.463640] mmc_wait_for_req+0x78/0x110
[ 91.469620] mmc_wait_for_cmd+0x6c/0xb0
[ 91.475522] sdio_reset+0x60/0x138
[ 91.480972] mmc_rescan+0x2bc/0x338
[ 91.486518] process_one_work+0x20c/0x5e8
[ 91.492594] worker_thread+0x1c8/0x378
[ 91.498402] kthread+0x168/0x230
[ 91.503683] ret_from_fork+0x10/0x20
[ 91.509316] INITIAL USE at:
[ 91.512586] lock_acquire+0x1d4/0x368
[ 91.518205] _raw_spin_lock_irqsave+0x60/0x90
[ 91.524557] bcm2835_mmc_reset+0x34/0x238
[ 91.530529] bcm2835_mmc_probe+0x1a0/0x730
[ 91.536616] platform_probe+0x64/0xa8
[ 91.542248] really_probe+0xc4/0x2a8
[ 91.547794] __driver_probe_device+0x80/0x140
[ 91.554131] driver_probe_device+0xe0/0x170
[ 91.560293] __device_attach_driver+0xc0/0x148
[ 91.566719] bus_for_each_drv+0x88/0xf0
[ 91.572514] __device_attach+0xa4/0x198
[ 91.578336] device_initial_probe+0x1c/0x30
[ 91.584498] bus_probe_device+0xb4/0xc0
[ 91.590308] deferred_probe_work_func+0x90/0xd8
[ 91.596822] process_one_work+0x20c/0x5e8
[ 91.602793] worker_thread+0x1c8/0x378
[ 91.608528] kthread+0x168/0x230
[ 91.613721] ret_from_fork+0x10/0x20
[ 91.619253] }
[ 91.621101] ... key at: [<ffffffd6a234d8d8>] __key.2+0x0/0x10
[ 91.627629] -> (console_owner){..-.}-{0:0} {
[ 91.632029] IN-SOFTIRQ-W at:
[ 91.635272] lock_acquire+0x1d4/0x368
[ 91.640831] console_lock_spinning_enable+0x74/0x90
[ 91.647609] console_flush_all+0x2ac/0x4a8
[ 91.653594] console_unlock+0x84/0x188
[ 91.659228] vprintk_emit+0x24c/0x450
[ 91.664772] vprintk_default+0x40/0x58
[ 91.670406] vprintk+0x3c/0x80
[ 91.675335] _printk+0x64/0x98
[ 91.680264] __handle_sysrq+0x1ec/0x308
[ 91.685985] sysrq_filter+0xcc/0x518
[ 91.691442] input_handle_events_filter+0x58/0xc0
[ 91.698030] input_pass_values+0x1fc/0x2e8
[ 91.704029] input_handle_event+0x450/0x558
[ 91.710090] input_event+0x6c/0xb8
[ 91.715384] hidinput_report_event+0x4c/0x78
[ 91.721545] hid_report_raw_event+0xb4/0x418
[ 91.727707] hid_input_report+0x138/0x1a0
[ 91.733604] hid_irq_in+0x180/0x308
[ 91.738959] __usb_hcd_giveback_urb+0x98/0x160
[ 91.745310] usb_giveback_urb_bh+0xb0/0x150
[ 91.751371] process_one_work+0x20c/0x5e8
[ 91.757281] bh_worker+0x1b0/0x218
[ 91.762563] workqueue_softirq_action+0x80/0x98
[ 91.768988] tasklet_hi_action+0x20/0x60
[ 91.774784] handle_softirqs+0x144/0x528
[ 91.780607] __do_softirq+0x1c/0x28
[ 91.785976] ____do_softirq+0x18/0x30
[ 91.791522] call_on_irq_stack+0x30/0x70
[ 91.797331] do_softirq_own_stack+0x24/0x38
[ 91.803404] __irq_exit_rcu+0x100/0x1f8
[ 91.809113] irq_exit_rcu+0x18/0x58
[ 91.814494] el1_interrupt+0x38/0x68
[ 91.819951] el1h_64_irq_handler+0x18/0x28
[ 91.825938] el1h_64_irq+0x6c/0x70
[ 91.831219] default_idle_call+0x84/0x140
[ 91.837104] do_idle+0x22c/0x298
[ 91.842208] cpu_startup_entry+0x3c/0x50
[ 91.848030] rest_init+0x108/0x1a0
[ 91.853312] start_kernel+0x760/0x8c8
[ 91.858856] __primary_switched+0x88/0x98
[ 91.864742] INITIAL USE at:
[ 91.867923] lock_acquire+0x1d4/0x368
[ 91.873368] console_lock_spinning_enable+0x74/0x90
[ 91.880063] console_flush_all+0x2ac/0x4a8
[ 91.885955] console_unlock+0x84/0x188
[ 91.891506] vprintk_emit+0x24c/0x450
[ 91.896963] vprintk_default+0x40/0x58
[ 91.902508] vprintk+0x3c/0x80
[ 91.907349] _printk+0x64/0x98
[ 91.912191] register_console+0x3a8/0x4e0
[ 91.918000] con_init+0x1c8/0x270
[ 91.923106] console_init+0x98/0x2a0
[ 91.928474] start_kernel+0x4e8/0x8c8
[ 91.933931] __primary_switched+0x88/0x98
[ 91.939741] }
[ 91.941495] ... key at: [<ffffffd6a162ab00>] console_owner_dep_map+0x0/0x28
[ 91.949158] ... acquired at:
[ 91.952233] console_lock_spinning_enable+0x74/0x90
[ 91.957345] console_flush_all+0x2ac/0x4a8
[ 91.961664] console_unlock+0x84/0x188
[ 91.965625] vprintk_emit+0x24c/0x450
[ 91.969485] vprintk_default+0x40/0x58
[ 91.973447] vprintk+0x3c/0x80
[ 91.976703] _printk+0x64/0x98
[ 91.979964] bcm2835_mmc_send_command+0x944/0xa08
[ 91.984894] bcm2835_mmc_request+0x58/0xc8
[ 91.989207] __mmc_start_request+0x7c/0x158
[ 91.993603] mmc_start_request+0xa0/0xf0
[ 91.997745] mmc_wait_for_req+0x78/0x110
[ 92.001876] mmc_wait_for_cmd+0x6c/0xb0
[ 92.005931] sdio_reset+0x60/0x138
[ 92.009547] mmc_rescan+0x2bc/0x338
[ 92.013231] process_one_work+0x20c/0x5e8
[ 92.017461] worker_thread+0x1c8/0x378
[ 92.021421] kthread+0x168/0x230
[ 92.024855] ret_from_fork+0x10/0x20
[ 92.028640]
[ 92.030136] -> (target_list_lock){..-.}-{3:3} {
[ 92.034720] IN-SOFTIRQ-W at:
[ 92.037882] lock_acquire+0x1d4/0x368
[ 92.043251] _raw_spin_lock_irqsave+0x60/0x90
[ 92.049324] write_msg+0x60/0x1b0 [netconsole]
[ 92.055486] console_flush_all+0x2e4/0x4a8
[ 92.061296] console_unlock+0x84/0x188
[ 92.066753] vprintk_emit+0x24c/0x450
[ 92.072122] vprintk_default+0x40/0x58
[ 92.077579] vprintk+0x3c/0x80
[ 92.082332] _printk+0x64/0x98
[ 92.087091] __handle_sysrq+0x1ec/0x308
[ 92.092636] sysrq_filter+0xcc/0x518
[ 92.097911] input_handle_events_filter+0x58/0xc0
[ 92.104337] input_pass_values+0x1fc/0x2e8
[ 92.110152] input_handle_event+0x450/0x558
[ 92.116044] input_event+0x6c/0xb8
[ 92.121144] hidinput_report_event+0x4c/0x78
[ 92.127129] hid_report_raw_event+0xb4/0x418
[ 92.133120] hid_input_report+0x138/0x1a0
[ 92.138835] hid_irq_in+0x180/0x308
[ 92.144034] __usb_hcd_giveback_urb+0x98/0x160
[ 92.150189] usb_giveback_urb_bh+0xb0/0x150
[ 92.156093] process_one_work+0x20c/0x5e8
[ 92.161815] bh_worker+0x1b0/0x218
[ 92.166919] workqueue_softirq_action+0x80/0x98
[ 92.173168] tasklet_hi_action+0x20/0x60
[ 92.178802] handle_softirqs+0x144/0x528
[ 92.184435] __do_softirq+0x1c/0x28
[ 92.189629] ____do_softirq+0x18/0x30
[ 92.194993] call_on_irq_stack+0x30/0x70
[ 92.200630] do_softirq_own_stack+0x24/0x38
[ 92.206529] __irq_exit_rcu+0x100/0x1f8
[ 92.212074] irq_exit_rcu+0x18/0x58
[ 92.217267] el1_interrupt+0x38/0x68
[ 92.222548] el1h_64_irq_handler+0x18/0x28
[ 92.228357] el1h_64_irq+0x6c/0x70
[ 92.233462] default_idle_call+0x84/0x140
[ 92.239184] do_idle+0x22c/0x298
[ 92.244112] cpu_startup_entry+0x3c/0x50
[ 92.249746] rest_init+0x108/0x1a0
[ 92.254852] start_kernel+0x760/0x8c8
[ 92.260221] __primary_switched+0x88/0x98
[ 92.265942] INITIAL USE at:
[ 92.269022] lock_acquire+0x1d4/0x368
[ 92.274303] _raw_spin_lock_irqsave+0x60/0x90
[ 92.280289] make_netconsole_target+0xe4/0x1d0 [netconsole]
[ 92.287507] configfs_mkdir+0x184/0x4c0
[ 92.292964] vfs_mkdir+0x1a8/0x280
[ 92.297981] do_mkdirat+0x140/0x180
[ 92.303086] __arm64_sys_mkdirat+0x38/0x58
[ 92.308807] invoke_syscall+0x50/0x120
[ 92.314173] el0_svc_common.constprop.0+0x48/0xf0
[ 92.320514] do_el0_svc+0x24/0x38
[ 92.325444] el0_svc+0x4c/0x178
[ 92.330195] el0t_64_sync_handler+0xa0/0xe8
[ 92.336005] el0t_64_sync+0x198/0x1a0
[ 92.341282] }
[ 92.342961] ... key at: [<ffffffd6357c3298>] target_list_lock+0x18/0xffffffffffffed80 [netconsole]
[ 92.352553] ... acquired at:
[ 92.355542] _raw_spin_lock_irqsave+0x60/0x90
[ 92.360123] write_msg+0x60/0x1b0 [netconsole]
[ 92.364789] console_flush_all+0x2e4/0x4a8
[ 92.369099] console_unlock+0x84/0x188
[ 92.373062] vprintk_emit+0x24c/0x450
[ 92.376932] vprintk_default+0x40/0x58
[ 92.380894] vprintk+0x3c/0x80
[ 92.384150] _printk+0x64/0x98
[ 92.387407] __handle_sysrq+0x1ec/0x308
[ 92.391458] sysrq_filter+0xcc/0x518
[ 92.395242] input_handle_events_filter+0x58/0xc0
[ 92.400172] input_pass_values+0x1fc/0x2e8
[ 92.404486] input_handle_event+0x450/0x558
[ 92.408885] input_event+0x6c/0xb8
[ 92.412495] hidinput_report_event+0x4c/0x78
[ 92.416984] hid_report_raw_event+0xb4/0x418
[ 92.421471] hid_input_report+0x138/0x1a0
[ 92.425697] hid_irq_in+0x180/0x308
[ 92.429394] __usb_hcd_giveback_urb+0x98/0x160
[ 92.434059] usb_giveback_urb_bh+0xb0/0x150
[ 92.438461] process_one_work+0x20c/0x5e8
[ 92.442687] bh_worker+0x1b0/0x218
[ 92.446294] workqueue_softirq_action+0x80/0x98
[ 92.451050] tasklet_hi_action+0x20/0x60
[ 92.455185] handle_softirqs+0x144/0x528
[ 92.459322] __do_softirq+0x1c/0x28
[ 92.463020] ____do_softirq+0x18/0x30
[ 92.466892] call_on_irq_stack+0x30/0x70
[ 92.471030] do_softirq_own_stack+0x24/0x38
[ 92.475429] __irq_exit_rcu+0x100/0x1f8
[ 92.479478] irq_exit_rcu+0x18/0x58
[ 92.483177] el1_interrupt+0x38/0x68
[ 92.486960] el1h_64_irq_handler+0x18/0x28
[ 92.491273] el1h_64_irq+0x6c/0x70
[ 92.494882] default_idle_call+0x84/0x140
[ 92.499107] do_idle+0x22c/0x298
[ 92.502541] cpu_startup_entry+0x3c/0x50
[ 92.506677] rest_init+0x108/0x1a0
[ 92.510287] start_kernel+0x760/0x8c8
[ 92.514160] __primary_switched+0x88/0x98
[ 92.518383]
[ 92.519881]
[ 92.519881] the dependencies between the lock to be acquired
[ 92.519887] and HARDIRQ-irq-unsafe lock:
[ 92.531155] -> (&ring->lock){+.-.}-{3:3} {
[ 92.535283] HARDIRQ-ON-W at:
[ 92.538452] lock_acquire+0x1d4/0x368
[ 92.543821] _raw_spin_lock+0x50/0x70
[ 92.549190] bcmgenet_xmit+0x78/0x860
[ 92.554559] dev_hard_start_xmit+0xc0/0x2d0
[ 92.560458] sch_direct_xmit+0x98/0x1e8
[ 92.566001] __dev_queue_xmit+0x5a0/0x13a8
[ 92.571813] packet_xmit+0xcc/0x150
[ 92.577004] packet_sendmsg+0x8e8/0x1328
[ 92.582637] __sock_sendmsg+0x64/0xc0
[ 92.588006] ____sys_sendmsg+0x270/0x2b0
[ 92.593640] ___sys_sendmsg+0x88/0xf0
[ 92.599009] __sys_sendmsg+0x88/0x100
[ 92.604380] __arm64_sys_sendmsg+0x2c/0x40
[ 92.610188] invoke_syscall+0x50/0x120
[ 92.615644] el0_svc_common.constprop.0+0x48/0xf0
[ 92.622072] do_el0_svc+0x24/0x38
[ 92.627088] el0_svc+0x4c/0x178
[ 92.631929] el0t_64_sync_handler+0xa0/0xe8
[ 92.637827] el0t_64_sync+0x198/0x1a0
[ 92.643195] IN-SOFTIRQ-W at:
[ 92.646364] lock_acquire+0x1d4/0x368
[ 92.651733] _raw_spin_lock+0x50/0x70
[ 92.657104] bcmgenet_tx_poll+0x30/0xe8
[ 92.662647] __napi_poll.constprop.0+0x44/0x268
[ 92.668898] net_rx_action+0x320/0x390
[ 92.674355] handle_softirqs+0x144/0x528
[ 92.679987] __do_softirq+0x1c/0x28
[ 92.685178] ____do_softirq+0x18/0x30
[ 92.690549] call_on_irq_stack+0x30/0x70
[ 92.696183] do_softirq_own_stack+0x24/0x38
[ 92.702079] __irq_exit_rcu+0x100/0x1f8
[ 92.707625] irq_exit_rcu+0x18/0x58
[ 92.712818] el0_interrupt+0x60/0x138
[ 92.718195] __el0_irq_handler_common+0x18/0x28
[ 92.724438] el0t_64_irq_handler+0x10/0x20
[ 92.730254] el0t_64_irq+0x198/0x1a0
[ 92.735529] INITIAL USE at:
[ 92.738608] lock_acquire+0x1d4/0x368
[ 92.743890] _raw_spin_lock+0x50/0x70
[ 92.749171] bcmgenet_xmit+0x78/0x860
[ 92.754452] dev_hard_start_xmit+0xc0/0x2d0
[ 92.760262] sch_direct_xmit+0x98/0x1e8
[ 92.765720] __dev_queue_xmit+0x5a0/0x13a8
[ 92.771440] packet_xmit+0xcc/0x150
[ 92.776552] packet_sendmsg+0x8e8/0x1328
[ 92.782091] __sock_sendmsg+0x64/0xc0
[ 92.787374] ____sys_sendmsg+0x270/0x2b0
[ 92.792918] ___sys_sendmsg+0x88/0xf0
[ 92.798198] __sys_sendmsg+0x88/0x100
[ 92.803479] __arm64_sys_sendmsg+0x2c/0x40
[ 92.809201] invoke_syscall+0x50/0x120
[ 92.814570] el0_svc_common.constprop.0+0x48/0xf0
[ 92.820908] do_el0_svc+0x24/0x38
[ 92.825837] el0_svc+0x4c/0x178
[ 92.830591] el0t_64_sync_handler+0xa0/0xe8
[ 92.836399] el0t_64_sync+0x198/0x1a0
[ 92.841681] }
[ 92.843353] ... key at: [<ffffffd6a2347b30>] __key.6+0x0/0x10
[ 92.849690] ... acquired at:
[ 92.852685] lock_acquire+0x1d4/0x368
[ 92.856555] _raw_spin_lock+0x50/0x70
[ 92.860428] bcmgenet_xmit+0x78/0x860
[ 92.864301] netpoll_start_xmit+0x118/0x1b0
[ 92.868702] netpoll_send_skb+0x3a8/0x4b0
[ 92.872928] netpoll_send_udp+0x2ac/0x418
[ 92.877153] write_msg+0x124/0x1b0 [netconsole]
[ 92.881907] console_flush_all+0x2e4/0x4a8
[ 92.886220] console_unlock+0x84/0x188
[ 92.890181] vprintk_emit+0x24c/0x450
[ 92.894052] vprintk_default+0x40/0x58
[ 92.898013] vprintk+0x3c/0x80
[ 92.901270] _printk+0x64/0x98
[ 92.904527] __handle_sysrq+0x1ec/0x308
[ 92.908576] sysrq_filter+0xcc/0x518
[ 92.912363] input_handle_events_filter+0x58/0xc0
[ 92.917289] input_pass_values+0x1fc/0x2e8
[ 92.921604] input_handle_event+0x450/0x558
[ 92.926003] input_event+0x6c/0xb8
[ 92.929612] hidinput_report_event+0x4c/0x78
[ 92.934103] hid_report_raw_event+0xb4/0x418
[ 92.938592] hid_input_report+0x138/0x1a0
[ 92.942816] hid_irq_in+0x180/0x308
[ 92.946513] __usb_hcd_giveback_urb+0x98/0x160
[ 92.951179] usb_giveback_urb_bh+0xb0/0x150
[ 92.955580] process_one_work+0x20c/0x5e8
[ 92.959803] bh_worker+0x1b0/0x218
[ 92.963413] workqueue_softirq_action+0x80/0x98
[ 92.968166] tasklet_hi_action+0x20/0x60
[ 92.972304] handle_softirqs+0x144/0x528
[ 92.976438] __do_softirq+0x1c/0x28
[ 92.980142] ____do_softirq+0x18/0x30
[ 92.984008] call_on_irq_stack+0x30/0x70
[ 92.988145] do_softirq_own_stack+0x24/0x38
[ 92.992547] __irq_exit_rcu+0x100/0x1f8
[ 92.996595] irq_exit_rcu+0x18/0x58
[ 93.000293] el1_interrupt+0x38/0x68
[ 93.004077] el1h_64_irq_handler+0x18/0x28
[ 93.008390] el1h_64_irq+0x6c/0x70
[ 93.012005] default_idle_call+0x84/0x140
[ 93.016230] do_idle+0x22c/0x298
[ 93.019657] cpu_startup_entry+0x3c/0x50
[ 93.023794] rest_init+0x108/0x1a0
[ 93.027403] start_kernel+0x760/0x8c8
[ 93.031274] __primary_switched+0x88/0x98
[ 93.035500]
[ 93.036995]
[ 93.036995] stack backtrace:
[ 93.041406] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Tainted: G C 6.17.0-rc2-v8-lockdep #529 PREEMPTLAZY
[ 93.052226] Tainted: [C]=CRAP
[ 93.055218] Hardware name: Raspberry Pi 4 Model B Rev 1.4 (DT)
[ 93.061114] Call trace:
[ 93.063580] show_stack+0x20/0x38 (C)
[ 93.067276] dump_stack_lvl+0x90/0xd0
[ 93.070973] dump_stack+0x18/0x28
[ 93.074317] check_irq_usage+0x720/0x9e8
[ 93.078277] __lock_acquire+0x1388/0x1fa0
[ 93.082327] lock_acquire+0x1d4/0x368
[ 93.086023] _raw_spin_lock+0x50/0x70
[ 93.089720] bcmgenet_xmit+0x78/0x860
[ 93.093418] netpoll_start_xmit+0x118/0x1b0
[ 93.097642] netpoll_send_skb+0x3a8/0x4b0
[ 93.101691] netpoll_send_udp+0x2ac/0x418
[ 93.105741] write_msg+0x124/0x1b0 [netconsole]
[ 93.110320] console_flush_all+0x2e4/0x4a8
[ 93.114455] console_unlock+0x84/0x188
[ 93.118240] vprintk_emit+0x24c/0x450
[ 93.121935] vprintk_default+0x40/0x58
[ 93.125723] vprintk+0x3c/0x80
[ 93.128802] _printk+0x64/0x98
[ 93.131882] __handle_sysrq+0x1ec/0x308
[ 93.135756] sysrq_filter+0xcc/0x518
[ 93.139363] input_handle_events_filter+0x58/0xc0
[ 93.144118] input_pass_values+0x1fc/0x2e8
[ 93.148255] input_handle_event+0x450/0x558
[ 93.152478] input_event+0x6c/0xb8
[ 93.155912] hidinput_report_event+0x4c/0x78
[ 93.160225] hid_report_raw_event+0xb4/0x418
[ 93.164539] hid_input_report+0x138/0x1a0
[ 93.168586] hid_irq_in+0x180/0x308
[ 93.172107] __usb_hcd_giveback_urb+0x98/0x160
[ 93.176596] usb_giveback_urb_bh+0xb0/0x150
[ 93.180822] process_one_work+0x20c/0x5e8
[ 93.184870] bh_worker+0x1b0/0x218
[ 93.188303] workqueue_softirq_action+0x80/0x98
[ 93.192881] tasklet_hi_action+0x20/0x60
[ 93.196841] handle_softirqs+0x144/0x528
[ 93.200808] __do_softirq+0x1c/0x28
[ 93.204325] ____do_softirq+0x18/0x30
[ 93.208019] call_on_irq_stack+0x30/0x70
[ 93.211983] do_softirq_own_stack+0x24/0x38
[ 93.216205] __irq_exit_rcu+0x100/0x1f8
[ 93.220078] irq_exit_rcu+0x18/0x58
[ 93.223600] el1_interrupt+0x38/0x68
[ 93.227208] el1h_64_irq_handler+0x18/0x28
[ 93.231345] el1h_64_irq+0x6c/0x70
[ 93.234778] default_idle_call+0x84/0x140 (P)
[ 93.239179] do_idle+0x22c/0x298
[ 93.242436] cpu_startup_entry+0x3c/0x50
[ 93.246403] rest_init+0x108/0x1a0
[ 93.249830] start_kernel+0x760/0x8c8
[ 93.253525] __primary_switched+0x88/0x98
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: netpoll: raspberrypi [4 5] driver locking woes
2025-08-25 5:53 netpoll: raspberrypi [4 5] driver locking woes Mike Galbraith
2025-08-25 10:10 ` Mike Galbraith
@ 2025-08-26 9:49 ` Mike Galbraith
1 sibling, 0 replies; 3+ messages in thread
From: Mike Galbraith @ 2025-08-26 9:49 UTC (permalink / raw)
To: lkml; +Cc: Robert Hancock, Doug Berger, Florian Fainelli, Breno Leitao
On Mon, 2025-08-25 at 07:53 +0200, Mike Galbraith wrote:
>
> On the pi4, lockdep muttered about ring->lock in bcmgenet_xmit() and
> bcmgenet_tx_poll() - switching to irqsave/restore spinlock variants
> there silenced it.
I went ahead and submitted the pi4 patchlet.
The pi5 gripe fix is equally trivial, but submitting that is pointless
given there's something else amiss in fingered commit. This is all of
the crash info that escapes the box w/wo gripes silenced.
[ 51.688868] sysrq: Trigger a crash
[ 51.688892] Kernel panic - not syncing: sysrq triggered crash
[ 51.698066] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted 6.17.0-rc2-v8-lockdep #533 PREEMPTLAZY
[ 51.707234] Hardware name: Raspberry Pi 5 Model B Rev 1.0 (DT)
[ 51.713085] Call trace:
[ 51.715532] show_stack+0x20/0x38 (C)
[ 51.719206] dump_stack_lvl+0x38/0xd0
[ 51.722878] dump_stack+0x18/0x28
That aspect is a punt and run atm (time.. and dash of laziness:).
-Mike
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-08-26 9:49 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-25 5:53 netpoll: raspberrypi [4 5] driver locking woes Mike Galbraith
2025-08-25 10:10 ` Mike Galbraith
2025-08-26 9:49 ` Mike Galbraith
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®