|
@@ -63,8 +63,6 @@ MODULE_DESCRIPTION(OCRDMA_ROCE_DRV_DESC " " OCRDMA_ROCE_DRV_VERSION);
|
|
|
MODULE_AUTHOR("Emulex Corporation");
|
|
|
MODULE_LICENSE("Dual BSD/GPL");
|
|
|
|
|
|
-static LIST_HEAD(ocrdma_dev_list);
|
|
|
-static DEFINE_SPINLOCK(ocrdma_devlist_lock);
|
|
|
static DEFINE_IDR(ocrdma_dev_id);
|
|
|
|
|
|
void ocrdma_get_guid(struct ocrdma_dev *dev, u8 *guid)
|
|
@@ -325,9 +323,6 @@ static struct ocrdma_dev *ocrdma_add(struct be_dev_info *dev_info)
|
|
|
for (i = 0; i < ARRAY_SIZE(ocrdma_attributes); i++)
|
|
|
if (device_create_file(&dev->ibdev.dev, ocrdma_attributes[i]))
|
|
|
goto sysfs_err;
|
|
|
- spin_lock(&ocrdma_devlist_lock);
|
|
|
- list_add_tail_rcu(&dev->entry, &ocrdma_dev_list);
|
|
|
- spin_unlock(&ocrdma_devlist_lock);
|
|
|
/* Init stats */
|
|
|
ocrdma_add_port_stats(dev);
|
|
|
/* Interrupt Moderation */
|
|
@@ -356,9 +351,8 @@ idr_err:
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-static void ocrdma_remove_free(struct rcu_head *rcu)
|
|
|
+static void ocrdma_remove_free(struct ocrdma_dev *dev)
|
|
|
{
|
|
|
- struct ocrdma_dev *dev = container_of(rcu, struct ocrdma_dev, rcu);
|
|
|
|
|
|
idr_remove(&ocrdma_dev_id, dev->id);
|
|
|
kfree(dev->mbx_cmd);
|
|
@@ -375,15 +369,9 @@ static void ocrdma_remove(struct ocrdma_dev *dev)
|
|
|
ib_unregister_device(&dev->ibdev);
|
|
|
|
|
|
ocrdma_rem_port_stats(dev);
|
|
|
-
|
|
|
- spin_lock(&ocrdma_devlist_lock);
|
|
|
- list_del_rcu(&dev->entry);
|
|
|
- spin_unlock(&ocrdma_devlist_lock);
|
|
|
-
|
|
|
ocrdma_free_resources(dev);
|
|
|
ocrdma_cleanup_hw(dev);
|
|
|
-
|
|
|
- call_rcu(&dev->rcu, ocrdma_remove_free);
|
|
|
+ ocrdma_remove_free(dev);
|
|
|
}
|
|
|
|
|
|
static int ocrdma_open(struct ocrdma_dev *dev)
|