IB/qib: Remove create qp and create qp table functionality
Rely on rdmavt functions for creation of qp and qp table. Function to allocate a qpn is still being provided by qib as the algorithm to allocate a qpn in qib is different from that of the algorithm in rdmavt. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:

کامیت شده توسط
Doug Ledford

والد
01ba79d4dd
کامیت
47c7ea6d8e
@@ -1904,29 +1904,11 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
||||
unsigned i, ctxt;
|
||||
int ret;
|
||||
|
||||
/* allocate parent object */
|
||||
dev->rdi.qp_dev = kzalloc(sizeof(*dev->rdi.qp_dev), GFP_KERNEL);
|
||||
if (!dev->rdi.qp_dev)
|
||||
return -ENOMEM;
|
||||
dev->rdi.qp_dev->qp_table_size = ib_qib_qp_table_size;
|
||||
dev->rdi.qp_dev->qp_table_bits = ilog2(ib_qib_qp_table_size);
|
||||
get_random_bytes(&dev->qp_rnd, sizeof(dev->qp_rnd));
|
||||
dev->rdi.qp_dev->qp_table = kmalloc_array(
|
||||
dev->rdi.qp_dev->qp_table_size,
|
||||
sizeof(*dev->rdi.qp_dev->qp_table),
|
||||
GFP_KERNEL);
|
||||
if (!dev->rdi.qp_dev->qp_table) {
|
||||
ret = -ENOMEM;
|
||||
goto err_qpt;
|
||||
}
|
||||
for (i = 0; i < dev->rdi.qp_dev->qp_table_size; i++)
|
||||
RCU_INIT_POINTER(dev->rdi.qp_dev->qp_table[i], NULL);
|
||||
|
||||
for (i = 0; i < dd->num_pports; i++)
|
||||
init_ibport(ppd + i);
|
||||
|
||||
/* Only need to initialize non-zero fields. */
|
||||
spin_lock_init(&dev->rdi.qp_dev->qpt_lock);
|
||||
spin_lock_init(&dev->n_cqs_lock);
|
||||
spin_lock_init(&dev->n_qps_lock);
|
||||
spin_lock_init(&dev->n_srqs_lock);
|
||||
@@ -1935,7 +1917,7 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
||||
dev->mem_timer.function = mem_timer;
|
||||
dev->mem_timer.data = (unsigned long) dev;
|
||||
|
||||
qib_init_qpn_table(dd, &dev->rdi.qp_dev->qpn_table);
|
||||
qpt_mask = dd->qpn_mask;
|
||||
|
||||
INIT_LIST_HEAD(&dev->piowait);
|
||||
INIT_LIST_HEAD(&dev->dmawait);
|
||||
@@ -2032,7 +2014,7 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
||||
ibdev->modify_srq = qib_modify_srq;
|
||||
ibdev->query_srq = qib_query_srq;
|
||||
ibdev->destroy_srq = qib_destroy_srq;
|
||||
ibdev->create_qp = qib_create_qp;
|
||||
ibdev->create_qp = NULL;
|
||||
ibdev->modify_qp = qib_modify_qp;
|
||||
ibdev->query_qp = qib_query_qp;
|
||||
ibdev->destroy_qp = qib_destroy_qp;
|
||||
@@ -2071,9 +2053,21 @@ int qib_register_ib_device(struct qib_devdata *dd)
|
||||
dd->verbs_dev.rdi.driver_f.get_pci_dev = qib_get_pci_dev;
|
||||
dd->verbs_dev.rdi.driver_f.check_ah = qib_check_ah;
|
||||
dd->verbs_dev.rdi.driver_f.notify_new_ah = qib_notify_new_ah;
|
||||
dd->verbs_dev.rdi.flags = (RVT_FLAG_QP_INIT_DRIVER |
|
||||
RVT_FLAG_CQ_INIT_DRIVER);
|
||||
dd->verbs_dev.rdi.driver_f.alloc_qpn = alloc_qpn;
|
||||
dd->verbs_dev.rdi.driver_f.qp_priv_alloc = qp_priv_alloc;
|
||||
dd->verbs_dev.rdi.driver_f.qp_priv_free = qp_priv_free;
|
||||
dd->verbs_dev.rdi.driver_f.free_all_qps = qib_free_all_qps;
|
||||
dd->verbs_dev.rdi.driver_f.notify_qp_reset = notify_qp_reset;
|
||||
|
||||
dd->verbs_dev.rdi.flags = RVT_FLAG_CQ_INIT_DRIVER;
|
||||
|
||||
dd->verbs_dev.rdi.dparms.lkey_table_size = qib_lkey_table_size;
|
||||
dd->verbs_dev.rdi.dparms.qp_table_size = ib_qib_qp_table_size;
|
||||
dd->verbs_dev.rdi.dparms.qpn_start = 1;
|
||||
dd->verbs_dev.rdi.dparms.qpn_res_start = QIB_KD_QP;
|
||||
dd->verbs_dev.rdi.dparms.qpn_res_end = QIB_KD_QP; /* Reserve one QP */
|
||||
dd->verbs_dev.rdi.dparms.qpn_inc = 1;
|
||||
dd->verbs_dev.rdi.dparms.qos_shift = 1;
|
||||
dd->verbs_dev.rdi.dparms.nports = dd->num_pports;
|
||||
dd->verbs_dev.rdi.dparms.npkeys = qib_get_npkeys(dd);
|
||||
|
||||
@@ -2122,8 +2116,6 @@ err_tx:
|
||||
sizeof(struct qib_pio_header),
|
||||
dev->pio_hdrs, dev->pio_hdrs_phys);
|
||||
err_hdrs:
|
||||
kfree(dev->rdi.qp_dev->qp_table);
|
||||
err_qpt:
|
||||
qib_dev_err(dd, "cannot register verbs: %d!\n", -ret);
|
||||
bail:
|
||||
return ret;
|
||||
@@ -2132,7 +2124,6 @@ bail:
|
||||
void qib_unregister_ib_device(struct qib_devdata *dd)
|
||||
{
|
||||
struct qib_ibdev *dev = &dd->verbs_dev;
|
||||
u32 qps_inuse;
|
||||
|
||||
qib_verbs_unregister_sysfs(dd);
|
||||
|
||||
@@ -2149,13 +2140,7 @@ void qib_unregister_ib_device(struct qib_devdata *dd)
|
||||
if (!list_empty(&dev->memwait))
|
||||
qib_dev_err(dd, "memwait list not empty!\n");
|
||||
|
||||
qps_inuse = qib_free_all_qps(dd);
|
||||
if (qps_inuse)
|
||||
qib_dev_err(dd, "QP memory leak! %u still in use\n",
|
||||
qps_inuse);
|
||||
|
||||
del_timer_sync(&dev->mem_timer);
|
||||
qib_free_qpn_table(&dev->rdi.qp_dev->qpn_table);
|
||||
while (!list_empty(&dev->txreq_free)) {
|
||||
struct list_head *l = dev->txreq_free.next;
|
||||
struct qib_verbs_txreq *tx;
|
||||
@@ -2169,7 +2154,6 @@ void qib_unregister_ib_device(struct qib_devdata *dd)
|
||||
dd->pport->sdma_descq_cnt *
|
||||
sizeof(struct qib_pio_header),
|
||||
dev->pio_hdrs, dev->pio_hdrs_phys);
|
||||
kfree(dev->rdi.qp_dev->qp_table);
|
||||
}
|
||||
|
||||
/*
|
||||
|
مرجع در شماره جدید
Block a user