aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/core/device.c')
-rw-r--r--drivers/infiniband/core/device.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
index 60083bde3e39..b997feac2c63 100644
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -253,6 +253,8 @@ static void ib_device_release(struct device *device)
ib_cache_release_one(dev);
kfree(dev->port_immutable);
}
+ ib_security_release_port_pkey_list(dev);
+ kfree(dev->port_pkey_list);
kfree(dev);
}
@@ -522,7 +524,6 @@ static void cleanup_device(struct ib_device *device)
{
ib_cache_cleanup_one(device);
ib_cache_release_one(device);
- kfree(device->port_pkey_list);
kfree(device->port_immutable);
}
@@ -560,12 +561,10 @@ static int setup_device(struct ib_device *device)
if (ret) {
dev_warn(&device->dev,
"Couldn't set up InfiniBand P_Key/GID cache\n");
- goto pkey_cleanup;
+ return ret;
}
return 0;
-pkey_cleanup:
- kfree(device->port_pkey_list);
port_cleanup:
kfree(device->port_immutable);
return ret;
@@ -682,9 +681,6 @@ void ib_unregister_device(struct ib_device *device)
ib_cache_cleanup_one(device);
- ib_security_destroy_port_pkey_list(device);
- kfree(device->port_pkey_list);
-
down_write(&lists_rwsem);
write_lock_irqsave(&device->client_data_lock, flags);
list_for_each_entry_safe(context, tmp, &device->client_data_list,