aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorParav Pandit <parav@mellanox.com>2019-02-13 19:23:03 +0200
committerJason Gunthorpe <jgg@mellanox.com>2019-02-15 21:42:02 -0700
commite155755e53804e721c8ce99474cc9c65eb8e8bc2 (patch)
tree871d2204600ebcb8299ee10cc95bce81ac03d156 /drivers
parentRDMA/cxgb4: Remove kref accounting for sync operation (diff)
downloadlinux-dev-e155755e53804e721c8ce99474cc9c65eb8e8bc2.tar.xz
linux-dev-e155755e53804e721c8ce99474cc9c65eb8e8bc2.zip
RDMA/core: Use simpler device_del() instead of device_unregister()
Instead of holding extra reference using get_device() that device_unregister() releases, simplify it as below. device_add() balances with device_del(). device_initialize() balances with put_device(), always via ib_dealloc_device(). Signed-off-by: Parav Pandit <parav@mellanox.com> Signed-off-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/infiniband/core/device.c1
-rw-r--r--drivers/infiniband/core/sysfs.c7
2 files changed, 3 insertions, 5 deletions
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index 3325be4f91a5..46d237ce83de 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -369,6 +369,7 @@ void ib_dealloc_device(struct ib_device *device)
WARN_ON(!xa_empty(&device->client_data));
WARN_ON(refcount_read(&device->refcount));
rdma_restrack_clean(device);
+ /* Balances with device_initialize */
put_device(&device->dev);
}
EXPORT_SYMBOL(ib_dealloc_device);
diff --git a/drivers/infiniband/core/sysfs.c b/drivers/infiniband/core/sysfs.c
index c75692802da8..e04f111fe406 100644
--- a/drivers/infiniband/core/sysfs.c
+++ b/drivers/infiniband/core/sysfs.c
@@ -1351,15 +1351,12 @@ err:
void ib_device_unregister_sysfs(struct ib_device *device)
{
- /* Hold device until ib_dealloc_device() */
- get_device(&device->dev);
-
free_port_list_attributes(device);
if (device->hw_stats) {
kfree(device->hw_stats);
free_hsag(&device->dev.kobj, device->hw_stats_ag);
}
-
- device_unregister(&device->dev);
+ /* Balances with device_add */
+ device_del(&device->dev);
}