Commit 47c7ea6d authored by Harish Chegondi's avatar Harish Chegondi Committed by Doug Ledford

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: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarHarish Chegondi <harish.chegondi@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 01ba79d4
...@@ -1136,8 +1136,9 @@ extern spinlock_t qib_devs_lock; ...@@ -1136,8 +1136,9 @@ extern spinlock_t qib_devs_lock;
extern struct qib_devdata *qib_lookup(int unit); extern struct qib_devdata *qib_lookup(int unit);
extern u32 qib_cpulist_count; extern u32 qib_cpulist_count;
extern unsigned long *qib_cpulist; extern unsigned long *qib_cpulist;
extern u16 qpt_mask;
extern unsigned qib_cc_table_size; extern unsigned qib_cc_table_size;
int qib_init(struct qib_devdata *, int); int qib_init(struct qib_devdata *, int);
int init_chip_wc_pat(struct qib_devdata *dd, u32); int init_chip_wc_pat(struct qib_devdata *dd, u32);
int qib_enable_wc(struct qib_devdata *dd); int qib_enable_wc(struct qib_devdata *dd);
......
This diff is collapsed.
...@@ -1904,29 +1904,11 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -1904,29 +1904,11 @@ int qib_register_ib_device(struct qib_devdata *dd)
unsigned i, ctxt; unsigned i, ctxt;
int ret; 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)); 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++) for (i = 0; i < dd->num_pports; i++)
init_ibport(ppd + i); init_ibport(ppd + i);
/* Only need to initialize non-zero fields. */ /* 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_cqs_lock);
spin_lock_init(&dev->n_qps_lock); spin_lock_init(&dev->n_qps_lock);
spin_lock_init(&dev->n_srqs_lock); spin_lock_init(&dev->n_srqs_lock);
...@@ -1935,7 +1917,7 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -1935,7 +1917,7 @@ int qib_register_ib_device(struct qib_devdata *dd)
dev->mem_timer.function = mem_timer; dev->mem_timer.function = mem_timer;
dev->mem_timer.data = (unsigned long) dev; 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->piowait);
INIT_LIST_HEAD(&dev->dmawait); INIT_LIST_HEAD(&dev->dmawait);
...@@ -2032,7 +2014,7 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2032,7 +2014,7 @@ int qib_register_ib_device(struct qib_devdata *dd)
ibdev->modify_srq = qib_modify_srq; ibdev->modify_srq = qib_modify_srq;
ibdev->query_srq = qib_query_srq; ibdev->query_srq = qib_query_srq;
ibdev->destroy_srq = qib_destroy_srq; ibdev->destroy_srq = qib_destroy_srq;
ibdev->create_qp = qib_create_qp; ibdev->create_qp = NULL;
ibdev->modify_qp = qib_modify_qp; ibdev->modify_qp = qib_modify_qp;
ibdev->query_qp = qib_query_qp; ibdev->query_qp = qib_query_qp;
ibdev->destroy_qp = qib_destroy_qp; ibdev->destroy_qp = qib_destroy_qp;
...@@ -2071,9 +2053,21 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -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.get_pci_dev = qib_get_pci_dev;
dd->verbs_dev.rdi.driver_f.check_ah = qib_check_ah; 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.driver_f.notify_new_ah = qib_notify_new_ah;
dd->verbs_dev.rdi.flags = (RVT_FLAG_QP_INIT_DRIVER | dd->verbs_dev.rdi.driver_f.alloc_qpn = alloc_qpn;
RVT_FLAG_CQ_INIT_DRIVER); 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.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.nports = dd->num_pports;
dd->verbs_dev.rdi.dparms.npkeys = qib_get_npkeys(dd); dd->verbs_dev.rdi.dparms.npkeys = qib_get_npkeys(dd);
...@@ -2122,8 +2116,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2122,8 +2116,6 @@ int qib_register_ib_device(struct qib_devdata *dd)
sizeof(struct qib_pio_header), sizeof(struct qib_pio_header),
dev->pio_hdrs, dev->pio_hdrs_phys); dev->pio_hdrs, dev->pio_hdrs_phys);
err_hdrs: err_hdrs:
kfree(dev->rdi.qp_dev->qp_table);
err_qpt:
qib_dev_err(dd, "cannot register verbs: %d!\n", -ret); qib_dev_err(dd, "cannot register verbs: %d!\n", -ret);
bail: bail:
return ret; return ret;
...@@ -2132,7 +2124,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2132,7 +2124,6 @@ int qib_register_ib_device(struct qib_devdata *dd)
void qib_unregister_ib_device(struct qib_devdata *dd) void qib_unregister_ib_device(struct qib_devdata *dd)
{ {
struct qib_ibdev *dev = &dd->verbs_dev; struct qib_ibdev *dev = &dd->verbs_dev;
u32 qps_inuse;
qib_verbs_unregister_sysfs(dd); qib_verbs_unregister_sysfs(dd);
...@@ -2149,13 +2140,7 @@ void qib_unregister_ib_device(struct qib_devdata *dd) ...@@ -2149,13 +2140,7 @@ void qib_unregister_ib_device(struct qib_devdata *dd)
if (!list_empty(&dev->memwait)) if (!list_empty(&dev->memwait))
qib_dev_err(dd, "memwait list not empty!\n"); 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); del_timer_sync(&dev->mem_timer);
qib_free_qpn_table(&dev->rdi.qp_dev->qpn_table);
while (!list_empty(&dev->txreq_free)) { while (!list_empty(&dev->txreq_free)) {
struct list_head *l = dev->txreq_free.next; struct list_head *l = dev->txreq_free.next;
struct qib_verbs_txreq *tx; struct qib_verbs_txreq *tx;
...@@ -2169,7 +2154,6 @@ void qib_unregister_ib_device(struct qib_devdata *dd) ...@@ -2169,7 +2154,6 @@ void qib_unregister_ib_device(struct qib_devdata *dd)
dd->pport->sdma_descq_cnt * dd->pport->sdma_descq_cnt *
sizeof(struct qib_pio_header), sizeof(struct qib_pio_header),
dev->pio_hdrs, dev->pio_hdrs_phys); dev->pio_hdrs, dev->pio_hdrs_phys);
kfree(dev->rdi.qp_dev->qp_table);
} }
/* /*
......
...@@ -464,10 +464,6 @@ __be32 qib_compute_aeth(struct rvt_qp *qp); ...@@ -464,10 +464,6 @@ __be32 qib_compute_aeth(struct rvt_qp *qp);
struct rvt_qp *qib_lookup_qpn(struct qib_ibport *ibp, u32 qpn); struct rvt_qp *qib_lookup_qpn(struct qib_ibport *ibp, u32 qpn);
struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
struct ib_qp_init_attr *init_attr,
struct ib_udata *udata);
int qib_destroy_qp(struct ib_qp *ibqp); int qib_destroy_qp(struct ib_qp *ibqp);
int qib_error_qp(struct rvt_qp *qp, enum ib_wc_status err); int qib_error_qp(struct rvt_qp *qp, enum ib_wc_status err);
...@@ -477,12 +473,15 @@ int qib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, ...@@ -477,12 +473,15 @@ int qib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
int qib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int qib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
int attr_mask, struct ib_qp_init_attr *init_attr); int attr_mask, struct ib_qp_init_attr *init_attr);
/*
unsigned qib_free_all_qps(struct qib_devdata *dd); * Functions provided by qib driver for rdmavt to use
*/
void qib_init_qpn_table(struct qib_devdata *dd, struct rvt_qpn_table *qpt); unsigned qib_free_all_qps(struct rvt_dev_info *rdi);
void *qp_priv_alloc(struct rvt_dev_info *rdi, struct rvt_qp *qp, gfp_t gfp);
void qib_free_qpn_table(struct rvt_qpn_table *qpt); void qp_priv_free(struct rvt_dev_info *rdi, struct rvt_qp *qp);
void notify_qp_reset(struct rvt_qp *qp);
int alloc_qpn(struct rvt_dev_info *rdi, struct rvt_qpn_table *qpt,
enum ib_qp_type type, u8 port, gfp_t gfp);
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment