diff options
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_init.c')
| -rw-r--r-- | drivers/infiniband/hw/qib/qib_init.c | 25 | 
1 files changed, 18 insertions, 7 deletions
| diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c index 4ff340fe904f..3f062f0dd9d8 100644 --- a/drivers/infiniband/hw/qib/qib_init.c +++ b/drivers/infiniband/hw/qib/qib_init.c @@ -42,6 +42,7 @@  #ifdef CONFIG_INFINIBAND_QIB_DCA  #include <linux/dca.h>  #endif +#include <rdma/rdma_vt.h>  #include "qib.h"  #include "qib_common.h" @@ -244,6 +245,13 @@ int qib_init_pportdata(struct qib_pportdata *ppd, struct qib_devdata *dd,  		alloc_percpu(struct qib_pma_counters);  	if (!ppd->ibport_data.pmastats)  		return -ENOMEM; +	ppd->ibport_data.rvp.rc_acks = alloc_percpu(u64); +	ppd->ibport_data.rvp.rc_qacks = alloc_percpu(u64); +	ppd->ibport_data.rvp.rc_delayed_comp = alloc_percpu(u64); +	if (!(ppd->ibport_data.rvp.rc_acks) || +	    !(ppd->ibport_data.rvp.rc_qacks) || +	    !(ppd->ibport_data.rvp.rc_delayed_comp)) +		return -ENOMEM;  	if (qib_cc_table_size < IB_CCT_MIN_ENTRIES)  		goto bail; @@ -449,8 +457,6 @@ static int loadtime_init(struct qib_devdata *dd)  	init_timer(&dd->intrchk_timer);  	dd->intrchk_timer.function = verify_interrupt;  	dd->intrchk_timer.data = (unsigned long) dd; - -	ret = qib_cq_init(dd);  done:  	return ret;  } @@ -631,6 +637,9 @@ wq_error:  static void qib_free_pportdata(struct qib_pportdata *ppd)  {  	free_percpu(ppd->ibport_data.pmastats); +	free_percpu(ppd->ibport_data.rvp.rc_acks); +	free_percpu(ppd->ibport_data.rvp.rc_qacks); +	free_percpu(ppd->ibport_data.rvp.rc_delayed_comp);  	ppd->ibport_data.pmastats = NULL;  } @@ -1081,7 +1090,7 @@ void qib_free_devdata(struct qib_devdata *dd)  	qib_dbg_ibdev_exit(&dd->verbs_dev);  #endif  	free_percpu(dd->int_counter); -	ib_dealloc_device(&dd->verbs_dev.ibdev); +	ib_dealloc_device(&dd->verbs_dev.rdi.ibdev);  }  u64 qib_int_counter(struct qib_devdata *dd) @@ -1120,9 +1129,12 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)  {  	unsigned long flags;  	struct qib_devdata *dd; -	int ret; +	int ret, nports; -	dd = (struct qib_devdata *) ib_alloc_device(sizeof(*dd) + extra); +	/* extra is * number of ports */ +	nports = extra / sizeof(struct qib_pportdata); +	dd = (struct qib_devdata *)rvt_alloc_device(sizeof(*dd) + extra, +						    nports);  	if (!dd)  		return ERR_PTR(-ENOMEM); @@ -1171,7 +1183,7 @@ struct qib_devdata *qib_alloc_devdata(struct pci_dev *pdev, size_t extra)  bail:  	if (!list_empty(&dd->list))  		list_del_init(&dd->list); -	ib_dealloc_device(&dd->verbs_dev.ibdev); +	ib_dealloc_device(&dd->verbs_dev.rdi.ibdev);  	return ERR_PTR(ret);  } @@ -1421,7 +1433,6 @@ static void cleanup_device_data(struct qib_devdata *dd)  	}  	kfree(tmp);  	kfree(dd->boardname); -	qib_cq_exit(dd);  }  /* | 
