* [PATCH] RDMA/cma: Teach lockdep about the order of rtnl and lock
@ 2020-02-27 20:36 Jason Gunthorpe
2020-03-10 17:27 ` Jason Gunthorpe
0 siblings, 1 reply; 2+ messages in thread
From: Jason Gunthorpe @ 2020-02-27 20:36 UTC (permalink / raw)
To: linux-rdma; +Cc: Bernard Metzler, parav
This lock ordering only happens when bonding is enabled and
a certain bonding related event fires. However, since it can happen this
is a global restriction on lock ordering.
Teach lockdep about the order directly and unconditionally so bugs here
are found quickly.
See https://syzkaller.appspot.com/bug?extid=55de90ab5f44172b0c90
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
---
drivers/infiniband/core/cma.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
This will trigger siw to fail on module load, maybe other drivers too.
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 5165158a7aaa7d..c623d54ac9f944 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -4789,6 +4789,19 @@ static int __init cma_init(void)
{
int ret;
+ /*
+ * There is a rare lock ordering dependency in cma_netdev_callback()
+ * that only happens when bonding is enabled. Teach lockdep that rtnl
+ * must never be nested under lock so it can find these without having
+ * to test with bonding.
+ */
+ if (IS_ENABLED(CONFIG_LOCKDEP)) {
+ rtnl_lock();
+ mutex_lock(&lock);
+ mutex_unlock(&lock);
+ rtnl_unlock();
+ }
+
cma_wq = alloc_ordered_workqueue("rdma_cm", WQ_MEM_RECLAIM);
if (!cma_wq)
return -ENOMEM;
--
2.25.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-03-10 17:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-02-27 20:36 [PATCH] RDMA/cma: Teach lockdep about the order of rtnl and lock Jason Gunthorpe
2020-03-10 17:27 ` Jason Gunthorpe
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.