aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSomnath Kotur <somnath.kotur@broadcom.com>2017-08-30 23:57:31 -0400
committerDoug Ledford <dledford@redhat.com>2017-09-22 13:57:32 -0400
commit027c892924eac22f5ca8db4100bccde423be797d (patch)
tree8ee27827907ef2049d3bfe3d21435c8db475fb97 /drivers
parent55311d055175cada8249d39436371afe790df699 (diff)
bnxt_re: Free up devices in module_exit path
Clean up all devices added to the bnxt_re_dev_list in the module_exit entry point. Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/hw/bnxt_re/main.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/bnxt_re/main.c b/drivers/infiniband/hw/bnxt_re/main.c
index 82d1cbc27aee..00a3b743c156 100644
--- a/drivers/infiniband/hw/bnxt_re/main.c
+++ b/drivers/infiniband/hw/bnxt_re/main.c
@@ -1375,6 +1375,22 @@ err_netdev:
1375 1375
1376static void __exit bnxt_re_mod_exit(void) 1376static void __exit bnxt_re_mod_exit(void)
1377{ 1377{
1378 struct bnxt_re_dev *rdev;
1379 LIST_HEAD(to_be_deleted);
1380
1381 mutex_lock(&bnxt_re_dev_lock);
1382 /* Free all adapter allocated resources */
1383 if (!list_empty(&bnxt_re_dev_list))
1384 list_splice_init(&bnxt_re_dev_list, &to_be_deleted);
1385 mutex_unlock(&bnxt_re_dev_lock);
1386
1387 list_for_each_entry(rdev, &to_be_deleted, list) {
1388 dev_info(rdev_to_dev(rdev), "Unregistering Device");
1389 bnxt_re_dev_stop(rdev);
1390 bnxt_re_ib_unreg(rdev, true);
1391 bnxt_re_remove_one(rdev);
1392 bnxt_re_dev_unreg(rdev);
1393 }
1378 unregister_netdevice_notifier(&bnxt_re_netdev_notifier); 1394 unregister_netdevice_notifier(&bnxt_re_netdev_notifier);
1379 if (bnxt_re_wq) 1395 if (bnxt_re_wq)
1380 destroy_workqueue(bnxt_re_wq); 1396 destroy_workqueue(bnxt_re_wq);