IB/mlx4: Refer to the device kobject instead of ports_parent
authorParav Pandit <parav@mellanox.com>
Sun, 7 Oct 2018 09:12:39 +0000 (12:12 +0300)
committerDoug Ledford <dledford@redhat.com>
Tue, 16 Oct 2018 18:09:44 +0000 (14:09 -0400)
iov sysfs tree is created under ib device at
/sys/class/infiniband/mlx4_0/iov.
And,
ibdev->ports_parent->parent = &ibdev->dev.

Therefore, refer to device's kobject directly instead of
indirect access to it.

Additionally, iov entries are created under device kobject and deleted
before device is removed. There is no need to hold additional reference
to device kobject in provider driver.

Signed-off-by: Parav Pandit <parav@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/mlx4/sysfs.c

index e219093d2764536a58c7c362a08167361ed0e93a..752bdd536130bf5ea31c578325c09751554ecbd8 100644 (file)
@@ -818,9 +818,7 @@ int mlx4_ib_device_register_sysfs(struct mlx4_ib_dev *dev)
        if (!mlx4_is_master(dev->dev))
                return 0;
 
-       dev->iov_parent =
-               kobject_create_and_add("iov",
-                                      kobject_get(dev->ib_dev.ports_parent->parent));
+       dev->iov_parent = kobject_create_and_add("iov", &dev->ib_dev.dev.kobj);
        if (!dev->iov_parent) {
                ret = -ENOMEM;
                goto err;
@@ -850,7 +848,6 @@ err_add_entries:
 err_ports:
        kobject_put(dev->iov_parent);
 err:
-       kobject_put(dev->ib_dev.ports_parent->parent);
        pr_err("mlx4_ib_device_register_sysfs error (%d)\n", ret);
        return ret;
 }
@@ -886,5 +883,4 @@ void mlx4_ib_device_unregister_sysfs(struct mlx4_ib_dev *device)
        kobject_put(device->ports_parent);
        kobject_put(device->iov_parent);
        kobject_put(device->iov_parent);
-       kobject_put(device->ib_dev.ports_parent->parent);
 }