]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
RDMA/core: Use simpler device_del() instead of device_unregister()
authorParav Pandit <parav@mellanox.com>
Wed, 13 Feb 2019 17:23:03 +0000 (19:23 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Sat, 16 Feb 2019 04:42:02 +0000 (21:42 -0700)
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>
drivers/infiniband/core/device.c
drivers/infiniband/core/sysfs.c

index 3325be4f91a5fe41973af18185c1fe7af8ffd029..46d237ce83de8910d5f0aa8a991f7919c88b0487 100644 (file)
@@ -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);
index c75692802da8b6553bc99e0314fb7a0f266c1975..e04f111fe406ccdcc87ca9a293afba92bed2f3e1 100644 (file)
@@ -1351,15 +1351,12 @@ int ib_device_register_sysfs(struct ib_device *device)
 
 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);
 }