On Tue, Jul 30, 2024 at 08:31:04AM +0200, Herve Codina wrote: > The carrier_lock spinlock protects the carrier detection. While it is > hold, framer_get_status() is called witch in turn takes a mutex. > This is not correct and can lead to a deadlock. > > A run with PROVE_LOCKING enabled detected the issue: > [ BUG: Invalid wait context ] > ... > c204ddbc (&framer->mutex){+.+.}-{3:3}, at: framer_get_status+0x40/0x78 > other info that might help us debug this: > context-{4:4} > 2 locks held by ifconfig/146: > #0: c0926a38 (rtnl_mutex){+.+.}-{3:3}, at: devinet_ioctl+0x12c/0x664 > #1: c2006a40 (&qmc_hdlc->carrier_lock){....}-{2:2}, at: > qmc_hdlc_framer_set_carrier+0x30/0x98 > > Avoid the spinlock usage and convert carrier_lock to a mutex. > > Fixes: 54762918ca85 ("net: wan: fsl_qmc_hdlc: Add framer support") > Cc: sta...@vger.kernel.org > Signed-off-by: Herve Codina <herve.cod...@bootlin.com>
Reviewed-by: Simon Horman <ho...@kernel.org>