drivers/net/dsa/mt7530.c | 246 +++++++++++++++++++++++++++++++-------- drivers/net/dsa/mt7530.h | 42 +++++++ 2 files changed, 239 insertions(+), 49 deletions(-)
This small series modernize MIB handling for MT7530 and also
implement .get_stats64.
It was reported that kernel and Switch MIB desync in scenario where
a packet is forwarded from a port to another. In such case, the
forwarding is offloaded and the kernel is not aware of the
transmitted packet. To handle this, read the counter directly
from Switch registers.
Christian Marangi (6):
net: dsa: mt7530: generalize read port stats logic
net: dsa: mt7530: move pkt size and rx err MIB counter to rmon stats
API
net: dsa: mt7530: move pause MIB counter to eth_ctrl stats API
net: dsa: mt7530: move pkt stats and err MIB counter to eth_mac stats
API
net: dsa: mt7530: move remaining MIB counter to define
net: dsa: mt7530: implement .get_stats64
drivers/net/dsa/mt7530.c | 246 +++++++++++++++++++++++++++++++--------
drivers/net/dsa/mt7530.h | 42 +++++++
2 files changed, 239 insertions(+), 49 deletions(-)
--
2.48.1
Hi Christian, On Thu, Apr 10, 2025 at 06:30:08PM +0200, Christian Marangi wrote: > This small series modernize MIB handling for MT7530 and also > implement .get_stats64. > > It was reported that kernel and Switch MIB desync in scenario where > a packet is forwarded from a port to another. In such case, the > forwarding is offloaded and the kernel is not aware of the > transmitted packet. To handle this, read the counter directly > from Switch registers. > > Christian Marangi (6): > net: dsa: mt7530: generalize read port stats logic > net: dsa: mt7530: move pkt size and rx err MIB counter to rmon stats > API > net: dsa: mt7530: move pause MIB counter to eth_ctrl stats API > net: dsa: mt7530: move pkt stats and err MIB counter to eth_mac stats > API > net: dsa: mt7530: move remaining MIB counter to define > net: dsa: mt7530: implement .get_stats64 After this series being applied I see lockdep warnings every time the interface counters are being read on MT7531 connected via MDIO: [ 234.374708] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:579 [ 234.383200] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 3667, name: ifconfig [ 234.391202] preempt_count: 1, expected: 0 [ 234.395226] INFO: lockdep is turned off. [ 234.399150] CPU: 3 UID: 0 PID: 3667 Comm: ifconfig Tainted: G W O 6.16.0-rc1+ #0 NONE [ 234.399158] Tainted: [W]=WARN, [O]=OOT_MODULE [ 234.399160] Hardware name: Bananapi BPI-R3 (DT) [ 234.399162] Call trace: [ 234.399165] show_stack+0x28/0x78 (C) [ 234.399179] dump_stack_lvl+0x68/0x8c [ 234.399184] dump_stack+0x14/0x1c [ 234.399188] __might_resched+0x138/0x250 [ 234.399197] __might_sleep+0x44/0x80 [ 234.399201] __mutex_lock+0x4c/0x934 [ 234.399209] mutex_lock_nested+0x20/0x28 [ 234.399215] mt7530_get_stats64+0x40/0x2ac [ 234.399222] dsa_user_get_stats64+0x2c/0x40 [ 234.399229] dev_get_stats+0x44/0x1e0 [ 234.399237] dev_seq_printf_stats+0x24/0xe0 [ 234.399244] dev_seq_show+0x14/0x40 [ 234.399248] seq_read_iter+0x368/0x464 [ 234.399257] seq_read+0xd0/0xfc [ 234.399263] proc_reg_read+0xa8/0xf0 [ 234.399268] vfs_read+0x98/0x2b0 [ 234.399275] ksys_read+0x54/0xdc [ 234.399280] __arm64_sys_read+0x18/0x20 [ 234.399286] invoke_syscall.constprop.0+0x4c/0xd0 [ 234.399293] do_el0_svc+0x3c/0xd0 [ 234.399298] el0_svc+0x34/0xa0 [ 234.399303] el0t_64_sync_handler+0x104/0x138 [ 234.399308] el0t_64_sync+0x158/0x15c Note that this only shows with some lock debugging options being set and may not actually be a problem, but I believe it anyway should be fixed somehow. # # Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_LOCK_DEBUGGING_SUPPORT=y CONFIG_PROVE_LOCKING=y CONFIG_PROVE_RAW_LOCK_NESTING=y # CONFIG_LOCK_STAT is not set CONFIG_DEBUG_RT_MUTEXES=y CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y CONFIG_LOCKDEP_BITS=15 CONFIG_LOCKDEP_CHAINS_BITS=16 CONFIG_LOCKDEP_STACK_TRACE_BITS=19 CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 # CONFIG_DEBUG_LOCKDEP is not set CONFIG_DEBUG_ATOMIC_SLEEP=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set # CONFIG_LOCK_TORTURE_TEST is not set # CONFIG_WW_MUTEX_SELFTEST is not set # CONFIG_SCF_TORTURE_TEST is not set # CONFIG_CSD_LOCK_WAIT_DEBUG is not set # end of Lock Debugging (spinlocks, mutexes, etc...) CONFIG_TRACE_IRQFLAGS=y CONFIG_TRACE_IRQFLAGS_NMI=y # CONFIG_DEBUG_IRQFLAGS is not set CONFIG_STACKTRACE=y # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set # CONFIG_DEBUG_KOBJECT is not set Cheers Daniel
> > Hi Christian, > > On Thu, Apr 10, 2025 at 06:30:08PM +0200, Christian Marangi wrote: > > This small series modernize MIB handling for MT7530 and also > > implement .get_stats64. > > > > It was reported that kernel and Switch MIB desync in scenario where > > a packet is forwarded from a port to another. In such case, the > > forwarding is offloaded and the kernel is not aware of the > > transmitted packet. To handle this, read the counter directly > > from Switch registers. > > > > Christian Marangi (6): > > net: dsa: mt7530: generalize read port stats logic > > net: dsa: mt7530: move pkt size and rx err MIB counter to rmon stats > > API > > net: dsa: mt7530: move pause MIB counter to eth_ctrl stats API > > net: dsa: mt7530: move pkt stats and err MIB counter to eth_mac stats > > API > > net: dsa: mt7530: move remaining MIB counter to define > > net: dsa: mt7530: implement .get_stats64 > > After this series being applied I see lockdep warnings every time > the interface counters are being read on MT7531 connected via MDIO: > Thanks for the report, I will try to fix this and post a followup patch for this. Also I assume this is only present for MDIO and MMIO is not affected. > [ 234.374708] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:579 > [ 234.383200] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 3667, name: ifconfig > [ 234.391202] preempt_count: 1, expected: 0 > [ 234.395226] INFO: lockdep is turned off. > [ 234.399150] CPU: 3 UID: 0 PID: 3667 Comm: ifconfig Tainted: G W O 6.16.0-rc1+ #0 NONE > [ 234.399158] Tainted: [W]=WARN, [O]=OOT_MODULE > [ 234.399160] Hardware name: Bananapi BPI-R3 (DT) > [ 234.399162] Call trace: > [ 234.399165] show_stack+0x28/0x78 (C) > [ 234.399179] dump_stack_lvl+0x68/0x8c > [ 234.399184] dump_stack+0x14/0x1c > [ 234.399188] __might_resched+0x138/0x250 > [ 234.399197] __might_sleep+0x44/0x80 > [ 234.399201] __mutex_lock+0x4c/0x934 > [ 234.399209] mutex_lock_nested+0x20/0x28 > [ 234.399215] mt7530_get_stats64+0x40/0x2ac > [ 234.399222] dsa_user_get_stats64+0x2c/0x40 > [ 234.399229] dev_get_stats+0x44/0x1e0 > [ 234.399237] dev_seq_printf_stats+0x24/0xe0 > [ 234.399244] dev_seq_show+0x14/0x40 > [ 234.399248] seq_read_iter+0x368/0x464 > [ 234.399257] seq_read+0xd0/0xfc > [ 234.399263] proc_reg_read+0xa8/0xf0 > [ 234.399268] vfs_read+0x98/0x2b0 > [ 234.399275] ksys_read+0x54/0xdc > [ 234.399280] __arm64_sys_read+0x18/0x20 > [ 234.399286] invoke_syscall.constprop.0+0x4c/0xd0 > [ 234.399293] do_el0_svc+0x3c/0xd0 > [ 234.399298] el0_svc+0x34/0xa0 > [ 234.399303] el0t_64_sync_handler+0x104/0x138 > [ 234.399308] el0t_64_sync+0x158/0x15c > > Note that this only shows with some lock debugging options being set > and may not actually be a problem, but I believe it anyway should be > fixed somehow. > > # > # Lock Debugging (spinlocks, mutexes, etc...) > # > CONFIG_LOCK_DEBUGGING_SUPPORT=y > CONFIG_PROVE_LOCKING=y > CONFIG_PROVE_RAW_LOCK_NESTING=y > # CONFIG_LOCK_STAT is not set > CONFIG_DEBUG_RT_MUTEXES=y > CONFIG_DEBUG_SPINLOCK=y > CONFIG_DEBUG_MUTEXES=y > CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y > CONFIG_DEBUG_RWSEMS=y > CONFIG_DEBUG_LOCK_ALLOC=y > CONFIG_LOCKDEP=y > CONFIG_LOCKDEP_BITS=15 > CONFIG_LOCKDEP_CHAINS_BITS=16 > CONFIG_LOCKDEP_STACK_TRACE_BITS=19 > CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 > CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 > # CONFIG_DEBUG_LOCKDEP is not set > CONFIG_DEBUG_ATOMIC_SLEEP=y > # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set > # CONFIG_LOCK_TORTURE_TEST is not set > # CONFIG_WW_MUTEX_SELFTEST is not set > # CONFIG_SCF_TORTURE_TEST is not set > # CONFIG_CSD_LOCK_WAIT_DEBUG is not set > # end of Lock Debugging (spinlocks, mutexes, etc...) > > CONFIG_TRACE_IRQFLAGS=y > CONFIG_TRACE_IRQFLAGS_NMI=y > # CONFIG_DEBUG_IRQFLAGS is not set > CONFIG_STACKTRACE=y > # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set > # CONFIG_DEBUG_KOBJECT is not set > > > Cheers > > > Daniel
© 2016 - 2025 Red Hat, Inc.