On Wed, 6 Mar 2024 10:01:53 +0100 Petr Tesařík <petr@xxxxxxxxxxx> wrote: > On Wed, 6 Mar 2024 09:23:53 +0100 > "Linux regression tracking (Thorsten Leemhuis)" <regressions@xxxxxxxxxxxxx> wrote: > > > On 28.02.24 12:03, Petr Tesařík wrote: > > > On Wed, 28 Feb 2024 07:19:56 +0100 > > > "Linux regression tracking (Thorsten Leemhuis)" <regressions@xxxxxxxxxxxxx> wrote: > > > > > >> Net maintainers, chiming in here, as it seems handling this regression > > >> stalled. > > > Indeed, I was too busy with sandbox mode... > > > > Hmm, no reply in the past week to Petr's request for help from someone > > with more knowledge about the field. :-/ > > > > So I guess this means that this won't be fixed for 6.8? Unfortunate, but > > well, that's how it it sometimes. > > For the record, I _can_ reproduce lockdep splats on my device, but they > don't make any sense to me. They seem to confirm Jisheng Zhang's > conclusion that lockdep conflates two locks which should have different > lock-classes. > > So far I have noticed only one issue: the per-cpu syncp's are not > initialized. I'll recompile and see if that's what confuses lockdep. That wasn't the issue. FTR the syncp was in fact initialized, because devm_netdev_alloc_pcpu_stats() is a macro that also takes care of the initialization of the syncp struct field. The problem is u64_stats_init(). Commit 9464ca650008 ("net: make u64_stats_init() a function") changed it to an inline function. But that's wrong. It uses seqcount_init(), which in turn declares: static struct lock_class_key __key; This assumes that each lock gets its own instance. But if u64_stats_init() is a function (albeit an inline one), all calls within the same file end up using the same instance. Eric, would it be OK to revert the above-mentioned commit? Petr T