diff options
author | Parav Pandit | 2019-02-13 18:23:03 +0100 |
---|---|---|
committer | Jason Gunthorpe | 2019-02-16 05:42:02 +0100 |
commit | e155755e53804e721c8ce99474cc9c65eb8e8bc2 (patch) | |
tree | 871d2204600ebcb8299ee10cc95bce81ac03d156 /drivers/infiniband/core | |
parent | RDMA/cxgb4: Remove kref accounting for sync operation (diff) | |
download | kernel-qcow2-linux-e155755e53804e721c8ce99474cc9c65eb8e8bc2.tar.gz kernel-qcow2-linux-e155755e53804e721c8ce99474cc9c65eb8e8bc2.tar.xz kernel-qcow2-linux-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/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/device.c | 1 | ||||
-rw-r--r-- | drivers/infiniband/core/sysfs.c | 7 |
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); } |