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)
        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 */
        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);
        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)