projects
/
linux.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
3cae580
)
RDMA/bnxt_re: Fix lifetimes in bnxt_re_task
author
Jason Gunthorpe
<jgg@mellanox.com>
Fri, 13 Mar 2020 16:33:26 +0000
(09:33 -0700)
committer
Jason Gunthorpe
<jgg@mellanox.com>
Tue, 17 Mar 2020 23:15:03 +0000
(20:15 -0300)
A work queue cannot just rely on the ib_device not being freed, it must
hold a kref on the memory so that the BNXT_RE_FLAG_IBDEV_REGISTERED check
works.
Fixes:
1ac5a4047975
("RDMA/bnxt_re: Add bnxt_re RoCE driver")
Link:
https://lore.kernel.org/r/1584117207-2664-3-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/bnxt_re/main.c
patch
|
blob
|
history
diff --git
a/drivers/infiniband/hw/bnxt_re/main.c
b/drivers/infiniband/hw/bnxt_re/main.c
index
885127c
..
c494e11
100644
(file)
--- a/
drivers/infiniband/hw/bnxt_re/main.c
+++ b/
drivers/infiniband/hw/bnxt_re/main.c
@@
-1670,6
+1670,7
@@
static void bnxt_re_task(struct work_struct *work)
smp_mb__before_atomic();
atomic_dec(&rdev->sched_count);
exit:
+ put_device(&rdev->ibdev.dev);
kfree(re_work);
}
@@
-1735,6
+1736,7
@@
static int bnxt_re_netdev_event(struct notifier_block *notifier,
/* Allocate for the deferred task */
re_work = kzalloc(sizeof(*re_work), GFP_ATOMIC);
if (re_work) {
+ get_device(&rdev->ibdev.dev);
re_work->rdev = rdev;
re_work->event = event;
re_work->vlan_dev = (real_dev == netdev ?