From: Greg KH <gregkh@linuxfoundation.org>
To: Zhiguo Niu <niuzhiguo84@gmail.com>
Cc: Carlos Llamas <cmllamas@google.com>,
Zhiguo Niu <zhiguo.niu@unisoc.com>,
bvanassche@acm.org, peterz@infradead.org, mingo@redhat.com,
will@kernel.org, longman@redhat.com, boqun.feng@gmail.com,
linux-kernel@vger.kernel.org, ke.wang@unisoc.com,
hongyu.jin@unisoc.com, stable@vger.kernel.org
Subject: Re: [PATCH V3] lockdep: fix deadlock issue between lockdep and rcu
Date: Tue, 6 Feb 2024 10:53:10 +0000 [thread overview]
Message-ID: <2024020613-abrasive-splashed-6fe3@gregkh> (raw)
In-Reply-To: <CAHJ8P3L8A4uUwDuD5WQkDGdsOB6jWBdPFzR98mCiAh-0LtM91A@mail.gmail.com>
On Tue, Feb 06, 2024 at 06:37:05PM +0800, Zhiguo Niu wrote:
> hi Greg,
>
> On Sat, Feb 3, 2024 at 5:36 AM Greg KH <gregkh@linuxfoundation.org> wrote:
> >
> > On Fri, Feb 02, 2024 at 07:55:48PM +0000, Carlos Llamas wrote:
> > > On Fri, Feb 02, 2024 at 04:14:36PM +0800, Zhiguo Niu wrote:
> > > > There is a deadlock scenario between lockdep and rcu when
> > > > rcu nocb feature is enabled, just as following call stack:
> > > >
> > > > rcuop/x
> > > > -000|queued_spin_lock_slowpath(lock = 0xFFFFFF817F2A8A80, val = ?)
> > > > -001|queued_spin_lock(inline) // try to hold nocb_gp_lock
> > > > -001|do_raw_spin_lock(lock = 0xFFFFFF817F2A8A80)
> > > > -002|__raw_spin_lock_irqsave(inline)
> > > > -002|_raw_spin_lock_irqsave(lock = 0xFFFFFF817F2A8A80)
> > > > -003|wake_nocb_gp_defer(inline)
> > > > -003|__call_rcu_nocb_wake(rdp = 0xFFFFFF817F30B680)
> > > > -004|__call_rcu_common(inline)
> > > > -004|call_rcu(head = 0xFFFFFFC082EECC28, func = ?)
> > > > -005|call_rcu_zapped(inline)
> > > > -005|free_zapped_rcu(ch = ?)// hold graph lock
> > > > -006|rcu_do_batch(rdp = 0xFFFFFF817F245680)
> > > > -007|nocb_cb_wait(inline)
> > > > -007|rcu_nocb_cb_kthread(arg = 0xFFFFFF817F245680)
> > > > -008|kthread(_create = 0xFFFFFF80803122C0)
> > > > -009|ret_from_fork(asm)
> > > >
> > > > rcuop/y
> > > > -000|queued_spin_lock_slowpath(lock = 0xFFFFFFC08291BBC8, val = 0)
> > > > -001|queued_spin_lock()
> > > > -001|lockdep_lock()
> > > > -001|graph_lock() // try to hold graph lock
> > > > -002|lookup_chain_cache_add()
> > > > -002|validate_chain()
> > > > -003|lock_acquire
> > > > -004|_raw_spin_lock_irqsave(lock = 0xFFFFFF817F211D80)
> > > > -005|lock_timer_base(inline)
> > > > -006|mod_timer(inline)
> > > > -006|wake_nocb_gp_defer(inline)// hold nocb_gp_lock
> > > > -006|__call_rcu_nocb_wake(rdp = 0xFFFFFF817F2A8680)
> > > > -007|__call_rcu_common(inline)
> > > > -007|call_rcu(head = 0xFFFFFFC0822E0B58, func = ?)
> > > > -008|call_rcu_hurry(inline)
> > > > -008|rcu_sync_call(inline)
> > > > -008|rcu_sync_func(rhp = 0xFFFFFFC0822E0B58)
> > > > -009|rcu_do_batch(rdp = 0xFFFFFF817F266680)
> > > > -010|nocb_cb_wait(inline)
> > > > -010|rcu_nocb_cb_kthread(arg = 0xFFFFFF817F266680)
> > > > -011|kthread(_create = 0xFFFFFF8080363740)
> > > > -012|ret_from_fork(asm)
> > > >
> > > > rcuop/x and rcuop/y are rcu nocb threads with the same nocb gp thread.
> > > > This patch release the graph lock before lockdep call_rcu.
> > > >
> > > > Fixes: a0b0fd53e1e6 ("locking/lockdep: Free lock classes that are no longer in use")
> > > > Cc: <stable@vger.kernel.org>
Oops, I missed this line ^^^
> > > > Cc: Boqun Feng <boqun.feng@gmail.com>
> > > > Cc: Waiman Long <longman@redhat.com>
> > > > Cc: Carlos Llamas <cmllamas@google.com>
> > > > Cc: Bart Van Assche <bvanassche@acm.org>
> > > > Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
> > > > Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
> > > > ---
> > > > changes of v3: correct code comments and add Cc tag.
> > > > changes of v2: update patch according to Boqun's suggestions.
> > > > ---
> > >
> > > It seems v3 should have collected the review tags from Boqun and Waiman.
> > > Also, I'm actually Cc'ing stable here. I hope that is enough.
> > > FWIW, this looks fine to me.
> > >
> > > Reviewed-by: Carlos Llamas <cmllamas@google.com>
> >
> >
> > <formletter>
> >
> > This is not the correct way to submit patches for inclusion in the
> > stable kernel tree. Please read:
> > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> > for how to do this properly.
> >
> > </formletter>
>
> I see that many commits in mainline use Cc: <stable@vger.kernel.org>
> directly without other information,
> and I also find this information from above link: "Note, such tagging
> is unnecessary if the stable team can
> derive the appropriate versions from Fixes: tags."
>
> In addition, this fixed commit "a0b0fd53e1e6 ("locking/lockdep: Free
> lock classes that are no longer in use")"
> was committed in 2019, so I am not very sure which start version
> should be added to stabe tag.
> Do you have any good suggestions?
Nope, you did this right, I missed it in the body of the changelog as
listed above, my apologies for the incorrect response here.
greg k-h
next prev parent reply other threads:[~2024-02-06 10:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-02 8:14 [PATCH V3] lockdep: fix deadlock issue between lockdep and rcu Zhiguo Niu
2024-02-02 19:55 ` Carlos Llamas
2024-02-02 21:35 ` Greg KH
2024-02-06 10:37 ` Zhiguo Niu
2024-02-06 10:53 ` Greg KH [this message]
2024-02-03 1:50 ` Bart Van Assche
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2024020613-abrasive-splashed-6fe3@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=boqun.feng@gmail.com \
--cc=bvanassche@acm.org \
--cc=cmllamas@google.com \
--cc=hongyu.jin@unisoc.com \
--cc=ke.wang@unisoc.com \
--cc=linux-kernel@vger.kernel.org \
--cc=longman@redhat.com \
--cc=mingo@redhat.com \
--cc=niuzhiguo84@gmail.com \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
--cc=will@kernel.org \
--cc=zhiguo.niu@unisoc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.