diff options
Diffstat (limited to 'drivers/infiniband/core/device.c')
| -rw-r--r-- | drivers/infiniband/core/device.c | 25 | 
1 files changed, 22 insertions, 3 deletions
diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index f793bf2f5da..4007f721d25 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -38,6 +38,7 @@  #include <linux/slab.h>  #include <linux/init.h>  #include <linux/mutex.h> +#include <rdma/rdma_netlink.h>  #include "core_priv.h" @@ -725,22 +726,40 @@ static int __init ib_core_init(void)  		return -ENOMEM;  	ret = ib_sysfs_setup(); -	if (ret) +	if (ret) {  		printk(KERN_WARNING "Couldn't create InfiniBand device class\n"); +		goto err; +	} + +	ret = ibnl_init(); +	if (ret) { +		printk(KERN_WARNING "Couldn't init IB netlink interface\n"); +		goto err_sysfs; +	}  	ret = ib_cache_setup();  	if (ret) {  		printk(KERN_WARNING "Couldn't set up InfiniBand P_Key/GID cache\n"); -		ib_sysfs_cleanup(); -		destroy_workqueue(ib_wq); +		goto err_nl;  	} +	return 0; + +err_nl: +	ibnl_cleanup(); + +err_sysfs: +	ib_sysfs_cleanup(); + +err: +	destroy_workqueue(ib_wq);  	return ret;  }  static void __exit ib_core_cleanup(void)  {  	ib_cache_cleanup(); +	ibnl_cleanup();  	ib_sysfs_cleanup();  	/* Make sure that any pending umem accounting work is done. */  	destroy_workqueue(ib_wq);  |