[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20200507.075804.1424387208635118.davem@davemloft.net>
Date: Thu, 07 May 2020 07:58:04 -0700 (PDT)
From: David Miller <davem@...emloft.net>
To: mst@...hat.com
Cc: linux-kernel@...r.kernel.org, tglx@...utronix.de,
eric.dumazet@...il.com, jasowang@...hat.com,
virtualization@...ts.linux-foundation.org, netdev@...r.kernel.org
Subject: Re: [PATCH v2] virtio_net: fix lockdep warning on 32 bit
From: "Michael S. Tsirkin" <mst@...hat.com>
Date: Thu, 7 May 2020 03:25:56 -0400
> When we fill up a receive VQ, try_fill_recv currently tries to count
> kicks using a 64 bit stats counter. Turns out, on a 32 bit kernel that
> uses a seqcount. sequence counts are "lock" constructs where you need to
> make sure that writers are serialized.
>
> In turn, this means that we mustn't run two try_fill_recv concurrently.
> Which of course we don't. We do run try_fill_recv sometimes from a
> softirq napi context, and sometimes from a fully preemptible context,
> but the later always runs with napi disabled.
>
> However, when it comes to the seqcount, lockdep is trying to enforce the
> rule that the same lock isn't accessed from preemptible and softirq
> context - it doesn't know about napi being enabled/disabled. This causes
> a false-positive warning:
>
> WARNING: inconsistent lock state
> ...
> inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
>
> As a work around, shut down the warning by switching
> to u64_stats_update_begin_irqsave - that works by disabling
> interrupts on 32 bit only, is a NOP on 64 bit.
>
> Reported-by: Thomas Gleixner <tglx@...utronix.de>
> Suggested-by: Eric Dumazet <eric.dumazet@...il.com>
> Signed-off-by: Michael S. Tsirkin <mst@...hat.com>
Applied and queued up for -stable, thanks Michael.
Powered by blists - more mailing lists