diff options
author | Somnath Kotur <somnath.kotur@broadcom.com> | 2017-08-31 09:27:31 +0530 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2017-09-22 13:57:32 -0400 |
commit | 027c892924eac22f5ca8db4100bccde423be797d (patch) | |
tree | 8ee27827907ef2049d3bfe3d21435c8db475fb97 | |
parent | 55311d055175cada8249d39436371afe790df699 (diff) | |
download | lwn-027c892924eac22f5ca8db4100bccde423be797d.tar.gz lwn-027c892924eac22f5ca8db4100bccde423be797d.zip |
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>
-rw-r--r-- | drivers/infiniband/hw/bnxt_re/main.c | 16 |
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: static void __exit bnxt_re_mod_exit(void) { + struct bnxt_re_dev *rdev; + LIST_HEAD(to_be_deleted); + + mutex_lock(&bnxt_re_dev_lock); + /* Free all adapter allocated resources */ + if (!list_empty(&bnxt_re_dev_list)) + list_splice_init(&bnxt_re_dev_list, &to_be_deleted); + mutex_unlock(&bnxt_re_dev_lock); + + list_for_each_entry(rdev, &to_be_deleted, list) { + dev_info(rdev_to_dev(rdev), "Unregistering Device"); + bnxt_re_dev_stop(rdev); + bnxt_re_ib_unreg(rdev, true); + bnxt_re_remove_one(rdev); + bnxt_re_dev_unreg(rdev); + } unregister_netdevice_notifier(&bnxt_re_netdev_notifier); if (bnxt_re_wq) destroy_workqueue(bnxt_re_wq); |