diff options
| author | Daniel Machon <daniel.machon@microchip.com> | 2026-10-20 10:57:27 +0200 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-10-21 17:22:07 -0700 |
| commit | 9770818b8a92fb5fb77725bd5055f165eee3f52e (patch) | |
| tree | f5ce07edd92a9285e9de9fd61cf2afacd6e56384 /scripts/Makefile.thinlto | |
| parent | a031ec9ff5a2e55867430e74e9b497fe844116ba (diff) | |
| download | linux-9770818b8a92fb5fb77725bd5055f165eee3f52e.tar.gz linux-9770818b8a92fb5fb77725bd5055f165eee3f52e.zip | |
net: lan969x: don't disable hardirqs in fdma tx clear
lan969x_fdma_tx_clear_buf() runs from the NAPI poll and frees the skbs
of completed tx DCBs with napi_consume_skb(), under sparx5->tx_lock.
Before this patch, the lock is taken with spin_lock_irqsave(), so the
skbs are freed with hardirqs disabled. RX skbs are marked for page_pool
recycling, so when such an skb is forwarded back out and its tx
completion frees it here, the free path reaches __page_pool_put_page(),
which warns via lockdep_assert_no_hardirq().
Take tx_lock with a plain spin_lock(), as the only other tx_lock user,
sparx5_port_xmit_impl(), already does. tx_clear_buf() is only called
from softirq context, so disabling hardirqs is not needed.
Found with lockdep enabled (CONFIG_PROVE_LOCKING), which the assert
depends on. Reproduced on lan969x by redirecting received frames out of
another port with tc mirred.
Fixes: d84ad2c0d80c ("net: lan969x: add FDMA implementation")
Signed-off-by: Daniel Machon <daniel.machon@microchip.com>
Link: https://patch.msgid.link/20261020-lan969x-fdma-tx-clear-irq-v1-1-b9f9d1eda317@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
