mirror of
https://github.com/torvalds/linux.git
synced 2026-08-05 06:47:51 +02:00
When transmitting a PTP frame which is timestamp using 2 step, the
following warning appears if CONFIG_PROVE_LOCKING is enabled:
=============================
[ BUG: Invalid wait context ]
6.17.0-rc1-00326-ge6160462704e #427 Not tainted
-----------------------------
ptp4l/119 is trying to lock:
c2a44ed4 (&vsc8531->ts_lock){+.+.}-{3:3}, at: vsc85xx_txtstamp+0x50/0xac
other info that might help us debug this:
context-{4:4}
4 locks held by ptp4l/119:
#0: c145f068 (rcu_read_lock_bh){....}-{1:2}, at: __dev_queue_xmit+0x58/0x1440
#1: c29df974 (dev->qdisc_tx_busylock ?: &qdisc_tx_busylock){+...}-{2:2}, at: __dev_queue_xmit+0x5c4/0x1440
#2: c2aaaad0 (_xmit_ETHER#2){+.-.}-{2:2}, at: sch_direct_xmit+0x108/0x350
#3: c2aac170 (&lan966x->tx_lock){+.-.}-{2:2}, at: lan966x_port_xmit+0xd0/0x350
stack backtrace:
CPU: 0 UID: 0 PID: 119 Comm: ptp4l Not tainted 6.17.0-rc1-00326-ge6160462704e #427 NONE
Hardware name: Generic DT based system
Call trace:
unwind_backtrace from show_stack+0x10/0x14
show_stack from dump_stack_lvl+0x7c/0xac
dump_stack_lvl from __lock_acquire+0x8e8/0x29dc
__lock_acquire from lock_acquire+0x108/0x38c
lock_acquire from __mutex_lock+0xb0/0xe78
__mutex_lock from mutex_lock_nested+0x1c/0x24
mutex_lock_nested from vsc85xx_txtstamp+0x50/0xac
vsc85xx_txtstamp from lan966x_fdma_xmit+0xd8/0x3a8
lan966x_fdma_xmit from lan966x_port_xmit+0x1bc/0x350
lan966x_port_xmit from dev_hard_start_xmit+0xc8/0x2c0
dev_hard_start_xmit from sch_direct_xmit+0x8c/0x350
sch_direct_xmit from __dev_queue_xmit+0x680/0x1440
__dev_queue_xmit from packet_sendmsg+0xfa4/0x1568
packet_sendmsg from __sys_sendto+0x110/0x19c
__sys_sendto from sys_send+0x18/0x20
sys_send from ret_fast_syscall+0x0/0x1c
Exception stack(0xf0b05fa8 to 0xf0b05ff0)
5fa0: 00000001 0000000e 0000000e 0004b47a 0000003a 00000000
5fc0: 00000001 0000000e 00000000 00000121 0004af58 00044874 00000000 00000000
5fe0: 00000001 bee9d420 00025a10 b6e75c7c
So, instead of using the ts_lock for tx_queue, use the spinlock that
skb_buff_head has.
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Fixes:
|
||
|---|---|---|
| .. | ||
| aquantia | ||
| mediatek | ||
| mscc | ||
| qcom | ||
| realtek | ||
| adin.c | ||
| adin1100.c | ||
| air_en8811h.c | ||
| amd.c | ||
| as21xxx.c | ||
| ax88796b_rust.rs | ||
| ax88796b.c | ||
| bcm-cygnus.c | ||
| bcm-phy-lib.c | ||
| bcm-phy-lib.h | ||
| bcm-phy-ptp.c | ||
| bcm7xxx.c | ||
| bcm63xx.c | ||
| bcm87xx.c | ||
| bcm54140.c | ||
| bcm84881.c | ||
| broadcom.c | ||
| cicada.c | ||
| cortina.c | ||
| davicom.c | ||
| dp83tc811.c | ||
| dp83td510.c | ||
| dp83tg720.c | ||
| dp83640_reg.h | ||
| dp83640.c | ||
| dp83822.c | ||
| dp83848.c | ||
| dp83867.c | ||
| dp83869.c | ||
| et1011c.c | ||
| fixed_phy.c | ||
| icplus.c | ||
| intel-xway.c | ||
| Kconfig | ||
| linkmode.c | ||
| lxt.c | ||
| Makefile | ||
| marvell-88q2xxx.c | ||
| marvell-88x2222.c | ||
| marvell.c | ||
| marvell10g.c | ||
| mdio_bus_provider.c | ||
| mdio_bus.c | ||
| mdio_device.c | ||
| mdio_devres.c | ||
| mdio-boardinfo.c | ||
| mdio-boardinfo.h | ||
| mdio-open-alliance.h | ||
| meson-gxl.c | ||
| micrel.c | ||
| microchip_rds_ptp.c | ||
| microchip_rds_ptp.h | ||
| microchip_t1.c | ||
| microchip_t1s.c | ||
| microchip.c | ||
| mii_timestamper.c | ||
| motorcomm.c | ||
| mxl-86110.c | ||
| mxl-gpy.c | ||
| national.c | ||
| ncn26000.c | ||
| nxp-c45-tja11xx-macsec.c | ||
| nxp-c45-tja11xx.c | ||
| nxp-c45-tja11xx.h | ||
| nxp-cbtx.c | ||
| nxp-tja11xx.c | ||
| open_alliance_helpers.c | ||
| open_alliance_helpers.h | ||
| phy_caps.c | ||
| phy_device.c | ||
| phy_led_triggers.c | ||
| phy_link_topology.c | ||
| phy_package.c | ||
| phy-c45.c | ||
| phy-caps.h | ||
| phy-core.c | ||
| phy.c | ||
| phylib-internal.h | ||
| phylib.h | ||
| phylink.c | ||
| qsemi.c | ||
| qt2025.rs | ||
| rockchip.c | ||
| sfp-bus.c | ||
| sfp.c | ||
| sfp.h | ||
| smsc.c | ||
| spi_ks8995.c | ||
| ste10Xp.c | ||
| stubs.c | ||
| swphy.c | ||
| swphy.h | ||
| teranetics.c | ||
| uPD60620.c | ||
| vitesse.c | ||
| xilinx_gmii2rgmii.c | ||