|
@@ -508,19 +508,10 @@ static int add_port(struct ib_device *device, int port_num)
|
|
|
|
|
|
p->ibdev = device;
|
|
|
p->port_num = port_num;
|
|
|
- p->kobj.ktype = &port_type;
|
|
|
|
|
|
- p->kobj.parent = kobject_get(&device->ports_parent);
|
|
|
- if (!p->kobj.parent) {
|
|
|
- ret = -EBUSY;
|
|
|
- goto err;
|
|
|
- }
|
|
|
-
|
|
|
- ret = kobject_set_name(&p->kobj, "%d", port_num);
|
|
|
- if (ret)
|
|
|
- goto err_put;
|
|
|
-
|
|
|
- ret = kobject_register(&p->kobj);
|
|
|
+ ret = kobject_init_and_add(&p->kobj, &port_type,
|
|
|
+ kobject_get(device->ports_parent),
|
|
|
+ "%d", port_num);
|
|
|
if (ret)
|
|
|
goto err_put;
|
|
|
|
|
@@ -549,6 +540,7 @@ static int add_port(struct ib_device *device, int port_num)
|
|
|
|
|
|
list_add_tail(&p->kobj.entry, &device->port_list);
|
|
|
|
|
|
+ kobject_uevent(&p->kobj, KOBJ_ADD);
|
|
|
return 0;
|
|
|
|
|
|
err_free_pkey:
|
|
@@ -570,9 +562,7 @@ err_remove_pma:
|
|
|
sysfs_remove_group(&p->kobj, &pma_group);
|
|
|
|
|
|
err_put:
|
|
|
- kobject_put(&device->ports_parent);
|
|
|
-
|
|
|
-err:
|
|
|
+ kobject_put(device->ports_parent);
|
|
|
kfree(p);
|
|
|
return ret;
|
|
|
}
|
|
@@ -694,16 +684,9 @@ int ib_device_register_sysfs(struct ib_device *device)
|
|
|
goto err_unregister;
|
|
|
}
|
|
|
|
|
|
- device->ports_parent.parent = kobject_get(&class_dev->kobj);
|
|
|
- if (!device->ports_parent.parent) {
|
|
|
- ret = -EBUSY;
|
|
|
- goto err_unregister;
|
|
|
- }
|
|
|
- ret = kobject_set_name(&device->ports_parent, "ports");
|
|
|
- if (ret)
|
|
|
- goto err_put;
|
|
|
- ret = kobject_register(&device->ports_parent);
|
|
|
- if (ret)
|
|
|
+ device->ports_parent = kobject_create_and_add("ports",
|
|
|
+ kobject_get(&class_dev->kobj));
|
|
|
+ if (!device->ports_parent)
|
|
|
goto err_put;
|
|
|
|
|
|
if (device->node_type == RDMA_NODE_IB_SWITCH) {
|
|
@@ -758,7 +741,7 @@ void ib_device_unregister_sysfs(struct ib_device *device)
|
|
|
kobject_unregister(p);
|
|
|
}
|
|
|
|
|
|
- kobject_unregister(&device->ports_parent);
|
|
|
+ kobject_unregister(device->ports_parent);
|
|
|
class_device_unregister(&device->class_dev);
|
|
|
}
|
|
|
|