提交 7c2e11fe 编写于 作者: D Dennis Dalessandro 提交者: Doug Ledford

IB/qib: Remove qp and mr functionality from qib

Remove qp and mr support from qib and use rdmavt. These two changes
cannot be reasonably be split apart into separate patches because they
depend on each other in mulitple places. This paves the way to remove
even more functions in subsequent patches.
Reviewed-by: NIra Weiny <ira.weiny@intel.com>
Reviewed-by: NMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: NDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: NDoug Ledford <dledford@redhat.com>
上级 6a9df403
obj-$(CONFIG_INFINIBAND_QIB) += ib_qib.o obj-$(CONFIG_INFINIBAND_QIB) += ib_qib.o
ib_qib-y := qib_cq.o qib_diag.o qib_driver.o qib_eeprom.o \ ib_qib-y := qib_cq.o qib_diag.o qib_driver.o qib_eeprom.o \
qib_file_ops.o qib_fs.o qib_init.o qib_intr.o qib_keys.o \ qib_file_ops.o qib_fs.o qib_init.o qib_intr.o \
qib_mad.o qib_mmap.o qib_mr.o qib_pcie.o qib_pio_copy.o \ qib_mad.o qib_mmap.o qib_pcie.o qib_pio_copy.o \
qib_qp.o qib_qsfp.o qib_rc.o qib_ruc.o qib_sdma.o qib_srq.o \ qib_qp.o qib_qsfp.o qib_rc.o qib_ruc.o qib_sdma.o qib_srq.o \
qib_sysfs.o qib_twsi.o qib_tx.o qib_uc.o qib_ud.o \ qib_sysfs.o qib_twsi.o qib_tx.o qib_uc.o qib_ud.o \
qib_user_pages.o qib_user_sdma.o qib_verbs_mcast.o qib_iba7220.o \ qib_user_pages.o qib_user_sdma.o qib_verbs_mcast.o qib_iba7220.o \
......
...@@ -231,7 +231,7 @@ struct qib_ctxtdata { ...@@ -231,7 +231,7 @@ struct qib_ctxtdata {
/* ctxt rcvhdrq head offset */ /* ctxt rcvhdrq head offset */
u32 head; u32 head;
/* lookaside fields */ /* lookaside fields */
struct qib_qp *lookaside_qp; struct rvt_qp *lookaside_qp;
u32 lookaside_qpn; u32 lookaside_qpn;
/* QPs waiting for context processing */ /* QPs waiting for context processing */
struct list_head qp_wait_list; struct list_head qp_wait_list;
...@@ -241,7 +241,7 @@ struct qib_ctxtdata { ...@@ -241,7 +241,7 @@ struct qib_ctxtdata {
#endif #endif
}; };
struct qib_sge_state; struct rvt_sge_state;
struct qib_sdma_txreq { struct qib_sdma_txreq {
int flags; int flags;
...@@ -259,14 +259,14 @@ struct qib_sdma_desc { ...@@ -259,14 +259,14 @@ struct qib_sdma_desc {
struct qib_verbs_txreq { struct qib_verbs_txreq {
struct qib_sdma_txreq txreq; struct qib_sdma_txreq txreq;
struct qib_qp *qp; struct rvt_qp *qp;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
u32 dwords; u32 dwords;
u16 hdr_dwords; u16 hdr_dwords;
u16 hdr_inx; u16 hdr_inx;
struct qib_pio_header *align_buf; struct qib_pio_header *align_buf;
struct qib_mregion *mr; struct rvt_mregion *mr;
struct qib_sge_state *ss; struct rvt_sge_state *ss;
}; };
#define QIB_SDMA_TXREQ_F_USELARGEBUF 0x1 #define QIB_SDMA_TXREQ_F_USELARGEBUF 0x1
...@@ -1324,7 +1324,7 @@ void __qib_sdma_intr(struct qib_pportdata *); ...@@ -1324,7 +1324,7 @@ void __qib_sdma_intr(struct qib_pportdata *);
void qib_sdma_intr(struct qib_pportdata *); void qib_sdma_intr(struct qib_pportdata *);
void qib_user_sdma_send_desc(struct qib_pportdata *dd, void qib_user_sdma_send_desc(struct qib_pportdata *dd,
struct list_head *pktlist); struct list_head *pktlist);
int qib_sdma_verbs_send(struct qib_pportdata *, struct qib_sge_state *, int qib_sdma_verbs_send(struct qib_pportdata *, struct rvt_sge_state *,
u32, struct qib_verbs_txreq *); u32, struct qib_verbs_txreq *);
/* ppd->sdma_lock should be locked before calling this. */ /* ppd->sdma_lock should be locked before calling this. */
int qib_sdma_make_progress(struct qib_pportdata *dd); int qib_sdma_make_progress(struct qib_pportdata *dd);
......
...@@ -466,7 +466,7 @@ int qib_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata) ...@@ -466,7 +466,7 @@ int qib_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata)
if (cq->ip) { if (cq->ip) {
struct qib_ibdev *dev = to_idev(ibcq->device); struct qib_ibdev *dev = to_idev(ibcq->device);
struct qib_mmap_info *ip = cq->ip; struct rvt_mmap_info *ip = cq->ip;
qib_update_mmap_info(dev, ip, sz, wc); qib_update_mmap_info(dev, ip, sz, wc);
......
...@@ -322,7 +322,7 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd, ...@@ -322,7 +322,7 @@ static u32 qib_rcv_hdrerr(struct qib_ctxtdata *rcd, struct qib_pportdata *ppd,
struct qib_ib_header *hdr = (struct qib_ib_header *) rhdr; struct qib_ib_header *hdr = (struct qib_ib_header *) rhdr;
struct qib_other_headers *ohdr = NULL; struct qib_other_headers *ohdr = NULL;
struct qib_ibport *ibp = &ppd->ibport_data; struct qib_ibport *ibp = &ppd->ibport_data;
struct qib_qp *qp = NULL; struct rvt_qp *qp = NULL;
u32 tlen = qib_hdrget_length_in_bytes(rhf_addr); u32 tlen = qib_hdrget_length_in_bytes(rhf_addr);
u16 lid = be16_to_cpu(hdr->lrh[1]); u16 lid = be16_to_cpu(hdr->lrh[1]);
int lnh = be16_to_cpu(hdr->lrh[0]) & 3; int lnh = be16_to_cpu(hdr->lrh[0]) & 3;
...@@ -472,7 +472,7 @@ u32 qib_kreceive(struct qib_ctxtdata *rcd, u32 *llic, u32 *npkts) ...@@ -472,7 +472,7 @@ u32 qib_kreceive(struct qib_ctxtdata *rcd, u32 *llic, u32 *npkts)
u32 eflags, etype, tlen, i = 0, updegr = 0, crcs = 0; u32 eflags, etype, tlen, i = 0, updegr = 0, crcs = 0;
int last; int last;
u64 lval; u64 lval;
struct qib_qp *qp, *nqp; struct rvt_qp *qp, *nqp;
l = rcd->head; l = rcd->head;
rhf_addr = (__le32 *) rcd->rcvhdrq + l + dd->rhf_offset; rhf_addr = (__le32 *) rcd->rcvhdrq + l + dd->rhf_offset;
......
...@@ -46,20 +46,20 @@ ...@@ -46,20 +46,20 @@
* *
*/ */
int qib_alloc_lkey(struct qib_mregion *mr, int dma_region) int qib_alloc_lkey(struct rvt_mregion *mr, int dma_region)
{ {
unsigned long flags; unsigned long flags;
u32 r; u32 r;
u32 n; u32 n;
int ret = 0; int ret = 0;
struct qib_ibdev *dev = to_idev(mr->pd->device); struct qib_ibdev *dev = to_idev(mr->pd->device);
struct qib_lkey_table *rkt = &dev->lk_table; struct rvt_lkey_table *rkt = &dev->lk_table;
spin_lock_irqsave(&rkt->lock, flags); spin_lock_irqsave(&rkt->lock, flags);
/* special case for dma_mr lkey == 0 */ /* special case for dma_mr lkey == 0 */
if (dma_region) { if (dma_region) {
struct qib_mregion *tmr; struct rvt_mregion *tmr;
tmr = rcu_access_pointer(dev->dma_mr); tmr = rcu_access_pointer(dev->dma_mr);
if (!tmr) { if (!tmr) {
...@@ -90,8 +90,8 @@ int qib_alloc_lkey(struct qib_mregion *mr, int dma_region) ...@@ -90,8 +90,8 @@ int qib_alloc_lkey(struct qib_mregion *mr, int dma_region)
* bits are capped in qib_verbs.c to insure enough bits * bits are capped in qib_verbs.c to insure enough bits
* for generation number * for generation number
*/ */
mr->lkey = (r << (32 - ib_qib_lkey_table_size)) | mr->lkey = (r << (32 - ib_rvt_lkey_table_size)) |
((((1 << (24 - ib_qib_lkey_table_size)) - 1) & rkt->gen) ((((1 << (24 - ib_rvt_lkey_table_size)) - 1) & rkt->gen)
<< 8); << 8);
if (mr->lkey == 0) { if (mr->lkey == 0) {
mr->lkey |= 1 << 8; mr->lkey |= 1 << 8;
...@@ -114,13 +114,13 @@ int qib_alloc_lkey(struct qib_mregion *mr, int dma_region) ...@@ -114,13 +114,13 @@ int qib_alloc_lkey(struct qib_mregion *mr, int dma_region)
* qib_free_lkey - free an lkey * qib_free_lkey - free an lkey
* @mr: mr to free from tables * @mr: mr to free from tables
*/ */
void qib_free_lkey(struct qib_mregion *mr) void qib_free_lkey(struct rvt_mregion *mr)
{ {
unsigned long flags; unsigned long flags;
u32 lkey = mr->lkey; u32 lkey = mr->lkey;
u32 r; u32 r;
struct qib_ibdev *dev = to_idev(mr->pd->device); struct qib_ibdev *dev = to_idev(mr->pd->device);
struct qib_lkey_table *rkt = &dev->lk_table; struct rvt_lkey_table *rkt = &dev->lk_table;
spin_lock_irqsave(&rkt->lock, flags); spin_lock_irqsave(&rkt->lock, flags);
if (!mr->lkey_published) if (!mr->lkey_published)
...@@ -128,7 +128,7 @@ void qib_free_lkey(struct qib_mregion *mr) ...@@ -128,7 +128,7 @@ void qib_free_lkey(struct qib_mregion *mr)
if (lkey == 0) if (lkey == 0)
RCU_INIT_POINTER(dev->dma_mr, NULL); RCU_INIT_POINTER(dev->dma_mr, NULL);
else { else {
r = lkey >> (32 - ib_qib_lkey_table_size); r = lkey >> (32 - ib_rvt_lkey_table_size);
RCU_INIT_POINTER(rkt->table[r], NULL); RCU_INIT_POINTER(rkt->table[r], NULL);
} }
qib_put_mr(mr); qib_put_mr(mr);
...@@ -137,105 +137,6 @@ void qib_free_lkey(struct qib_mregion *mr) ...@@ -137,105 +137,6 @@ void qib_free_lkey(struct qib_mregion *mr)
spin_unlock_irqrestore(&rkt->lock, flags); spin_unlock_irqrestore(&rkt->lock, flags);
} }
/**
* qib_lkey_ok - check IB SGE for validity and initialize
* @rkt: table containing lkey to check SGE against
* @pd: protection domain
* @isge: outgoing internal SGE
* @sge: SGE to check
* @acc: access flags
*
* Return 1 if valid and successful, otherwise returns 0.
*
* increments the reference count upon success
*
* Check the IB SGE for validity and initialize our internal version
* of it.
*/
int qib_lkey_ok(struct qib_lkey_table *rkt, struct rvt_pd *pd,
struct qib_sge *isge, struct ib_sge *sge, int acc)
{
struct qib_mregion *mr;
unsigned n, m;
size_t off;
/*
* We use LKEY == zero for kernel virtual addresses
* (see qib_get_dma_mr and qib_dma.c).
*/
rcu_read_lock();
if (sge->lkey == 0) {
struct qib_ibdev *dev = to_idev(pd->ibpd.device);
if (pd->user)
goto bail;
mr = rcu_dereference(dev->dma_mr);
if (!mr)
goto bail;
if (unlikely(!atomic_inc_not_zero(&mr->refcount)))
goto bail;
rcu_read_unlock();
isge->mr = mr;
isge->vaddr = (void *) sge->addr;
isge->length = sge->length;
isge->sge_length = sge->length;
isge->m = 0;
isge->n = 0;
goto ok;
}
mr = rcu_dereference(
rkt->table[(sge->lkey >> (32 - ib_qib_lkey_table_size))]);
if (unlikely(!mr || mr->lkey != sge->lkey || mr->pd != &pd->ibpd))
goto bail;
off = sge->addr - mr->user_base;
if (unlikely(sge->addr < mr->user_base ||
off + sge->length > mr->length ||
(mr->access_flags & acc) != acc))
goto bail;
if (unlikely(!atomic_inc_not_zero(&mr->refcount)))
goto bail;
rcu_read_unlock();
off += mr->offset;
if (mr->page_shift) {
/*
page sizes are uniform power of 2 so no loop is necessary
entries_spanned_by_off is the number of times the loop below
would have executed.
*/
size_t entries_spanned_by_off;
entries_spanned_by_off = off >> mr->page_shift;
off -= (entries_spanned_by_off << mr->page_shift);
m = entries_spanned_by_off/QIB_SEGSZ;
n = entries_spanned_by_off%QIB_SEGSZ;
} else {
m = 0;
n = 0;
while (off >= mr->map[m]->segs[n].length) {
off -= mr->map[m]->segs[n].length;
n++;
if (n >= QIB_SEGSZ) {
m++;
n = 0;
}
}
}
isge->mr = mr;
isge->vaddr = mr->map[m]->segs[n].vaddr + off;
isge->length = mr->map[m]->segs[n].length - off;
isge->sge_length = sge->length;
isge->m = m;
isge->n = n;
ok:
return 1;
bail:
rcu_read_unlock();
return 0;
}
/** /**
* qib_rkey_ok - check the IB virtual address, length, and RKEY * qib_rkey_ok - check the IB virtual address, length, and RKEY
* @qp: qp for validation * @qp: qp for validation
...@@ -249,11 +150,11 @@ int qib_lkey_ok(struct qib_lkey_table *rkt, struct rvt_pd *pd, ...@@ -249,11 +150,11 @@ int qib_lkey_ok(struct qib_lkey_table *rkt, struct rvt_pd *pd,
* *
* increments the reference count upon success * increments the reference count upon success
*/ */
int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge, int qib_rkey_ok(struct rvt_qp *qp, struct rvt_sge *sge,
u32 len, u64 vaddr, u32 rkey, int acc) u32 len, u64 vaddr, u32 rkey, int acc)
{ {
struct qib_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table; struct rvt_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table;
struct qib_mregion *mr; struct rvt_mregion *mr;
unsigned n, m; unsigned n, m;
size_t off; size_t off;
...@@ -285,7 +186,7 @@ int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge, ...@@ -285,7 +186,7 @@ int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge,
} }
mr = rcu_dereference( mr = rcu_dereference(
rkt->table[(rkey >> (32 - ib_qib_lkey_table_size))]); rkt->table[(rkey >> (32 - ib_rvt_lkey_table_size))]);
if (unlikely(!mr || mr->lkey != rkey || qp->ibqp.pd != mr->pd)) if (unlikely(!mr || mr->lkey != rkey || qp->ibqp.pd != mr->pd))
goto bail; goto bail;
...@@ -308,15 +209,15 @@ int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge, ...@@ -308,15 +209,15 @@ int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge,
entries_spanned_by_off = off >> mr->page_shift; entries_spanned_by_off = off >> mr->page_shift;
off -= (entries_spanned_by_off << mr->page_shift); off -= (entries_spanned_by_off << mr->page_shift);
m = entries_spanned_by_off/QIB_SEGSZ; m = entries_spanned_by_off / RVT_SEGSZ;
n = entries_spanned_by_off%QIB_SEGSZ; n = entries_spanned_by_off % RVT_SEGSZ;
} else { } else {
m = 0; m = 0;
n = 0; n = 0;
while (off >= mr->map[m]->segs[n].length) { while (off >= mr->map[m]->segs[n].length) {
off -= mr->map[m]->segs[n].length; off -= mr->map[m]->segs[n].length;
n++; n++;
if (n >= QIB_SEGSZ) { if (n >= RVT_SEGSZ) {
m++; m++;
n = 0; n = 0;
} }
...@@ -335,58 +236,3 @@ int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge, ...@@ -335,58 +236,3 @@ int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge,
return 0; return 0;
} }
/*
* Initialize the memory region specified by the work request.
*/
int qib_reg_mr(struct qib_qp *qp, struct ib_reg_wr *wr)
{
struct qib_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table;
struct rvt_pd *pd = ibpd_to_rvtpd(qp->ibqp.pd);
struct qib_mr *mr = to_imr(wr->mr);
struct qib_mregion *mrg;
u32 key = wr->key;
unsigned i, n, m;
int ret = -EINVAL;
unsigned long flags;
u64 *page_list;
size_t ps;
spin_lock_irqsave(&rkt->lock, flags);
if (pd->user || key == 0)
goto bail;
mrg = rcu_dereference_protected(
rkt->table[(key >> (32 - ib_qib_lkey_table_size))],
lockdep_is_held(&rkt->lock));
if (unlikely(mrg == NULL || qp->ibqp.pd != mrg->pd))
goto bail;
if (mr->npages > mrg->max_segs)
goto bail;
ps = mr->ibmr.page_size;
if (mr->ibmr.length > ps * mr->npages)
goto bail;
mrg->user_base = mr->ibmr.iova;
mrg->iova = mr->ibmr.iova;
mrg->lkey = key;
mrg->length = mr->ibmr.length;
mrg->access_flags = wr->access;
page_list = mr->pages;
m = 0;
n = 0;
for (i = 0; i < mr->npages; i++) {
mrg->map[m]->segs[n].vaddr = (void *) page_list[i];
mrg->map[m]->segs[n].length = ps;
if (++n == QIB_SEGSZ) {
m++;
n = 0;
}
}
ret = 0;
bail:
spin_unlock_irqrestore(&rkt->lock, flags);
return ret;
}
...@@ -41,12 +41,12 @@ ...@@ -41,12 +41,12 @@
/** /**
* qib_release_mmap_info - free mmap info structure * qib_release_mmap_info - free mmap info structure
* @ref: a pointer to the kref within struct qib_mmap_info * @ref: a pointer to the kref within struct rvt_mmap_info
*/ */
void qib_release_mmap_info(struct kref *ref) void qib_release_mmap_info(struct kref *ref)
{ {
struct qib_mmap_info *ip = struct rvt_mmap_info *ip =
container_of(ref, struct qib_mmap_info, ref); container_of(ref, struct rvt_mmap_info, ref);
struct qib_ibdev *dev = to_idev(ip->context->device); struct qib_ibdev *dev = to_idev(ip->context->device);
spin_lock_irq(&dev->pending_lock); spin_lock_irq(&dev->pending_lock);
...@@ -63,14 +63,14 @@ void qib_release_mmap_info(struct kref *ref) ...@@ -63,14 +63,14 @@ void qib_release_mmap_info(struct kref *ref)
*/ */
static void qib_vma_open(struct vm_area_struct *vma) static void qib_vma_open(struct vm_area_struct *vma)
{ {
struct qib_mmap_info *ip = vma->vm_private_data; struct rvt_mmap_info *ip = vma->vm_private_data;
kref_get(&ip->ref); kref_get(&ip->ref);
} }
static void qib_vma_close(struct vm_area_struct *vma) static void qib_vma_close(struct vm_area_struct *vma)
{ {
struct qib_mmap_info *ip = vma->vm_private_data; struct rvt_mmap_info *ip = vma->vm_private_data;
kref_put(&ip->ref, qib_release_mmap_info); kref_put(&ip->ref, qib_release_mmap_info);
} }
...@@ -91,7 +91,7 @@ int qib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) ...@@ -91,7 +91,7 @@ int qib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
struct qib_ibdev *dev = to_idev(context->device); struct qib_ibdev *dev = to_idev(context->device);
unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
unsigned long size = vma->vm_end - vma->vm_start; unsigned long size = vma->vm_end - vma->vm_start;
struct qib_mmap_info *ip, *pp; struct rvt_mmap_info *ip, *pp;
int ret = -EINVAL; int ret = -EINVAL;
/* /*
...@@ -128,11 +128,11 @@ int qib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma) ...@@ -128,11 +128,11 @@ int qib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
/* /*
* Allocate information for qib_mmap * Allocate information for qib_mmap
*/ */
struct qib_mmap_info *qib_create_mmap_info(struct qib_ibdev *dev, struct rvt_mmap_info *qib_create_mmap_info(struct qib_ibdev *dev,
u32 size, u32 size,
struct ib_ucontext *context, struct ib_ucontext *context,
void *obj) { void *obj) {
struct qib_mmap_info *ip; struct rvt_mmap_info *ip;
ip = kmalloc(sizeof(*ip), GFP_KERNEL); ip = kmalloc(sizeof(*ip), GFP_KERNEL);
if (!ip) if (!ip)
...@@ -157,7 +157,7 @@ struct qib_mmap_info *qib_create_mmap_info(struct qib_ibdev *dev, ...@@ -157,7 +157,7 @@ struct qib_mmap_info *qib_create_mmap_info(struct qib_ibdev *dev,
return ip; return ip;
} }
void qib_update_mmap_info(struct qib_ibdev *dev, struct qib_mmap_info *ip, void qib_update_mmap_info(struct qib_ibdev *dev, struct rvt_mmap_info *ip,
u32 size, void *obj) u32 size, void *obj)
{ {
size = PAGE_ALIGN(size); size = PAGE_ALIGN(size);
......
/*
* Copyright (c) 2006, 2007, 2008, 2009 QLogic Corporation. All rights reserved.
* Copyright (c) 2005, 2006 PathScale, Inc. All rights reserved.
*
* This software is available to you under a choice of one of two
* licenses. You may choose to be licensed under the terms of the GNU
* General Public License (GPL) Version 2, available from the file
* COPYING in the main directory of this source tree, or the
* OpenIB.org BSD license below:
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
*
* - Redistributions of source code must retain the above
* copyright notice, this list of conditions and the following
* disclaimer.
*
* - Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include <rdma/ib_umem.h>
#include <rdma/ib_smi.h>
#include "qib.h"
/* Fast memory region */
struct qib_fmr {
struct ib_fmr ibfmr;
struct qib_mregion mr; /* must be last */
};
static inline struct qib_fmr *to_ifmr(struct ib_fmr *ibfmr)
{
return container_of(ibfmr, struct qib_fmr, ibfmr);
}
static int init_qib_mregion(struct qib_mregion *mr, struct ib_pd *pd,
int count)
{
int m, i = 0;
int rval = 0;
m = (count + QIB_SEGSZ - 1) / QIB_SEGSZ;
for (; i < m; i++) {
mr->map[i] = kzalloc(sizeof(*mr->map[0]), GFP_KERNEL);
if (!mr->map[i])
goto bail;
}
mr->mapsz = m;
init_completion(&mr->comp);
/* count returning the ptr to user */
atomic_set(&mr->refcount, 1);
mr->pd = pd;
mr->max_segs = count;
out:
return rval;
bail:
while (i)
kfree(mr->map[--i]);
rval = -ENOMEM;
goto out;
}
static void deinit_qib_mregion(struct qib_mregion *mr)
{
int i = mr->mapsz;
mr->mapsz = 0;
while (i)
kfree(mr->map[--i]);
}
/**
* qib_get_dma_mr - get a DMA memory region
* @pd: protection domain for this memory region
* @acc: access flags
*
* Returns the memory region on success, otherwise returns an errno.
* Note that all DMA addresses should be created via the
* struct ib_dma_mapping_ops functions (see qib_dma.c).
*/
struct ib_mr *qib_get_dma_mr(struct ib_pd *pd, int acc)
{
struct qib_mr *mr = NULL;
struct ib_mr *ret;
int rval;
if (ibpd_to_rvtpd(pd)->user) {
ret = ERR_PTR(-EPERM);
goto bail;
}
mr = kzalloc(sizeof(*mr), GFP_KERNEL);
if (!mr) {
ret = ERR_PTR(-ENOMEM);
goto bail;
}
rval = init_qib_mregion(&mr->mr, pd, 0);
if (rval) {
ret = ERR_PTR(rval);
goto bail;
}
rval = qib_alloc_lkey(&mr->mr, 1);
if (rval) {
ret = ERR_PTR(rval);
goto bail_mregion;
}
mr->mr.access_flags = acc;
ret = &mr->ibmr;
done:
return ret;
bail_mregion:
deinit_qib_mregion(&mr->mr);
bail:
kfree(mr);
goto done;
}
static struct qib_mr *alloc_mr(int count, struct ib_pd *pd)
{
struct qib_mr *mr;
int rval = -ENOMEM;
int m;
/* Allocate struct plus pointers to first level page tables. */
m = (count + QIB_SEGSZ - 1) / QIB_SEGSZ;
mr = kzalloc(sizeof(*mr) + m * sizeof(mr->mr.map[0]), GFP_KERNEL);
if (!mr)
goto bail;
rval = init_qib_mregion(&mr->mr, pd, count);
if (rval)
goto bail;
rval = qib_alloc_lkey(&mr->mr, 0);
if (rval)
goto bail_mregion;
mr->ibmr.lkey = mr->mr.lkey;
mr->ibmr.rkey = mr->mr.lkey;
done:
return mr;
bail_mregion:
deinit_qib_mregion(&mr->mr);
bail:
kfree(mr);
mr = ERR_PTR(rval);
goto done;
}
/**
* qib_reg_user_mr - register a userspace memory region
* @pd: protection domain for this memory region
* @start: starting userspace address
* @length: length of region to register
* @mr_access_flags: access flags for this memory region
* @udata: unused by the QLogic_IB driver
*
* Returns the memory region on success, otherwise returns an errno.
*/
struct ib_mr *qib_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
u64 virt_addr, int mr_access_flags,
struct ib_udata *udata)
{
struct qib_mr *mr;
struct ib_umem *umem;
struct scatterlist *sg;
int n, m, entry;
struct ib_mr *ret;
if (length == 0) {
ret = ERR_PTR(-EINVAL);
goto bail;
}
umem = ib_umem_get(pd->uobject->context, start, length,
mr_access_flags, 0);
if (IS_ERR(umem))
return (void *) umem;
n = umem->nmap;
mr = alloc_mr(n, pd);
if (IS_ERR(mr)) {
ret = (struct ib_mr *)mr;
ib_umem_release(umem);
goto bail;
}
mr->mr.user_base = start;
mr->mr.iova = virt_addr;
mr->mr.length = length;
mr->mr.offset = ib_umem_offset(umem);
mr->mr.access_flags = mr_access_flags;
mr->umem = umem;
if (is_power_of_2(umem->page_size))
mr->mr.page_shift = ilog2(umem->page_size);
m = 0;
n = 0;
for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {
void *vaddr;
vaddr = page_address(sg_page(sg));
if (!vaddr) {
ret = ERR_PTR(-EINVAL);
goto bail;
}
mr->mr.map[m]->segs[n].vaddr = vaddr;
mr->mr.map[m]->segs[n].length = umem->page_size;
n++;
if (n == QIB_SEGSZ) {
m++;
n = 0;
}
}
ret = &mr->ibmr;
bail:
return ret;
}
/**
* qib_dereg_mr - unregister and free a memory region
* @ibmr: the memory region to free
*
* Returns 0 on success.
*
* Note that this is called to free MRs created by qib_get_dma_mr()
* or qib_reg_user_mr().
*/
int qib_dereg_mr(struct ib_mr *ibmr)
{
struct qib_mr *mr = to_imr(ibmr);
int ret = 0;
unsigned long timeout;
kfree(mr->pages);
qib_free_lkey(&mr->mr);
qib_put_mr(&mr->mr); /* will set completion if last */
timeout = wait_for_completion_timeout(&mr->mr.comp,
5 * HZ);
if (!timeout) {
qib_get_mr(&mr->mr);
ret = -EBUSY;
goto out;
}
deinit_qib_mregion(&mr->mr);
if (mr->umem)
ib_umem_release(mr->umem);
kfree(mr);
out:
return ret;
}
/*
* Allocate a memory region usable with the
* IB_WR_REG_MR send work request.
*
* Return the memory region on success, otherwise return an errno.
*/
struct ib_mr *qib_alloc_mr(struct ib_pd *pd,
enum ib_mr_type mr_type,
u32 max_num_sg)
{
struct qib_mr *mr;
if (mr_type != IB_MR_TYPE_MEM_REG)
return ERR_PTR(-EINVAL);
mr = alloc_mr(max_num_sg, pd);
if (IS_ERR(mr))
return (struct ib_mr *)mr;
mr->pages = kcalloc(max_num_sg, sizeof(u64), GFP_KERNEL);
if (!mr->pages)
goto err;
return &mr->ibmr;
err:
qib_dereg_mr(&mr->ibmr);
return ERR_PTR(-ENOMEM);
}
static int qib_set_page(struct ib_mr *ibmr, u64 addr)
{
struct qib_mr *mr = to_imr(ibmr);
if (unlikely(mr->npages == mr->mr.max_segs))
return -ENOMEM;
mr->pages[mr->npages++] = addr;
return 0;
}
int qib_map_mr_sg(struct ib_mr *ibmr,
struct scatterlist *sg,
int sg_nents)
{
struct qib_mr *mr = to_imr(ibmr);
mr->npages = 0;
return ib_sg_to_pages(ibmr, sg, sg_nents, qib_set_page);
}
/**
* qib_alloc_fmr - allocate a fast memory region
* @pd: the protection domain for this memory region
* @mr_access_flags: access flags for this memory region
* @fmr_attr: fast memory region attributes
*
* Returns the memory region on success, otherwise returns an errno.
*/
struct ib_fmr *qib_alloc_fmr(struct ib_pd *pd, int mr_access_flags,
struct ib_fmr_attr *fmr_attr)
{
struct qib_fmr *fmr;
int m;
struct ib_fmr *ret;
int rval = -ENOMEM;
/* Allocate struct plus pointers to first level page tables. */
m = (fmr_attr->max_pages + QIB_SEGSZ - 1) / QIB_SEGSZ;
fmr = kzalloc(sizeof(*fmr) + m * sizeof(fmr->mr.map[0]), GFP_KERNEL);
if (!fmr)
goto bail;
rval = init_qib_mregion(&fmr->mr, pd, fmr_attr->max_pages);
if (rval)
goto bail;
/*
* ib_alloc_fmr() will initialize fmr->ibfmr except for lkey &
* rkey.
*/
rval = qib_alloc_lkey(&fmr->mr, 0);
if (rval)
goto bail_mregion;
fmr->ibfmr.rkey = fmr->mr.lkey;
fmr->ibfmr.lkey = fmr->mr.lkey;
/*
* Resources are allocated but no valid mapping (RKEY can't be
* used).
*/
fmr->mr.access_flags = mr_access_flags;
fmr->mr.max_segs = fmr_attr->max_pages;
fmr->mr.page_shift = fmr_attr->page_shift;
ret = &fmr->ibfmr;
done:
return ret;
bail_mregion:
deinit_qib_mregion(&fmr->mr);
bail:
kfree(fmr);
ret = ERR_PTR(rval);
goto done;
}
/**
* qib_map_phys_fmr - set up a fast memory region
* @ibmfr: the fast memory region to set up
* @page_list: the list of pages to associate with the fast memory region
* @list_len: the number of pages to associate with the fast memory region
* @iova: the virtual address of the start of the fast memory region
*
* This may be called from interrupt context.
*/
int qib_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list,
int list_len, u64 iova)
{
struct qib_fmr *fmr = to_ifmr(ibfmr);
struct qib_lkey_table *rkt;
unsigned long flags;
int m, n, i;
u32 ps;
int ret;
i = atomic_read(&fmr->mr.refcount);
if (i > 2)
return -EBUSY;
if (list_len > fmr->mr.max_segs) {
ret = -EINVAL;
goto bail;
}
rkt = &to_idev(ibfmr->device)->lk_table;
spin_lock_irqsave(&rkt->lock, flags);
fmr->mr.user_base = iova;
fmr->mr.iova = iova;
ps = 1 << fmr->mr.page_shift;
fmr->mr.length = list_len * ps;
m = 0;
n = 0;
for (i = 0; i < list_len; i++) {
fmr->mr.map[m]->segs[n].vaddr = (void *) page_list[i];
fmr->mr.map[m]->segs[n].length = ps;
if (++n == QIB_SEGSZ) {
m++;
n = 0;
}
}
spin_unlock_irqrestore(&rkt->lock, flags);
ret = 0;
bail:
return ret;
}
/**
* qib_unmap_fmr - unmap fast memory regions
* @fmr_list: the list of fast memory regions to unmap
*
* Returns 0 on success.
*/
int qib_unmap_fmr(struct list_head *fmr_list)
{
struct qib_fmr *fmr;
struct qib_lkey_table *rkt;
unsigned long flags;
list_for_each_entry(fmr, fmr_list, ibfmr.list) {
rkt = &to_idev(fmr->ibfmr.device)->lk_table;
spin_lock_irqsave(&rkt->lock, flags);
fmr->mr.user_base = 0;
fmr->mr.iova = 0;
fmr->mr.length = 0;
spin_unlock_irqrestore(&rkt->lock, flags);
}
return 0;
}
/**
* qib_dealloc_fmr - deallocate a fast memory region
* @ibfmr: the fast memory region to deallocate
*
* Returns 0 on success.
*/
int qib_dealloc_fmr(struct ib_fmr *ibfmr)
{
struct qib_fmr *fmr = to_ifmr(ibfmr);
int ret = 0;
unsigned long timeout;
qib_free_lkey(&fmr->mr);
qib_put_mr(&fmr->mr); /* will set completion if last */
timeout = wait_for_completion_timeout(&fmr->mr.comp,
5 * HZ);
if (!timeout) {
qib_get_mr(&fmr->mr);
ret = -EBUSY;
goto out;
}
deinit_qib_mregion(&fmr->mr);
kfree(fmr);
out:
return ret;
}
void mr_rcu_callback(struct rcu_head *list)
{
struct qib_mregion *mr = container_of(list, struct qib_mregion, list);
complete(&mr->comp);
}
...@@ -221,7 +221,7 @@ static inline unsigned qpn_hash(struct qib_ibdev *dev, u32 qpn) ...@@ -221,7 +221,7 @@ static inline unsigned qpn_hash(struct qib_ibdev *dev, u32 qpn)
* Put the QP into the hash table. * Put the QP into the hash table.
* The hash table holds a reference to the QP. * The hash table holds a reference to the QP.
*/ */
static void insert_qp(struct qib_ibdev *dev, struct qib_qp *qp) static void insert_qp(struct qib_ibdev *dev, struct rvt_qp *qp)
{ {
struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
unsigned long flags; unsigned long flags;
...@@ -246,7 +246,7 @@ static void insert_qp(struct qib_ibdev *dev, struct qib_qp *qp) ...@@ -246,7 +246,7 @@ static void insert_qp(struct qib_ibdev *dev, struct qib_qp *qp)
* Remove the QP from the table so it can't be found asynchronously by * Remove the QP from the table so it can't be found asynchronously by
* the receive interrupt routine. * the receive interrupt routine.
*/ */
static void remove_qp(struct qib_ibdev *dev, struct qib_qp *qp) static void remove_qp(struct qib_ibdev *dev, struct rvt_qp *qp)
{ {
struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
unsigned n = qpn_hash(dev, qp->ibqp.qp_num); unsigned n = qpn_hash(dev, qp->ibqp.qp_num);
...@@ -262,8 +262,8 @@ static void remove_qp(struct qib_ibdev *dev, struct qib_qp *qp) ...@@ -262,8 +262,8 @@ static void remove_qp(struct qib_ibdev *dev, struct qib_qp *qp)
lockdep_is_held(&dev->qpt_lock)) == qp) { lockdep_is_held(&dev->qpt_lock)) == qp) {
RCU_INIT_POINTER(ibp->qp1, NULL); RCU_INIT_POINTER(ibp->qp1, NULL);
} else { } else {
struct qib_qp *q; struct rvt_qp *q;
struct qib_qp __rcu **qpp; struct rvt_qp __rcu **qpp;
removed = 0; removed = 0;
qpp = &dev->qp_table[n]; qpp = &dev->qp_table[n];
...@@ -297,7 +297,7 @@ unsigned qib_free_all_qps(struct qib_devdata *dd) ...@@ -297,7 +297,7 @@ unsigned qib_free_all_qps(struct qib_devdata *dd)
{ {
struct qib_ibdev *dev = &dd->verbs_dev; struct qib_ibdev *dev = &dd->verbs_dev;
unsigned long flags; unsigned long flags;
struct qib_qp *qp; struct rvt_qp *qp;
unsigned n, qp_inuse = 0; unsigned n, qp_inuse = 0;
for (n = 0; n < dd->num_pports; n++) { for (n = 0; n < dd->num_pports; n++) {
...@@ -337,9 +337,9 @@ unsigned qib_free_all_qps(struct qib_devdata *dd) ...@@ -337,9 +337,9 @@ unsigned qib_free_all_qps(struct qib_devdata *dd)
* The caller is responsible for decrementing the QP reference count * The caller is responsible for decrementing the QP reference count
* when done. * when done.
*/ */
struct qib_qp *qib_lookup_qpn(struct qib_ibport *ibp, u32 qpn) struct rvt_qp *qib_lookup_qpn(struct qib_ibport *ibp, u32 qpn)
{ {
struct qib_qp *qp = NULL; struct rvt_qp *qp = NULL;
rcu_read_lock(); rcu_read_lock();
if (unlikely(qpn <= 1)) { if (unlikely(qpn <= 1)) {
...@@ -369,7 +369,7 @@ struct qib_qp *qib_lookup_qpn(struct qib_ibport *ibp, u32 qpn) ...@@ -369,7 +369,7 @@ struct qib_qp *qib_lookup_qpn(struct qib_ibport *ibp, u32 qpn)
* @qp: the QP to reset * @qp: the QP to reset
* @type: the QP type * @type: the QP type
*/ */
static void qib_reset_qp(struct qib_qp *qp, enum ib_qp_type type) static void qib_reset_qp(struct rvt_qp *qp, enum ib_qp_type type)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
qp->remote_qpn = 0; qp->remote_qpn = 0;
...@@ -417,7 +417,7 @@ static void qib_reset_qp(struct qib_qp *qp, enum ib_qp_type type) ...@@ -417,7 +417,7 @@ static void qib_reset_qp(struct qib_qp *qp, enum ib_qp_type type)
qp->r_sge.num_sge = 0; qp->r_sge.num_sge = 0;
} }
static void clear_mr_refs(struct qib_qp *qp, int clr_sends) static void clear_mr_refs(struct rvt_qp *qp, int clr_sends)
{ {
unsigned n; unsigned n;
...@@ -428,13 +428,13 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends) ...@@ -428,13 +428,13 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends)
if (clr_sends) { if (clr_sends) {
while (qp->s_last != qp->s_head) { while (qp->s_last != qp->s_head) {
struct qib_swqe *wqe = get_swqe_ptr(qp, qp->s_last); struct rvt_swqe *wqe = get_swqe_ptr(qp, qp->s_last);
unsigned i; unsigned i;
for (i = 0; i < wqe->wr.num_sge; i++) { for (i = 0; i < wqe->wr.num_sge; i++) {
struct qib_sge *sge = &wqe->sg_list[i]; struct rvt_sge *sge = &wqe->sg_list[i];
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
} }
if (qp->ibqp.qp_type == IB_QPT_UD || if (qp->ibqp.qp_type == IB_QPT_UD ||
qp->ibqp.qp_type == IB_QPT_SMI || qp->ibqp.qp_type == IB_QPT_SMI ||
...@@ -444,7 +444,7 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends) ...@@ -444,7 +444,7 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends)
qp->s_last = 0; qp->s_last = 0;
} }
if (qp->s_rdma_mr) { if (qp->s_rdma_mr) {
qib_put_mr(qp->s_rdma_mr); rvt_put_mr(qp->s_rdma_mr);
qp->s_rdma_mr = NULL; qp->s_rdma_mr = NULL;
} }
} }
...@@ -453,11 +453,11 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends) ...@@ -453,11 +453,11 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends)
return; return;
for (n = 0; n < ARRAY_SIZE(qp->s_ack_queue); n++) { for (n = 0; n < ARRAY_SIZE(qp->s_ack_queue); n++) {
struct qib_ack_entry *e = &qp->s_ack_queue[n]; struct rvt_ack_entry *e = &qp->s_ack_queue[n];
if (e->opcode == IB_OPCODE_RC_RDMA_READ_REQUEST && if (e->opcode == IB_OPCODE_RC_RDMA_READ_REQUEST &&
e->rdma_sge.mr) { e->rdma_sge.mr) {
qib_put_mr(e->rdma_sge.mr); rvt_put_mr(e->rdma_sge.mr);
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
} }
} }
...@@ -473,7 +473,7 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends) ...@@ -473,7 +473,7 @@ static void clear_mr_refs(struct qib_qp *qp, int clr_sends)
* The QP r_lock and s_lock should be held and interrupts disabled. * The QP r_lock and s_lock should be held and interrupts disabled.
* If we are already in error state, just return. * If we are already in error state, just return.
*/ */
int qib_error_qp(struct qib_qp *qp, enum ib_wc_status err) int qib_error_qp(struct rvt_qp *qp, enum ib_wc_status err)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
struct qib_ibdev *dev = to_idev(qp->ibqp.device); struct qib_ibdev *dev = to_idev(qp->ibqp.device);
...@@ -503,7 +503,7 @@ int qib_error_qp(struct qib_qp *qp, enum ib_wc_status err) ...@@ -503,7 +503,7 @@ int qib_error_qp(struct qib_qp *qp, enum ib_wc_status err)
if (!(qp->s_flags & QIB_S_BUSY)) { if (!(qp->s_flags & QIB_S_BUSY)) {
qp->s_hdrwords = 0; qp->s_hdrwords = 0;
if (qp->s_rdma_mr) { if (qp->s_rdma_mr) {
qib_put_mr(qp->s_rdma_mr); rvt_put_mr(qp->s_rdma_mr);
qp->s_rdma_mr = NULL; qp->s_rdma_mr = NULL;
} }
if (priv->s_tx) { if (priv->s_tx) {
...@@ -530,7 +530,7 @@ int qib_error_qp(struct qib_qp *qp, enum ib_wc_status err) ...@@ -530,7 +530,7 @@ int qib_error_qp(struct qib_qp *qp, enum ib_wc_status err)
wc.status = IB_WC_WR_FLUSH_ERR; wc.status = IB_WC_WR_FLUSH_ERR;
if (qp->r_rq.wq) { if (qp->r_rq.wq) {
struct qib_rwq *wq; struct rvt_rwq *wq;
u32 head; u32 head;
u32 tail; u32 tail;
...@@ -573,7 +573,7 @@ int qib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, ...@@ -573,7 +573,7 @@ int qib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
int attr_mask, struct ib_udata *udata) int attr_mask, struct ib_udata *udata)
{ {
struct qib_ibdev *dev = to_idev(ibqp->device); struct qib_ibdev *dev = to_idev(ibqp->device);
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
enum ib_qp_state cur_state, new_state; enum ib_qp_state cur_state, new_state;
struct ib_event ev; struct ib_event ev;
...@@ -861,7 +861,7 @@ int qib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, ...@@ -861,7 +861,7 @@ 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)
{ {
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
attr->qp_state = qp->state; attr->qp_state = qp->state;
attr->cur_qp_state = attr->qp_state; attr->cur_qp_state = attr->qp_state;
...@@ -914,7 +914,7 @@ int qib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, ...@@ -914,7 +914,7 @@ int qib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
* *
* Returns the AETH. * Returns the AETH.
*/ */
__be32 qib_compute_aeth(struct qib_qp *qp) __be32 qib_compute_aeth(struct rvt_qp *qp)
{ {
u32 aeth = qp->r_msn & QIB_MSN_MASK; u32 aeth = qp->r_msn & QIB_MSN_MASK;
...@@ -927,7 +927,7 @@ __be32 qib_compute_aeth(struct qib_qp *qp) ...@@ -927,7 +927,7 @@ __be32 qib_compute_aeth(struct qib_qp *qp)
} else { } else {
u32 min, max, x; u32 min, max, x;
u32 credits; u32 credits;
struct qib_rwq *wq = qp->r_rq.wq; struct rvt_rwq *wq = qp->r_rq.wq;
u32 head; u32 head;
u32 tail; u32 tail;
...@@ -982,9 +982,9 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, ...@@ -982,9 +982,9 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
struct ib_qp_init_attr *init_attr, struct ib_qp_init_attr *init_attr,
struct ib_udata *udata) struct ib_udata *udata)
{ {
struct qib_qp *qp; struct rvt_qp *qp;
int err; int err;
struct qib_swqe *swq = NULL; struct rvt_swqe *swq = NULL;
struct qib_ibdev *dev; struct qib_ibdev *dev;
struct qib_devdata *dd; struct qib_devdata *dd;
size_t sz; size_t sz;
...@@ -1033,9 +1033,9 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, ...@@ -1033,9 +1033,9 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
case IB_QPT_UC: case IB_QPT_UC:
case IB_QPT_RC: case IB_QPT_RC:
case IB_QPT_UD: case IB_QPT_UD:
sz = sizeof(struct qib_sge) * sz = sizeof(struct rvt_sge) *
init_attr->cap.max_send_sge + init_attr->cap.max_send_sge +
sizeof(struct qib_swqe); sizeof(struct rvt_swqe);
swq = __vmalloc((init_attr->cap.max_send_wr + 1) * sz, swq = __vmalloc((init_attr->cap.max_send_wr + 1) * sz,
gfp, PAGE_KERNEL); gfp, PAGE_KERNEL);
if (swq == NULL) { if (swq == NULL) {
...@@ -1080,14 +1080,14 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, ...@@ -1080,14 +1080,14 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
qp->r_rq.size = init_attr->cap.max_recv_wr + 1; qp->r_rq.size = init_attr->cap.max_recv_wr + 1;
qp->r_rq.max_sge = init_attr->cap.max_recv_sge; qp->r_rq.max_sge = init_attr->cap.max_recv_sge;
sz = (sizeof(struct ib_sge) * qp->r_rq.max_sge) + sz = (sizeof(struct ib_sge) * qp->r_rq.max_sge) +
sizeof(struct qib_rwqe); sizeof(struct rvt_rwqe);
if (gfp != GFP_NOIO) if (gfp != GFP_NOIO)
qp->r_rq.wq = vmalloc_user( qp->r_rq.wq = vmalloc_user(
sizeof(struct qib_rwq) + sizeof(struct rvt_rwq) +
qp->r_rq.size * sz); qp->r_rq.size * sz);
else else
qp->r_rq.wq = __vmalloc( qp->r_rq.wq = __vmalloc(
sizeof(struct qib_rwq) + sizeof(struct rvt_rwq) +
qp->r_rq.size * sz, qp->r_rq.size * sz,
gfp, PAGE_KERNEL); gfp, PAGE_KERNEL);
...@@ -1155,7 +1155,7 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, ...@@ -1155,7 +1155,7 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
goto bail_ip; goto bail_ip;
} }
} else { } else {
u32 s = sizeof(struct qib_rwq) + qp->r_rq.size * sz; u32 s = sizeof(struct rvt_rwq) + qp->r_rq.size * sz;
qp->ip = qib_create_mmap_info(dev, s, qp->ip = qib_create_mmap_info(dev, s,
ibpd->uobject->context, ibpd->uobject->context,
...@@ -1221,7 +1221,7 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, ...@@ -1221,7 +1221,7 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
*/ */
int qib_destroy_qp(struct ib_qp *ibqp) int qib_destroy_qp(struct ib_qp *ibqp)
{ {
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
struct qib_ibdev *dev = to_idev(ibqp->device); struct qib_ibdev *dev = to_idev(ibqp->device);
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
...@@ -1297,7 +1297,7 @@ void qib_free_qpn_table(struct qib_qpn_table *qpt) ...@@ -1297,7 +1297,7 @@ void qib_free_qpn_table(struct qib_qpn_table *qpt)
* *
* The QP s_lock should be held. * The QP s_lock should be held.
*/ */
void qib_get_credit(struct qib_qp *qp, u32 aeth) void qib_get_credit(struct rvt_qp *qp, u32 aeth)
{ {
u32 credit = (aeth >> QIB_AETH_CREDIT_SHIFT) & QIB_AETH_CREDIT_MASK; u32 credit = (aeth >> QIB_AETH_CREDIT_SHIFT) & QIB_AETH_CREDIT_MASK;
...@@ -1331,7 +1331,7 @@ void qib_get_credit(struct qib_qp *qp, u32 aeth) ...@@ -1331,7 +1331,7 @@ void qib_get_credit(struct qib_qp *qp, u32 aeth)
struct qib_qp_iter { struct qib_qp_iter {
struct qib_ibdev *dev; struct qib_ibdev *dev;
struct qib_qp *qp; struct rvt_qp *qp;
int n; int n;
}; };
...@@ -1357,8 +1357,8 @@ int qib_qp_iter_next(struct qib_qp_iter *iter) ...@@ -1357,8 +1357,8 @@ int qib_qp_iter_next(struct qib_qp_iter *iter)
struct qib_ibdev *dev = iter->dev; struct qib_ibdev *dev = iter->dev;
int n = iter->n; int n = iter->n;
int ret = 1; int ret = 1;
struct qib_qp *pqp = iter->qp; struct rvt_qp *pqp = iter->qp;
struct qib_qp *qp; struct rvt_qp *qp;
for (; n < dev->qp_table_size; n++) { for (; n < dev->qp_table_size; n++) {
if (pqp) if (pqp)
...@@ -1381,8 +1381,8 @@ static const char * const qp_type_str[] = { ...@@ -1381,8 +1381,8 @@ static const char * const qp_type_str[] = {
void qib_qp_iter_print(struct seq_file *s, struct qib_qp_iter *iter) void qib_qp_iter_print(struct seq_file *s, struct qib_qp_iter *iter)
{ {
struct qib_swqe *wqe; struct rvt_swqe *wqe;
struct qib_qp *qp = iter->qp; struct rvt_qp *qp = iter->qp;
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
wqe = get_swqe_ptr(qp, qp->s_last); wqe = get_swqe_ptr(qp, qp->s_last);
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
static void rc_timeout(unsigned long arg); static void rc_timeout(unsigned long arg);
static u32 restart_sge(struct qib_sge_state *ss, struct qib_swqe *wqe, static u32 restart_sge(struct rvt_sge_state *ss, struct rvt_swqe *wqe,
u32 psn, u32 pmtu) u32 psn, u32 pmtu)
{ {
u32 len; u32 len;
...@@ -54,7 +54,7 @@ static u32 restart_sge(struct qib_sge_state *ss, struct qib_swqe *wqe, ...@@ -54,7 +54,7 @@ static u32 restart_sge(struct qib_sge_state *ss, struct qib_swqe *wqe,
return wqe->length - len; return wqe->length - len;
} }
static void start_timer(struct qib_qp *qp) static void start_timer(struct rvt_qp *qp)
{ {
qp->s_flags |= QIB_S_TIMER; qp->s_flags |= QIB_S_TIMER;
qp->s_timer.function = rc_timeout; qp->s_timer.function = rc_timeout;
...@@ -74,10 +74,10 @@ static void start_timer(struct qib_qp *qp) ...@@ -74,10 +74,10 @@ static void start_timer(struct qib_qp *qp)
* Note that we are in the responder's side of the QP context. * Note that we are in the responder's side of the QP context.
* Note the QP s_lock must be held. * Note the QP s_lock must be held.
*/ */
static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp, static int qib_make_rc_ack(struct qib_ibdev *dev, struct rvt_qp *qp,
struct qib_other_headers *ohdr, u32 pmtu) struct qib_other_headers *ohdr, u32 pmtu)
{ {
struct qib_ack_entry *e; struct rvt_ack_entry *e;
u32 hwords; u32 hwords;
u32 len; u32 len;
u32 bth0; u32 bth0;
...@@ -95,7 +95,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp, ...@@ -95,7 +95,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp,
case OP(RDMA_READ_RESPONSE_ONLY): case OP(RDMA_READ_RESPONSE_ONLY):
e = &qp->s_ack_queue[qp->s_tail_ack_queue]; e = &qp->s_ack_queue[qp->s_tail_ack_queue];
if (e->rdma_sge.mr) { if (e->rdma_sge.mr) {
qib_put_mr(e->rdma_sge.mr); rvt_put_mr(e->rdma_sge.mr);
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
} }
/* FALLTHROUGH */ /* FALLTHROUGH */
...@@ -133,7 +133,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp, ...@@ -133,7 +133,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp,
/* Copy SGE state in case we need to resend */ /* Copy SGE state in case we need to resend */
qp->s_rdma_mr = e->rdma_sge.mr; qp->s_rdma_mr = e->rdma_sge.mr;
if (qp->s_rdma_mr) if (qp->s_rdma_mr)
qib_get_mr(qp->s_rdma_mr); rvt_get_mr(qp->s_rdma_mr);
qp->s_ack_rdma_sge.sge = e->rdma_sge; qp->s_ack_rdma_sge.sge = e->rdma_sge;
qp->s_ack_rdma_sge.num_sge = 1; qp->s_ack_rdma_sge.num_sge = 1;
qp->s_cur_sge = &qp->s_ack_rdma_sge; qp->s_cur_sge = &qp->s_ack_rdma_sge;
...@@ -172,7 +172,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp, ...@@ -172,7 +172,7 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp,
qp->s_cur_sge = &qp->s_ack_rdma_sge; qp->s_cur_sge = &qp->s_ack_rdma_sge;
qp->s_rdma_mr = qp->s_ack_rdma_sge.sge.mr; qp->s_rdma_mr = qp->s_ack_rdma_sge.sge.mr;
if (qp->s_rdma_mr) if (qp->s_rdma_mr)
qib_get_mr(qp->s_rdma_mr); rvt_get_mr(qp->s_rdma_mr);
len = qp->s_ack_rdma_sge.sge.sge_length; len = qp->s_ack_rdma_sge.sge.sge_length;
if (len > pmtu) if (len > pmtu)
len = pmtu; len = pmtu;
...@@ -228,13 +228,13 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp, ...@@ -228,13 +228,13 @@ static int qib_make_rc_ack(struct qib_ibdev *dev, struct qib_qp *qp,
* *
* Return 1 if constructed; otherwise, return 0. * Return 1 if constructed; otherwise, return 0.
*/ */
int qib_make_rc_req(struct qib_qp *qp) int qib_make_rc_req(struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
struct qib_ibdev *dev = to_idev(qp->ibqp.device); struct qib_ibdev *dev = to_idev(qp->ibqp.device);
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
struct qib_sge_state *ss; struct rvt_sge_state *ss;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
u32 hwords; u32 hwords;
u32 len; u32 len;
u32 bth0; u32 bth0;
...@@ -648,7 +648,7 @@ int qib_make_rc_req(struct qib_qp *qp) ...@@ -648,7 +648,7 @@ int qib_make_rc_req(struct qib_qp *qp)
* Note that RDMA reads and atomics are handled in the * Note that RDMA reads and atomics are handled in the
* send side QP state and tasklet. * send side QP state and tasklet.
*/ */
void qib_send_rc_ack(struct qib_qp *qp) void qib_send_rc_ack(struct rvt_qp *qp)
{ {
struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device); struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
...@@ -783,10 +783,10 @@ void qib_send_rc_ack(struct qib_qp *qp) ...@@ -783,10 +783,10 @@ void qib_send_rc_ack(struct qib_qp *qp)
* for the given QP. * for the given QP.
* Called at interrupt level with the QP s_lock held. * Called at interrupt level with the QP s_lock held.
*/ */
static void reset_psn(struct qib_qp *qp, u32 psn) static void reset_psn(struct rvt_qp *qp, u32 psn)
{ {
u32 n = qp->s_acked; u32 n = qp->s_acked;
struct qib_swqe *wqe = get_swqe_ptr(qp, n); struct rvt_swqe *wqe = get_swqe_ptr(qp, n);
u32 opcode; u32 opcode;
qp->s_cur = n; qp->s_cur = n;
...@@ -868,9 +868,9 @@ static void reset_psn(struct qib_qp *qp, u32 psn) ...@@ -868,9 +868,9 @@ static void reset_psn(struct qib_qp *qp, u32 psn)
* Back up requester to resend the last un-ACKed request. * Back up requester to resend the last un-ACKed request.
* The QP r_lock and s_lock should be held and interrupts disabled. * The QP r_lock and s_lock should be held and interrupts disabled.
*/ */
static void qib_restart_rc(struct qib_qp *qp, u32 psn, int wait) static void qib_restart_rc(struct rvt_qp *qp, u32 psn, int wait)
{ {
struct qib_swqe *wqe = get_swqe_ptr(qp, qp->s_acked); struct rvt_swqe *wqe = get_swqe_ptr(qp, qp->s_acked);
struct qib_ibport *ibp; struct qib_ibport *ibp;
if (qp->s_retry == 0) { if (qp->s_retry == 0) {
...@@ -905,7 +905,7 @@ static void qib_restart_rc(struct qib_qp *qp, u32 psn, int wait) ...@@ -905,7 +905,7 @@ static void qib_restart_rc(struct qib_qp *qp, u32 psn, int wait)
*/ */
static void rc_timeout(unsigned long arg) static void rc_timeout(unsigned long arg)
{ {
struct qib_qp *qp = (struct qib_qp *)arg; struct rvt_qp *qp = (struct rvt_qp *)arg;
struct qib_ibport *ibp; struct qib_ibport *ibp;
unsigned long flags; unsigned long flags;
...@@ -928,7 +928,7 @@ static void rc_timeout(unsigned long arg) ...@@ -928,7 +928,7 @@ static void rc_timeout(unsigned long arg)
*/ */
void qib_rc_rnr_retry(unsigned long arg) void qib_rc_rnr_retry(unsigned long arg)
{ {
struct qib_qp *qp = (struct qib_qp *)arg; struct rvt_qp *qp = (struct rvt_qp *)arg;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&qp->s_lock, flags); spin_lock_irqsave(&qp->s_lock, flags);
...@@ -944,9 +944,9 @@ void qib_rc_rnr_retry(unsigned long arg) ...@@ -944,9 +944,9 @@ void qib_rc_rnr_retry(unsigned long arg)
* Set qp->s_sending_psn to the next PSN after the given one. * Set qp->s_sending_psn to the next PSN after the given one.
* This would be psn+1 except when RDMA reads are present. * This would be psn+1 except when RDMA reads are present.
*/ */
static void reset_sending_psn(struct qib_qp *qp, u32 psn) static void reset_sending_psn(struct rvt_qp *qp, u32 psn)
{ {
struct qib_swqe *wqe; struct rvt_swqe *wqe;
u32 n = qp->s_last; u32 n = qp->s_last;
/* Find the work request corresponding to the given PSN. */ /* Find the work request corresponding to the given PSN. */
...@@ -969,10 +969,10 @@ static void reset_sending_psn(struct qib_qp *qp, u32 psn) ...@@ -969,10 +969,10 @@ static void reset_sending_psn(struct qib_qp *qp, u32 psn)
/* /*
* This should be called with the QP s_lock held and interrupts disabled. * This should be called with the QP s_lock held and interrupts disabled.
*/ */
void qib_rc_send_complete(struct qib_qp *qp, struct qib_ib_header *hdr) void qib_rc_send_complete(struct rvt_qp *qp, struct qib_ib_header *hdr)
{ {
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
struct ib_wc wc; struct ib_wc wc;
unsigned i; unsigned i;
u32 opcode; u32 opcode;
...@@ -1013,9 +1013,9 @@ void qib_rc_send_complete(struct qib_qp *qp, struct qib_ib_header *hdr) ...@@ -1013,9 +1013,9 @@ void qib_rc_send_complete(struct qib_qp *qp, struct qib_ib_header *hdr)
qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0) qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
break; break;
for (i = 0; i < wqe->wr.num_sge; i++) { for (i = 0; i < wqe->wr.num_sge; i++) {
struct qib_sge *sge = &wqe->sg_list[i]; struct rvt_sge *sge = &wqe->sg_list[i];
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
} }
/* Post a send completion queue entry if requested. */ /* Post a send completion queue entry if requested. */
if (!(qp->s_flags & QIB_S_SIGNAL_REQ_WR) || if (!(qp->s_flags & QIB_S_SIGNAL_REQ_WR) ||
...@@ -1044,7 +1044,7 @@ void qib_rc_send_complete(struct qib_qp *qp, struct qib_ib_header *hdr) ...@@ -1044,7 +1044,7 @@ void qib_rc_send_complete(struct qib_qp *qp, struct qib_ib_header *hdr)
} }
} }
static inline void update_last_psn(struct qib_qp *qp, u32 psn) static inline void update_last_psn(struct rvt_qp *qp, u32 psn)
{ {
qp->s_last_psn = psn; qp->s_last_psn = psn;
} }
...@@ -1054,8 +1054,8 @@ static inline void update_last_psn(struct qib_qp *qp, u32 psn) ...@@ -1054,8 +1054,8 @@ static inline void update_last_psn(struct qib_qp *qp, u32 psn)
* This is similar to qib_send_complete but has to check to be sure * This is similar to qib_send_complete but has to check to be sure
* that the SGEs are not being referenced if the SWQE is being resent. * that the SGEs are not being referenced if the SWQE is being resent.
*/ */
static struct qib_swqe *do_rc_completion(struct qib_qp *qp, static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
struct qib_swqe *wqe, struct rvt_swqe *wqe,
struct qib_ibport *ibp) struct qib_ibport *ibp)
{ {
struct ib_wc wc; struct ib_wc wc;
...@@ -1069,9 +1069,9 @@ static struct qib_swqe *do_rc_completion(struct qib_qp *qp, ...@@ -1069,9 +1069,9 @@ static struct qib_swqe *do_rc_completion(struct qib_qp *qp,
if (qib_cmp24(wqe->lpsn, qp->s_sending_psn) < 0 || if (qib_cmp24(wqe->lpsn, qp->s_sending_psn) < 0 ||
qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) > 0) { qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) > 0) {
for (i = 0; i < wqe->wr.num_sge; i++) { for (i = 0; i < wqe->wr.num_sge; i++) {
struct qib_sge *sge = &wqe->sg_list[i]; struct rvt_sge *sge = &wqe->sg_list[i];
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
} }
/* Post a send completion queue entry if requested. */ /* Post a send completion queue entry if requested. */
if (!(qp->s_flags & QIB_S_SIGNAL_REQ_WR) || if (!(qp->s_flags & QIB_S_SIGNAL_REQ_WR) ||
...@@ -1127,12 +1127,12 @@ static struct qib_swqe *do_rc_completion(struct qib_qp *qp, ...@@ -1127,12 +1127,12 @@ static struct qib_swqe *do_rc_completion(struct qib_qp *qp,
* Called at interrupt level with the QP s_lock held. * Called at interrupt level with the QP s_lock held.
* Returns 1 if OK, 0 if current operation should be aborted (NAK). * Returns 1 if OK, 0 if current operation should be aborted (NAK).
*/ */
static int do_rc_ack(struct qib_qp *qp, u32 aeth, u32 psn, int opcode, static int do_rc_ack(struct rvt_qp *qp, u32 aeth, u32 psn, int opcode,
u64 val, struct qib_ctxtdata *rcd) u64 val, struct qib_ctxtdata *rcd)
{ {
struct qib_ibport *ibp; struct qib_ibport *ibp;
enum ib_wc_status status; enum ib_wc_status status;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
int ret = 0; int ret = 0;
u32 ack_psn; u32 ack_psn;
int diff; int diff;
...@@ -1350,10 +1350,10 @@ static int do_rc_ack(struct qib_qp *qp, u32 aeth, u32 psn, int opcode, ...@@ -1350,10 +1350,10 @@ static int do_rc_ack(struct qib_qp *qp, u32 aeth, u32 psn, int opcode,
* We have seen an out of sequence RDMA read middle or last packet. * We have seen an out of sequence RDMA read middle or last packet.
* This ACKs SENDs and RDMA writes up to the first RDMA read or atomic SWQE. * This ACKs SENDs and RDMA writes up to the first RDMA read or atomic SWQE.
*/ */
static void rdma_seq_err(struct qib_qp *qp, struct qib_ibport *ibp, u32 psn, static void rdma_seq_err(struct rvt_qp *qp, struct qib_ibport *ibp, u32 psn,
struct qib_ctxtdata *rcd) struct qib_ctxtdata *rcd)
{ {
struct qib_swqe *wqe; struct rvt_swqe *wqe;
/* Remove QP from retry timer */ /* Remove QP from retry timer */
if (qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR)) { if (qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR)) {
...@@ -1400,12 +1400,12 @@ static void rdma_seq_err(struct qib_qp *qp, struct qib_ibport *ibp, u32 psn, ...@@ -1400,12 +1400,12 @@ static void rdma_seq_err(struct qib_qp *qp, struct qib_ibport *ibp, u32 psn,
static void qib_rc_rcv_resp(struct qib_ibport *ibp, static void qib_rc_rcv_resp(struct qib_ibport *ibp,
struct qib_other_headers *ohdr, struct qib_other_headers *ohdr,
void *data, u32 tlen, void *data, u32 tlen,
struct qib_qp *qp, struct rvt_qp *qp,
u32 opcode, u32 opcode,
u32 psn, u32 hdrsize, u32 pmtu, u32 psn, u32 hdrsize, u32 pmtu,
struct qib_ctxtdata *rcd) struct qib_ctxtdata *rcd)
{ {
struct qib_swqe *wqe; struct rvt_swqe *wqe;
struct qib_pportdata *ppd = ppd_from_ibp(ibp); struct qib_pportdata *ppd = ppd_from_ibp(ibp);
enum ib_wc_status status; enum ib_wc_status status;
unsigned long flags; unsigned long flags;
...@@ -1624,14 +1624,14 @@ static void qib_rc_rcv_resp(struct qib_ibport *ibp, ...@@ -1624,14 +1624,14 @@ static void qib_rc_rcv_resp(struct qib_ibport *ibp,
*/ */
static int qib_rc_rcv_error(struct qib_other_headers *ohdr, static int qib_rc_rcv_error(struct qib_other_headers *ohdr,
void *data, void *data,
struct qib_qp *qp, struct rvt_qp *qp,
u32 opcode, u32 opcode,
u32 psn, u32 psn,
int diff, int diff,
struct qib_ctxtdata *rcd) struct qib_ctxtdata *rcd)
{ {
struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
struct qib_ack_entry *e; struct rvt_ack_entry *e;
unsigned long flags; unsigned long flags;
u8 i, prev; u8 i, prev;
int old_req; int old_req;
...@@ -1733,7 +1733,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr, ...@@ -1733,7 +1733,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr,
if (unlikely(offset + len != e->rdma_sge.sge_length)) if (unlikely(offset + len != e->rdma_sge.sge_length))
goto unlock_done; goto unlock_done;
if (e->rdma_sge.mr) { if (e->rdma_sge.mr) {
qib_put_mr(e->rdma_sge.mr); rvt_put_mr(e->rdma_sge.mr);
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
} }
if (len != 0) { if (len != 0) {
...@@ -1741,7 +1741,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr, ...@@ -1741,7 +1741,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr,
u64 vaddr = be64_to_cpu(reth->vaddr); u64 vaddr = be64_to_cpu(reth->vaddr);
int ok; int ok;
ok = qib_rkey_ok(qp, &e->rdma_sge, len, vaddr, rkey, ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr, rkey,
IB_ACCESS_REMOTE_READ); IB_ACCESS_REMOTE_READ);
if (unlikely(!ok)) if (unlikely(!ok))
goto unlock_done; goto unlock_done;
...@@ -1819,7 +1819,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr, ...@@ -1819,7 +1819,7 @@ static int qib_rc_rcv_error(struct qib_other_headers *ohdr,
return 0; return 0;
} }
void qib_rc_error(struct qib_qp *qp, enum ib_wc_status err) void qib_rc_error(struct rvt_qp *qp, enum ib_wc_status err)
{ {
unsigned long flags; unsigned long flags;
int lastwqe; int lastwqe;
...@@ -1838,7 +1838,7 @@ void qib_rc_error(struct qib_qp *qp, enum ib_wc_status err) ...@@ -1838,7 +1838,7 @@ void qib_rc_error(struct qib_qp *qp, enum ib_wc_status err)
} }
} }
static inline void qib_update_ack_queue(struct qib_qp *qp, unsigned n) static inline void qib_update_ack_queue(struct rvt_qp *qp, unsigned n)
{ {
unsigned next; unsigned next;
...@@ -1863,7 +1863,7 @@ static inline void qib_update_ack_queue(struct qib_qp *qp, unsigned n) ...@@ -1863,7 +1863,7 @@ static inline void qib_update_ack_queue(struct qib_qp *qp, unsigned n)
* Called at interrupt level. * Called at interrupt level.
*/ */
void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
int has_grh, void *data, u32 tlen, struct qib_qp *qp) int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
{ {
struct qib_ibport *ibp = &rcd->ppd->ibport_data; struct qib_ibport *ibp = &rcd->ppd->ibport_data;
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
...@@ -2070,7 +2070,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2070,7 +2070,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
int ok; int ok;
/* Check rkey & NAK */ /* Check rkey & NAK */
ok = qib_rkey_ok(qp, &qp->r_sge.sge, qp->r_len, vaddr, ok = rvt_rkey_ok(qp, &qp->r_sge.sge, qp->r_len, vaddr,
rkey, IB_ACCESS_REMOTE_WRITE); rkey, IB_ACCESS_REMOTE_WRITE);
if (unlikely(!ok)) if (unlikely(!ok))
goto nack_acc; goto nack_acc;
...@@ -2097,7 +2097,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2097,7 +2097,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
goto send_last; goto send_last;
case OP(RDMA_READ_REQUEST): { case OP(RDMA_READ_REQUEST): {
struct qib_ack_entry *e; struct rvt_ack_entry *e;
u32 len; u32 len;
u8 next; u8 next;
...@@ -2115,7 +2115,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2115,7 +2115,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
} }
e = &qp->s_ack_queue[qp->r_head_ack_queue]; e = &qp->s_ack_queue[qp->r_head_ack_queue];
if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) { if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {
qib_put_mr(e->rdma_sge.mr); rvt_put_mr(e->rdma_sge.mr);
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
} }
reth = &ohdr->u.rc.reth; reth = &ohdr->u.rc.reth;
...@@ -2126,7 +2126,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2126,7 +2126,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
int ok; int ok;
/* Check rkey & NAK */ /* Check rkey & NAK */
ok = qib_rkey_ok(qp, &e->rdma_sge, len, vaddr, ok = rvt_rkey_ok(qp, &e->rdma_sge, len, vaddr,
rkey, IB_ACCESS_REMOTE_READ); rkey, IB_ACCESS_REMOTE_READ);
if (unlikely(!ok)) if (unlikely(!ok))
goto nack_acc_unlck; goto nack_acc_unlck;
...@@ -2167,7 +2167,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2167,7 +2167,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
case OP(COMPARE_SWAP): case OP(COMPARE_SWAP):
case OP(FETCH_ADD): { case OP(FETCH_ADD): {
struct ib_atomic_eth *ateth; struct ib_atomic_eth *ateth;
struct qib_ack_entry *e; struct rvt_ack_entry *e;
u64 vaddr; u64 vaddr;
atomic64_t *maddr; atomic64_t *maddr;
u64 sdata; u64 sdata;
...@@ -2187,7 +2187,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2187,7 +2187,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
} }
e = &qp->s_ack_queue[qp->r_head_ack_queue]; e = &qp->s_ack_queue[qp->r_head_ack_queue];
if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) { if (e->opcode == OP(RDMA_READ_REQUEST) && e->rdma_sge.mr) {
qib_put_mr(e->rdma_sge.mr); rvt_put_mr(e->rdma_sge.mr);
e->rdma_sge.mr = NULL; e->rdma_sge.mr = NULL;
} }
ateth = &ohdr->u.atomic_eth; ateth = &ohdr->u.atomic_eth;
...@@ -2197,7 +2197,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2197,7 +2197,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
goto nack_inv_unlck; goto nack_inv_unlck;
rkey = be32_to_cpu(ateth->rkey); rkey = be32_to_cpu(ateth->rkey);
/* Check rkey & NAK */ /* Check rkey & NAK */
if (unlikely(!qib_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64), if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64),
vaddr, rkey, vaddr, rkey,
IB_ACCESS_REMOTE_ATOMIC))) IB_ACCESS_REMOTE_ATOMIC)))
goto nack_acc_unlck; goto nack_acc_unlck;
...@@ -2209,7 +2209,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, ...@@ -2209,7 +2209,7 @@ void qib_rc_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
(u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr, (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
be64_to_cpu(ateth->compare_data), be64_to_cpu(ateth->compare_data),
sdata); sdata);
qib_put_mr(qp->r_sge.sge.mr); rvt_put_mr(qp->r_sge.sge.mr);
qp->r_sge.num_sge = 0; qp->r_sge.num_sge = 0;
e->opcode = opcode; e->opcode = opcode;
e->sent = 0; e->sent = 0;
......
...@@ -79,15 +79,15 @@ const u32 ib_qib_rnr_table[32] = { ...@@ -79,15 +79,15 @@ const u32 ib_qib_rnr_table[32] = {
* Validate a RWQE and fill in the SGE state. * Validate a RWQE and fill in the SGE state.
* Return 1 if OK. * Return 1 if OK.
*/ */
static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe) static int qib_init_sge(struct rvt_qp *qp, struct rvt_rwqe *wqe)
{ {
int i, j, ret; int i, j, ret;
struct ib_wc wc; struct ib_wc wc;
struct qib_lkey_table *rkt; struct rvt_lkey_table *rkt;
struct rvt_pd *pd; struct rvt_pd *pd;
struct qib_sge_state *ss; struct rvt_sge_state *ss;
rkt = &to_idev(qp->ibqp.device)->lk_table; rkt = &to_idev(qp->ibqp.device)->rdi.lkey_table;
pd = ibpd_to_rvtpd(qp->ibqp.srq ? qp->ibqp.srq->pd : qp->ibqp.pd); pd = ibpd_to_rvtpd(qp->ibqp.srq ? qp->ibqp.srq->pd : qp->ibqp.pd);
ss = &qp->r_sge; ss = &qp->r_sge;
ss->sg_list = qp->r_sg_list; ss->sg_list = qp->r_sg_list;
...@@ -96,7 +96,7 @@ static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe) ...@@ -96,7 +96,7 @@ static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe)
if (wqe->sg_list[i].length == 0) if (wqe->sg_list[i].length == 0)
continue; continue;
/* Check LKEY */ /* Check LKEY */
if (!qib_lkey_ok(rkt, pd, j ? &ss->sg_list[j - 1] : &ss->sge, if (!rvt_lkey_ok(rkt, pd, j ? &ss->sg_list[j - 1] : &ss->sge,
&wqe->sg_list[i], IB_ACCESS_LOCAL_WRITE)) &wqe->sg_list[i], IB_ACCESS_LOCAL_WRITE))
goto bad_lkey; goto bad_lkey;
qp->r_len += wqe->sg_list[i].length; qp->r_len += wqe->sg_list[i].length;
...@@ -109,9 +109,9 @@ static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe) ...@@ -109,9 +109,9 @@ static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe)
bad_lkey: bad_lkey:
while (j) { while (j) {
struct qib_sge *sge = --j ? &ss->sg_list[j - 1] : &ss->sge; struct rvt_sge *sge = --j ? &ss->sg_list[j - 1] : &ss->sge;
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
} }
ss->num_sge = 0; ss->num_sge = 0;
memset(&wc, 0, sizeof(wc)); memset(&wc, 0, sizeof(wc));
...@@ -136,13 +136,13 @@ static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe) ...@@ -136,13 +136,13 @@ static int qib_init_sge(struct qib_qp *qp, struct qib_rwqe *wqe)
* *
* Can be called from interrupt level. * Can be called from interrupt level.
*/ */
int qib_get_rwqe(struct qib_qp *qp, int wr_id_only) int qib_get_rwqe(struct rvt_qp *qp, int wr_id_only)
{ {
unsigned long flags; unsigned long flags;
struct qib_rq *rq; struct rvt_rq *rq;
struct qib_rwq *wq; struct rvt_rwq *wq;
struct qib_srq *srq; struct qib_srq *srq;
struct qib_rwqe *wqe; struct rvt_rwqe *wqe;
void (*handler)(struct ib_event *, void *); void (*handler)(struct ib_event *, void *);
u32 tail; u32 tail;
int ret; int ret;
...@@ -227,7 +227,7 @@ int qib_get_rwqe(struct qib_qp *qp, int wr_id_only) ...@@ -227,7 +227,7 @@ int qib_get_rwqe(struct qib_qp *qp, int wr_id_only)
* Switch to alternate path. * Switch to alternate path.
* The QP s_lock should be held and interrupts disabled. * The QP s_lock should be held and interrupts disabled.
*/ */
void qib_migrate_qp(struct qib_qp *qp) void qib_migrate_qp(struct rvt_qp *qp)
{ {
struct ib_event ev; struct ib_event ev;
...@@ -266,7 +266,7 @@ static int gid_ok(union ib_gid *gid, __be64 gid_prefix, __be64 id) ...@@ -266,7 +266,7 @@ static int gid_ok(union ib_gid *gid, __be64 gid_prefix, __be64 id)
* The s_lock will be acquired around the qib_migrate_qp() call. * The s_lock will be acquired around the qib_migrate_qp() call.
*/ */
int qib_ruc_check_hdr(struct qib_ibport *ibp, struct qib_ib_header *hdr, int qib_ruc_check_hdr(struct qib_ibport *ibp, struct qib_ib_header *hdr,
int has_grh, struct qib_qp *qp, u32 bth0) int has_grh, struct rvt_qp *qp, u32 bth0)
{ {
__be64 guid; __be64 guid;
unsigned long flags; unsigned long flags;
...@@ -353,12 +353,12 @@ int qib_ruc_check_hdr(struct qib_ibport *ibp, struct qib_ib_header *hdr, ...@@ -353,12 +353,12 @@ int qib_ruc_check_hdr(struct qib_ibport *ibp, struct qib_ib_header *hdr,
* receive interrupts since this is a connected protocol and all packets * receive interrupts since this is a connected protocol and all packets
* will pass through here. * will pass through here.
*/ */
static void qib_ruc_loopback(struct qib_qp *sqp) static void qib_ruc_loopback(struct rvt_qp *sqp)
{ {
struct qib_ibport *ibp = to_iport(sqp->ibqp.device, sqp->port_num); struct qib_ibport *ibp = to_iport(sqp->ibqp.device, sqp->port_num);
struct qib_qp *qp; struct rvt_qp *qp;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
struct qib_sge *sge; struct rvt_sge *sge;
unsigned long flags; unsigned long flags;
struct ib_wc wc; struct ib_wc wc;
u64 sdata; u64 sdata;
...@@ -458,7 +458,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp) ...@@ -458,7 +458,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp)
goto inv_err; goto inv_err;
if (wqe->length == 0) if (wqe->length == 0)
break; break;
if (unlikely(!qib_rkey_ok(qp, &qp->r_sge.sge, wqe->length, if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, wqe->length,
wqe->rdma_wr.remote_addr, wqe->rdma_wr.remote_addr,
wqe->rdma_wr.rkey, wqe->rdma_wr.rkey,
IB_ACCESS_REMOTE_WRITE))) IB_ACCESS_REMOTE_WRITE)))
...@@ -471,7 +471,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp) ...@@ -471,7 +471,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp)
case IB_WR_RDMA_READ: case IB_WR_RDMA_READ:
if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_READ))) if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_READ)))
goto inv_err; goto inv_err;
if (unlikely(!qib_rkey_ok(qp, &sqp->s_sge.sge, wqe->length, if (unlikely(!rvt_rkey_ok(qp, &sqp->s_sge.sge, wqe->length,
wqe->rdma_wr.remote_addr, wqe->rdma_wr.remote_addr,
wqe->rdma_wr.rkey, wqe->rdma_wr.rkey,
IB_ACCESS_REMOTE_READ))) IB_ACCESS_REMOTE_READ)))
...@@ -489,7 +489,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp) ...@@ -489,7 +489,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp)
case IB_WR_ATOMIC_FETCH_AND_ADD: case IB_WR_ATOMIC_FETCH_AND_ADD:
if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC))) if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC)))
goto inv_err; goto inv_err;
if (unlikely(!qib_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64), if (unlikely(!rvt_rkey_ok(qp, &qp->r_sge.sge, sizeof(u64),
wqe->atomic_wr.remote_addr, wqe->atomic_wr.remote_addr,
wqe->atomic_wr.rkey, wqe->atomic_wr.rkey,
IB_ACCESS_REMOTE_ATOMIC))) IB_ACCESS_REMOTE_ATOMIC)))
...@@ -502,7 +502,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp) ...@@ -502,7 +502,7 @@ static void qib_ruc_loopback(struct qib_qp *sqp)
(u64) atomic64_add_return(sdata, maddr) - sdata : (u64) atomic64_add_return(sdata, maddr) - sdata :
(u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr, (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
sdata, wqe->atomic_wr.swap); sdata, wqe->atomic_wr.swap);
qib_put_mr(qp->r_sge.sge.mr); rvt_put_mr(qp->r_sge.sge.mr);
qp->r_sge.num_sge = 0; qp->r_sge.num_sge = 0;
goto send_comp; goto send_comp;
...@@ -526,11 +526,11 @@ static void qib_ruc_loopback(struct qib_qp *sqp) ...@@ -526,11 +526,11 @@ static void qib_ruc_loopback(struct qib_qp *sqp)
sge->sge_length -= len; sge->sge_length -= len;
if (sge->sge_length == 0) { if (sge->sge_length == 0) {
if (!release) if (!release)
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
if (--sqp->s_sge.num_sge) if (--sqp->s_sge.num_sge)
*sge = *sqp->s_sge.sg_list++; *sge = *sqp->s_sge.sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
break; break;
sge->n = 0; sge->n = 0;
...@@ -672,7 +672,7 @@ u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr, ...@@ -672,7 +672,7 @@ u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr,
return sizeof(struct ib_grh) / sizeof(u32); return sizeof(struct ib_grh) / sizeof(u32);
} }
void qib_make_ruc_header(struct qib_qp *qp, struct qib_other_headers *ohdr, void qib_make_ruc_header(struct rvt_qp *qp, struct qib_other_headers *ohdr,
u32 bth0, u32 bth2) u32 bth0, u32 bth2)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
...@@ -721,10 +721,10 @@ void qib_do_send(struct work_struct *work) ...@@ -721,10 +721,10 @@ void qib_do_send(struct work_struct *work)
{ {
struct qib_qp_priv *priv = container_of(work, struct qib_qp_priv, struct qib_qp_priv *priv = container_of(work, struct qib_qp_priv,
s_work); s_work);
struct qib_qp *qp = priv->owner; struct rvt_qp *qp = priv->owner;
struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num); struct qib_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
struct qib_pportdata *ppd = ppd_from_ibp(ibp); struct qib_pportdata *ppd = ppd_from_ibp(ibp);
int (*make_req)(struct qib_qp *qp); int (*make_req)(struct rvt_qp *qp);
unsigned long flags; unsigned long flags;
if ((qp->ibqp.qp_type == IB_QPT_RC || if ((qp->ibqp.qp_type == IB_QPT_RC ||
...@@ -772,7 +772,7 @@ void qib_do_send(struct work_struct *work) ...@@ -772,7 +772,7 @@ void qib_do_send(struct work_struct *work)
/* /*
* This should be called with s_lock held. * This should be called with s_lock held.
*/ */
void qib_send_complete(struct qib_qp *qp, struct qib_swqe *wqe, void qib_send_complete(struct rvt_qp *qp, struct rvt_swqe *wqe,
enum ib_wc_status status) enum ib_wc_status status)
{ {
u32 old_last, last; u32 old_last, last;
...@@ -782,9 +782,9 @@ void qib_send_complete(struct qib_qp *qp, struct qib_swqe *wqe, ...@@ -782,9 +782,9 @@ void qib_send_complete(struct qib_qp *qp, struct qib_swqe *wqe,
return; return;
for (i = 0; i < wqe->wr.num_sge; i++) { for (i = 0; i < wqe->wr.num_sge; i++) {
struct qib_sge *sge = &wqe->sg_list[i]; struct rvt_sge *sge = &wqe->sg_list[i];
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
} }
if (qp->ibqp.qp_type == IB_QPT_UD || if (qp->ibqp.qp_type == IB_QPT_UD ||
qp->ibqp.qp_type == IB_QPT_SMI || qp->ibqp.qp_type == IB_QPT_SMI ||
......
...@@ -533,12 +533,12 @@ static void complete_sdma_err_req(struct qib_pportdata *ppd, ...@@ -533,12 +533,12 @@ static void complete_sdma_err_req(struct qib_pportdata *ppd,
* 3) The SGE addresses are suitable for passing to dma_map_single(). * 3) The SGE addresses are suitable for passing to dma_map_single().
*/ */
int qib_sdma_verbs_send(struct qib_pportdata *ppd, int qib_sdma_verbs_send(struct qib_pportdata *ppd,
struct qib_sge_state *ss, u32 dwords, struct rvt_sge_state *ss, u32 dwords,
struct qib_verbs_txreq *tx) struct qib_verbs_txreq *tx)
{ {
unsigned long flags; unsigned long flags;
struct qib_sge *sge; struct rvt_sge *sge;
struct qib_qp *qp; struct rvt_qp *qp;
int ret = 0; int ret = 0;
u16 tail; u16 tail;
__le64 *descqp; __le64 *descqp;
...@@ -624,7 +624,7 @@ int qib_sdma_verbs_send(struct qib_pportdata *ppd, ...@@ -624,7 +624,7 @@ int qib_sdma_verbs_send(struct qib_pportdata *ppd,
if (--ss->num_sge) if (--ss->num_sge)
*sge = *ss->sg_list++; *sge = *ss->sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
break; break;
sge->n = 0; sge->n = 0;
......
...@@ -49,12 +49,12 @@ int qib_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr, ...@@ -49,12 +49,12 @@ int qib_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
struct ib_recv_wr **bad_wr) struct ib_recv_wr **bad_wr)
{ {
struct qib_srq *srq = to_isrq(ibsrq); struct qib_srq *srq = to_isrq(ibsrq);
struct qib_rwq *wq; struct rvt_rwq *wq;
unsigned long flags; unsigned long flags;
int ret; int ret;
for (; wr; wr = wr->next) { for (; wr; wr = wr->next) {
struct qib_rwqe *wqe; struct rvt_rwqe *wqe;
u32 next; u32 next;
int i; int i;
...@@ -132,8 +132,8 @@ struct ib_srq *qib_create_srq(struct ib_pd *ibpd, ...@@ -132,8 +132,8 @@ struct ib_srq *qib_create_srq(struct ib_pd *ibpd,
srq->rq.size = srq_init_attr->attr.max_wr + 1; srq->rq.size = srq_init_attr->attr.max_wr + 1;
srq->rq.max_sge = srq_init_attr->attr.max_sge; srq->rq.max_sge = srq_init_attr->attr.max_sge;
sz = sizeof(struct ib_sge) * srq->rq.max_sge + sz = sizeof(struct ib_sge) * srq->rq.max_sge +
sizeof(struct qib_rwqe); sizeof(struct rvt_rwqe);
srq->rq.wq = vmalloc_user(sizeof(struct qib_rwq) + srq->rq.size * sz); srq->rq.wq = vmalloc_user(sizeof(struct rvt_rwq) + srq->rq.size * sz);
if (!srq->rq.wq) { if (!srq->rq.wq) {
ret = ERR_PTR(-ENOMEM); ret = ERR_PTR(-ENOMEM);
goto bail_srq; goto bail_srq;
...@@ -145,7 +145,7 @@ struct ib_srq *qib_create_srq(struct ib_pd *ibpd, ...@@ -145,7 +145,7 @@ struct ib_srq *qib_create_srq(struct ib_pd *ibpd,
*/ */
if (udata && udata->outlen >= sizeof(__u64)) { if (udata && udata->outlen >= sizeof(__u64)) {
int err; int err;
u32 s = sizeof(struct qib_rwq) + srq->rq.size * sz; u32 s = sizeof(struct rvt_rwq) + srq->rq.size * sz;
srq->ip = srq->ip =
qib_create_mmap_info(dev, s, ibpd->uobject->context, qib_create_mmap_info(dev, s, ibpd->uobject->context,
...@@ -213,12 +213,12 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, ...@@ -213,12 +213,12 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
struct ib_udata *udata) struct ib_udata *udata)
{ {
struct qib_srq *srq = to_isrq(ibsrq); struct qib_srq *srq = to_isrq(ibsrq);
struct qib_rwq *wq; struct rvt_rwq *wq;
int ret = 0; int ret = 0;
if (attr_mask & IB_SRQ_MAX_WR) { if (attr_mask & IB_SRQ_MAX_WR) {
struct qib_rwq *owq; struct rvt_rwq *owq;
struct qib_rwqe *p; struct rvt_rwqe *p;
u32 sz, size, n, head, tail; u32 sz, size, n, head, tail;
/* Check that the requested sizes are below the limits. */ /* Check that the requested sizes are below the limits. */
...@@ -229,10 +229,10 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, ...@@ -229,10 +229,10 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
goto bail; goto bail;
} }
sz = sizeof(struct qib_rwqe) + sz = sizeof(struct rvt_rwqe) +
srq->rq.max_sge * sizeof(struct ib_sge); srq->rq.max_sge * sizeof(struct ib_sge);
size = attr->max_wr + 1; size = attr->max_wr + 1;
wq = vmalloc_user(sizeof(struct qib_rwq) + size * sz); wq = vmalloc_user(sizeof(struct rvt_rwq) + size * sz);
if (!wq) { if (!wq) {
ret = -ENOMEM; ret = -ENOMEM;
goto bail; goto bail;
...@@ -279,7 +279,7 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, ...@@ -279,7 +279,7 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
n = 0; n = 0;
p = wq->wq; p = wq->wq;
while (tail != head) { while (tail != head) {
struct qib_rwqe *wqe; struct rvt_rwqe *wqe;
int i; int i;
wqe = get_rwqe_ptr(&srq->rq, tail); wqe = get_rwqe_ptr(&srq->rq, tail);
...@@ -288,7 +288,7 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, ...@@ -288,7 +288,7 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
for (i = 0; i < wqe->num_sge; i++) for (i = 0; i < wqe->num_sge; i++)
p->sg_list[i] = wqe->sg_list[i]; p->sg_list[i] = wqe->sg_list[i];
n++; n++;
p = (struct qib_rwqe *)((char *) p + sz); p = (struct rvt_rwqe *)((char *)p + sz);
if (++tail >= srq->rq.size) if (++tail >= srq->rq.size)
tail = 0; tail = 0;
} }
...@@ -303,9 +303,9 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr, ...@@ -303,9 +303,9 @@ int qib_modify_srq(struct ib_srq *ibsrq, struct ib_srq_attr *attr,
vfree(owq); vfree(owq);
if (srq->ip) { if (srq->ip) {
struct qib_mmap_info *ip = srq->ip; struct rvt_mmap_info *ip = srq->ip;
struct qib_ibdev *dev = to_idev(srq->ibsrq.device); struct qib_ibdev *dev = to_idev(srq->ibsrq.device);
u32 s = sizeof(struct qib_rwq) + size * sz; u32 s = sizeof(struct rvt_rwq) + size * sz;
qib_update_mmap_info(dev, ip, s, wq); qib_update_mmap_info(dev, ip, s, wq);
......
...@@ -43,11 +43,11 @@ ...@@ -43,11 +43,11 @@
* *
* Return 1 if constructed; otherwise, return 0. * Return 1 if constructed; otherwise, return 0.
*/ */
int qib_make_uc_req(struct qib_qp *qp) int qib_make_uc_req(struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
unsigned long flags; unsigned long flags;
u32 hwords; u32 hwords;
u32 bth0; u32 bth0;
...@@ -241,7 +241,7 @@ int qib_make_uc_req(struct qib_qp *qp) ...@@ -241,7 +241,7 @@ int qib_make_uc_req(struct qib_qp *qp)
* Called at interrupt level. * Called at interrupt level.
*/ */
void qib_uc_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, void qib_uc_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr,
int has_grh, void *data, u32 tlen, struct qib_qp *qp) int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
{ {
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
u32 opcode; u32 opcode;
...@@ -439,7 +439,7 @@ void qib_uc_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, ...@@ -439,7 +439,7 @@ void qib_uc_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr,
int ok; int ok;
/* Check rkey */ /* Check rkey */
ok = qib_rkey_ok(qp, &qp->r_sge.sge, qp->r_len, ok = rvt_rkey_ok(qp, &qp->r_sge.sge, qp->r_len,
vaddr, rkey, IB_ACCESS_REMOTE_WRITE); vaddr, rkey, IB_ACCESS_REMOTE_WRITE);
if (unlikely(!ok)) if (unlikely(!ok))
goto drop; goto drop;
......
...@@ -47,15 +47,15 @@ ...@@ -47,15 +47,15 @@
* Note that the receive interrupt handler may be calling qib_ud_rcv() * Note that the receive interrupt handler may be calling qib_ud_rcv()
* while this is being called. * while this is being called.
*/ */
static void qib_ud_loopback(struct qib_qp *sqp, struct qib_swqe *swqe) static void qib_ud_loopback(struct rvt_qp *sqp, struct rvt_swqe *swqe)
{ {
struct qib_ibport *ibp = to_iport(sqp->ibqp.device, sqp->port_num); struct qib_ibport *ibp = to_iport(sqp->ibqp.device, sqp->port_num);
struct qib_pportdata *ppd; struct qib_pportdata *ppd;
struct qib_qp *qp; struct rvt_qp *qp;
struct ib_ah_attr *ah_attr; struct ib_ah_attr *ah_attr;
unsigned long flags; unsigned long flags;
struct qib_sge_state ssge; struct rvt_sge_state ssge;
struct qib_sge *sge; struct rvt_sge *sge;
struct ib_wc wc; struct ib_wc wc;
u32 length; u32 length;
enum ib_qp_type sqptype, dqptype; enum ib_qp_type sqptype, dqptype;
...@@ -190,7 +190,7 @@ static void qib_ud_loopback(struct qib_qp *sqp, struct qib_swqe *swqe) ...@@ -190,7 +190,7 @@ static void qib_ud_loopback(struct qib_qp *sqp, struct qib_swqe *swqe)
if (--ssge.num_sge) if (--ssge.num_sge)
*sge = *ssge.sg_list++; *sge = *ssge.sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
break; break;
sge->n = 0; sge->n = 0;
...@@ -233,14 +233,14 @@ static void qib_ud_loopback(struct qib_qp *sqp, struct qib_swqe *swqe) ...@@ -233,14 +233,14 @@ static void qib_ud_loopback(struct qib_qp *sqp, struct qib_swqe *swqe)
* *
* Return 1 if constructed; otherwise, return 0. * Return 1 if constructed; otherwise, return 0.
*/ */
int qib_make_ud_req(struct qib_qp *qp) int qib_make_ud_req(struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
struct ib_ah_attr *ah_attr; struct ib_ah_attr *ah_attr;
struct qib_pportdata *ppd; struct qib_pportdata *ppd;
struct qib_ibport *ibp; struct qib_ibport *ibp;
struct qib_swqe *wqe; struct rvt_swqe *wqe;
unsigned long flags; unsigned long flags;
u32 nwords; u32 nwords;
u32 extra_bytes; u32 extra_bytes;
...@@ -429,7 +429,7 @@ static unsigned qib_lookup_pkey(struct qib_ibport *ibp, u16 pkey) ...@@ -429,7 +429,7 @@ static unsigned qib_lookup_pkey(struct qib_ibport *ibp, u16 pkey)
* Called at interrupt level. * Called at interrupt level.
*/ */
void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr, void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr,
int has_grh, void *data, u32 tlen, struct qib_qp *qp) int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
{ {
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
int opcode; int opcode;
......
...@@ -50,8 +50,8 @@ static unsigned int ib_qib_qp_table_size = 256; ...@@ -50,8 +50,8 @@ static unsigned int ib_qib_qp_table_size = 256;
module_param_named(qp_table_size, ib_qib_qp_table_size, uint, S_IRUGO); module_param_named(qp_table_size, ib_qib_qp_table_size, uint, S_IRUGO);
MODULE_PARM_DESC(qp_table_size, "QP table size"); MODULE_PARM_DESC(qp_table_size, "QP table size");
unsigned int ib_qib_lkey_table_size = 16; static unsigned int qib_lkey_table_size = 16;
module_param_named(lkey_table_size, ib_qib_lkey_table_size, uint, module_param_named(lkey_table_size, qib_lkey_table_size, uint,
S_IRUGO); S_IRUGO);
MODULE_PARM_DESC(lkey_table_size, MODULE_PARM_DESC(lkey_table_size,
"LKEY table size in bits (2^n, 1 <= n <= 23)"); "LKEY table size in bits (2^n, 1 <= n <= 23)");
...@@ -167,9 +167,9 @@ __be64 ib_qib_sys_image_guid; ...@@ -167,9 +167,9 @@ __be64 ib_qib_sys_image_guid;
* @data: the data to copy * @data: the data to copy
* @length: the length of the data * @length: the length of the data
*/ */
void qib_copy_sge(struct qib_sge_state *ss, void *data, u32 length, int release) void qib_copy_sge(struct rvt_sge_state *ss, void *data, u32 length, int release)
{ {
struct qib_sge *sge = &ss->sge; struct rvt_sge *sge = &ss->sge;
while (length) { while (length) {
u32 len = sge->length; u32 len = sge->length;
...@@ -185,11 +185,11 @@ void qib_copy_sge(struct qib_sge_state *ss, void *data, u32 length, int release) ...@@ -185,11 +185,11 @@ void qib_copy_sge(struct qib_sge_state *ss, void *data, u32 length, int release)
sge->sge_length -= len; sge->sge_length -= len;
if (sge->sge_length == 0) { if (sge->sge_length == 0) {
if (release) if (release)
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
if (--ss->num_sge) if (--ss->num_sge)
*sge = *ss->sg_list++; *sge = *ss->sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
break; break;
sge->n = 0; sge->n = 0;
...@@ -209,9 +209,9 @@ void qib_copy_sge(struct qib_sge_state *ss, void *data, u32 length, int release) ...@@ -209,9 +209,9 @@ void qib_copy_sge(struct qib_sge_state *ss, void *data, u32 length, int release)
* @ss: the SGE state * @ss: the SGE state
* @length: the number of bytes to skip * @length: the number of bytes to skip
*/ */
void qib_skip_sge(struct qib_sge_state *ss, u32 length, int release) void qib_skip_sge(struct rvt_sge_state *ss, u32 length, int release)
{ {
struct qib_sge *sge = &ss->sge; struct rvt_sge *sge = &ss->sge;
while (length) { while (length) {
u32 len = sge->length; u32 len = sge->length;
...@@ -226,11 +226,11 @@ void qib_skip_sge(struct qib_sge_state *ss, u32 length, int release) ...@@ -226,11 +226,11 @@ void qib_skip_sge(struct qib_sge_state *ss, u32 length, int release)
sge->sge_length -= len; sge->sge_length -= len;
if (sge->sge_length == 0) { if (sge->sge_length == 0) {
if (release) if (release)
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
if (--ss->num_sge) if (--ss->num_sge)
*sge = *ss->sg_list++; *sge = *ss->sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
break; break;
sge->n = 0; sge->n = 0;
...@@ -249,10 +249,10 @@ void qib_skip_sge(struct qib_sge_state *ss, u32 length, int release) ...@@ -249,10 +249,10 @@ void qib_skip_sge(struct qib_sge_state *ss, u32 length, int release)
* Don't modify the qib_sge_state to get the count. * Don't modify the qib_sge_state to get the count.
* Return zero if any of the segments is not aligned. * Return zero if any of the segments is not aligned.
*/ */
static u32 qib_count_sge(struct qib_sge_state *ss, u32 length) static u32 qib_count_sge(struct rvt_sge_state *ss, u32 length)
{ {
struct qib_sge *sg_list = ss->sg_list; struct rvt_sge *sg_list = ss->sg_list;
struct qib_sge sge = ss->sge; struct rvt_sge sge = ss->sge;
u8 num_sge = ss->num_sge; u8 num_sge = ss->num_sge;
u32 ndesc = 1; /* count the header */ u32 ndesc = 1; /* count the header */
...@@ -277,7 +277,7 @@ static u32 qib_count_sge(struct qib_sge_state *ss, u32 length) ...@@ -277,7 +277,7 @@ static u32 qib_count_sge(struct qib_sge_state *ss, u32 length)
if (--num_sge) if (--num_sge)
sge = *sg_list++; sge = *sg_list++;
} else if (sge.length == 0 && sge.mr->lkey) { } else if (sge.length == 0 && sge.mr->lkey) {
if (++sge.n >= QIB_SEGSZ) { if (++sge.n >= RVT_SEGSZ) {
if (++sge.m >= sge.mr->mapsz) if (++sge.m >= sge.mr->mapsz)
break; break;
sge.n = 0; sge.n = 0;
...@@ -295,9 +295,9 @@ static u32 qib_count_sge(struct qib_sge_state *ss, u32 length) ...@@ -295,9 +295,9 @@ static u32 qib_count_sge(struct qib_sge_state *ss, u32 length)
/* /*
* Copy from the SGEs to the data buffer. * Copy from the SGEs to the data buffer.
*/ */
static void qib_copy_from_sge(void *data, struct qib_sge_state *ss, u32 length) static void qib_copy_from_sge(void *data, struct rvt_sge_state *ss, u32 length)
{ {
struct qib_sge *sge = &ss->sge; struct rvt_sge *sge = &ss->sge;
while (length) { while (length) {
u32 len = sge->length; u32 len = sge->length;
...@@ -315,7 +315,7 @@ static void qib_copy_from_sge(void *data, struct qib_sge_state *ss, u32 length) ...@@ -315,7 +315,7 @@ static void qib_copy_from_sge(void *data, struct qib_sge_state *ss, u32 length)
if (--ss->num_sge) if (--ss->num_sge)
*sge = *ss->sg_list++; *sge = *ss->sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
break; break;
sge->n = 0; sge->n = 0;
...@@ -335,17 +335,17 @@ static void qib_copy_from_sge(void *data, struct qib_sge_state *ss, u32 length) ...@@ -335,17 +335,17 @@ static void qib_copy_from_sge(void *data, struct qib_sge_state *ss, u32 length)
* @qp: the QP to post on * @qp: the QP to post on
* @wr: the work request to send * @wr: the work request to send
*/ */
static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr, static int qib_post_one_send(struct rvt_qp *qp, struct ib_send_wr *wr,
int *scheduled) int *scheduled)
{ {
struct qib_swqe *wqe; struct rvt_swqe *wqe;
u32 next; u32 next;
int i; int i;
int j; int j;
int acc; int acc;
int ret; int ret;
unsigned long flags; unsigned long flags;
struct qib_lkey_table *rkt; struct rvt_lkey_table *rkt;
struct rvt_pd *pd; struct rvt_pd *pd;
int avoid_schedule = 0; int avoid_schedule = 0;
...@@ -364,10 +364,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr, ...@@ -364,10 +364,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr,
* undefined operations. * undefined operations.
* Make sure buffer is large enough to hold the result for atomics. * Make sure buffer is large enough to hold the result for atomics.
*/ */
if (wr->opcode == IB_WR_REG_MR) { if (qp->ibqp.qp_type == IB_QPT_UC) {
if (qib_reg_mr(qp, reg_wr(wr)))
goto bail_inval;
} else if (qp->ibqp.qp_type == IB_QPT_UC) {
if ((unsigned) wr->opcode >= IB_WR_RDMA_READ) if ((unsigned) wr->opcode >= IB_WR_RDMA_READ)
goto bail_inval; goto bail_inval;
} else if (qp->ibqp.qp_type != IB_QPT_RC) { } else if (qp->ibqp.qp_type != IB_QPT_RC) {
...@@ -396,7 +393,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr, ...@@ -396,7 +393,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr,
goto bail; goto bail;
} }
rkt = &to_idev(qp->ibqp.device)->lk_table; rkt = &to_idev(qp->ibqp.device)->rdi.lkey_table;
pd = ibpd_to_rvtpd(qp->ibqp.pd); pd = ibpd_to_rvtpd(qp->ibqp.pd);
wqe = get_swqe_ptr(qp, qp->s_head); wqe = get_swqe_ptr(qp, qp->s_head);
...@@ -427,7 +424,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr, ...@@ -427,7 +424,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr,
if (length == 0) if (length == 0)
continue; continue;
ok = qib_lkey_ok(rkt, pd, &wqe->sg_list[j], ok = rvt_lkey_ok(rkt, pd, &wqe->sg_list[j],
&wr->sg_list[i], acc); &wr->sg_list[i], acc);
if (!ok) if (!ok)
goto bail_inval_free; goto bail_inval_free;
...@@ -457,9 +454,9 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr, ...@@ -457,9 +454,9 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr,
bail_inval_free: bail_inval_free:
while (j) { while (j) {
struct qib_sge *sge = &wqe->sg_list[--j]; struct rvt_sge *sge = &wqe->sg_list[--j];
qib_put_mr(sge->mr); rvt_put_mr(sge->mr);
} }
bail_inval: bail_inval:
ret = -EINVAL; ret = -EINVAL;
...@@ -485,7 +482,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr, ...@@ -485,7 +482,7 @@ static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr,
static int qib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, static int qib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
struct ib_send_wr **bad_wr) struct ib_send_wr **bad_wr)
{ {
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
int err = 0; int err = 0;
int scheduled = 0; int scheduled = 0;
...@@ -517,8 +514,8 @@ static int qib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, ...@@ -517,8 +514,8 @@ static int qib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr, static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
struct ib_recv_wr **bad_wr) struct ib_recv_wr **bad_wr)
{ {
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
struct qib_rwq *wq = qp->r_rq.wq; struct rvt_rwq *wq = qp->r_rq.wq;
unsigned long flags; unsigned long flags;
int ret; int ret;
...@@ -530,7 +527,7 @@ static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr, ...@@ -530,7 +527,7 @@ static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
} }
for (; wr; wr = wr->next) { for (; wr; wr = wr->next) {
struct qib_rwqe *wqe; struct rvt_rwqe *wqe;
u32 next; u32 next;
int i; int i;
...@@ -581,7 +578,7 @@ static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr, ...@@ -581,7 +578,7 @@ static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
* Called at interrupt level. * Called at interrupt level.
*/ */
static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr, static void qib_qp_rcv(struct qib_ctxtdata *rcd, struct qib_ib_header *hdr,
int has_grh, void *data, u32 tlen, struct qib_qp *qp) int has_grh, void *data, u32 tlen, struct rvt_qp *qp)
{ {
struct qib_ibport *ibp = &rcd->ppd->ibport_data; struct qib_ibport *ibp = &rcd->ppd->ibport_data;
...@@ -635,7 +632,7 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen) ...@@ -635,7 +632,7 @@ void qib_ib_rcv(struct qib_ctxtdata *rcd, void *rhdr, void *data, u32 tlen)
struct qib_ibport *ibp = &ppd->ibport_data; struct qib_ibport *ibp = &ppd->ibport_data;
struct qib_ib_header *hdr = rhdr; struct qib_ib_header *hdr = rhdr;
struct qib_other_headers *ohdr; struct qib_other_headers *ohdr;
struct qib_qp *qp; struct rvt_qp *qp;
u32 qp_num; u32 qp_num;
int lnh; int lnh;
u8 opcode; u8 opcode;
...@@ -730,7 +727,7 @@ static void mem_timer(unsigned long data) ...@@ -730,7 +727,7 @@ static void mem_timer(unsigned long data)
{ {
struct qib_ibdev *dev = (struct qib_ibdev *) data; struct qib_ibdev *dev = (struct qib_ibdev *) data;
struct list_head *list = &dev->memwait; struct list_head *list = &dev->memwait;
struct qib_qp *qp = NULL; struct rvt_qp *qp = NULL;
struct qib_qp_priv *priv = NULL; struct qib_qp_priv *priv = NULL;
unsigned long flags; unsigned long flags;
...@@ -757,9 +754,9 @@ static void mem_timer(unsigned long data) ...@@ -757,9 +754,9 @@ static void mem_timer(unsigned long data)
} }
} }
static void update_sge(struct qib_sge_state *ss, u32 length) static void update_sge(struct rvt_sge_state *ss, u32 length)
{ {
struct qib_sge *sge = &ss->sge; struct rvt_sge *sge = &ss->sge;
sge->vaddr += length; sge->vaddr += length;
sge->length -= length; sge->length -= length;
...@@ -768,7 +765,7 @@ static void update_sge(struct qib_sge_state *ss, u32 length) ...@@ -768,7 +765,7 @@ static void update_sge(struct qib_sge_state *ss, u32 length)
if (--ss->num_sge) if (--ss->num_sge)
*sge = *ss->sg_list++; *sge = *ss->sg_list++;
} else if (sge->length == 0 && sge->mr->lkey) { } else if (sge->length == 0 && sge->mr->lkey) {
if (++sge->n >= QIB_SEGSZ) { if (++sge->n >= RVT_SEGSZ) {
if (++sge->m >= sge->mr->mapsz) if (++sge->m >= sge->mr->mapsz)
return; return;
sge->n = 0; sge->n = 0;
...@@ -814,7 +811,7 @@ static inline u32 clear_upper_bytes(u32 data, u32 n, u32 off) ...@@ -814,7 +811,7 @@ static inline u32 clear_upper_bytes(u32 data, u32 n, u32 off)
} }
#endif #endif
static void copy_io(u32 __iomem *piobuf, struct qib_sge_state *ss, static void copy_io(u32 __iomem *piobuf, struct rvt_sge_state *ss,
u32 length, unsigned flush_wc) u32 length, unsigned flush_wc)
{ {
u32 extra = 0; u32 extra = 0;
...@@ -951,7 +948,7 @@ static void copy_io(u32 __iomem *piobuf, struct qib_sge_state *ss, ...@@ -951,7 +948,7 @@ static void copy_io(u32 __iomem *piobuf, struct qib_sge_state *ss,
} }
static noinline struct qib_verbs_txreq *__get_txreq(struct qib_ibdev *dev, static noinline struct qib_verbs_txreq *__get_txreq(struct qib_ibdev *dev,
struct qib_qp *qp) struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
struct qib_verbs_txreq *tx; struct qib_verbs_txreq *tx;
...@@ -983,7 +980,7 @@ static noinline struct qib_verbs_txreq *__get_txreq(struct qib_ibdev *dev, ...@@ -983,7 +980,7 @@ static noinline struct qib_verbs_txreq *__get_txreq(struct qib_ibdev *dev,
} }
static inline struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev, static inline struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
struct qib_qp *qp) struct rvt_qp *qp)
{ {
struct qib_verbs_txreq *tx; struct qib_verbs_txreq *tx;
unsigned long flags; unsigned long flags;
...@@ -1007,7 +1004,7 @@ static inline struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev, ...@@ -1007,7 +1004,7 @@ static inline struct qib_verbs_txreq *get_txreq(struct qib_ibdev *dev,
void qib_put_txreq(struct qib_verbs_txreq *tx) void qib_put_txreq(struct qib_verbs_txreq *tx)
{ {
struct qib_ibdev *dev; struct qib_ibdev *dev;
struct qib_qp *qp; struct rvt_qp *qp;
struct qib_qp_priv *priv; struct qib_qp_priv *priv;
unsigned long flags; unsigned long flags;
...@@ -1017,7 +1014,7 @@ void qib_put_txreq(struct qib_verbs_txreq *tx) ...@@ -1017,7 +1014,7 @@ void qib_put_txreq(struct qib_verbs_txreq *tx)
if (atomic_dec_and_test(&qp->refcount)) if (atomic_dec_and_test(&qp->refcount))
wake_up(&qp->wait); wake_up(&qp->wait);
if (tx->mr) { if (tx->mr) {
qib_put_mr(tx->mr); rvt_put_mr(tx->mr);
tx->mr = NULL; tx->mr = NULL;
} }
if (tx->txreq.flags & QIB_SDMA_TXREQ_F_FREEBUF) { if (tx->txreq.flags & QIB_SDMA_TXREQ_F_FREEBUF) {
...@@ -1063,9 +1060,9 @@ void qib_put_txreq(struct qib_verbs_txreq *tx) ...@@ -1063,9 +1060,9 @@ void qib_put_txreq(struct qib_verbs_txreq *tx)
*/ */
void qib_verbs_sdma_desc_avail(struct qib_pportdata *ppd, unsigned avail) void qib_verbs_sdma_desc_avail(struct qib_pportdata *ppd, unsigned avail)
{ {
struct qib_qp *qp, *nqp; struct rvt_qp *qp, *nqp;
struct qib_qp_priv *qpp, *nqpp; struct qib_qp_priv *qpp, *nqpp;
struct qib_qp *qps[20]; struct rvt_qp *qps[20];
struct qib_ibdev *dev; struct qib_ibdev *dev;
unsigned i, n; unsigned i, n;
...@@ -1111,7 +1108,7 @@ static void sdma_complete(struct qib_sdma_txreq *cookie, int status) ...@@ -1111,7 +1108,7 @@ static void sdma_complete(struct qib_sdma_txreq *cookie, int status)
{ {
struct qib_verbs_txreq *tx = struct qib_verbs_txreq *tx =
container_of(cookie, struct qib_verbs_txreq, txreq); container_of(cookie, struct qib_verbs_txreq, txreq);
struct qib_qp *qp = tx->qp; struct rvt_qp *qp = tx->qp;
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
spin_lock(&qp->s_lock); spin_lock(&qp->s_lock);
...@@ -1142,7 +1139,7 @@ static void sdma_complete(struct qib_sdma_txreq *cookie, int status) ...@@ -1142,7 +1139,7 @@ static void sdma_complete(struct qib_sdma_txreq *cookie, int status)
qib_put_txreq(tx); qib_put_txreq(tx);
} }
static int wait_kmem(struct qib_ibdev *dev, struct qib_qp *qp) static int wait_kmem(struct qib_ibdev *dev, struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
unsigned long flags; unsigned long flags;
...@@ -1166,8 +1163,8 @@ static int wait_kmem(struct qib_ibdev *dev, struct qib_qp *qp) ...@@ -1166,8 +1163,8 @@ static int wait_kmem(struct qib_ibdev *dev, struct qib_qp *qp)
return ret; return ret;
} }
static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr, static int qib_verbs_send_dma(struct rvt_qp *qp, struct qib_ib_header *hdr,
u32 hdrwords, struct qib_sge_state *ss, u32 len, u32 hdrwords, struct rvt_sge_state *ss, u32 len,
u32 plen, u32 dwords) u32 plen, u32 dwords)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
...@@ -1271,7 +1268,7 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr, ...@@ -1271,7 +1268,7 @@ static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
* If we are now in the error state, return zero to flush the * If we are now in the error state, return zero to flush the
* send work request. * send work request.
*/ */
static int no_bufs_available(struct qib_qp *qp) static int no_bufs_available(struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
struct qib_ibdev *dev = to_idev(qp->ibqp.device); struct qib_ibdev *dev = to_idev(qp->ibqp.device);
...@@ -1303,8 +1300,8 @@ static int no_bufs_available(struct qib_qp *qp) ...@@ -1303,8 +1300,8 @@ static int no_bufs_available(struct qib_qp *qp)
return ret; return ret;
} }
static int qib_verbs_send_pio(struct qib_qp *qp, struct qib_ib_header *ibhdr, static int qib_verbs_send_pio(struct rvt_qp *qp, struct qib_ib_header *ibhdr,
u32 hdrwords, struct qib_sge_state *ss, u32 len, u32 hdrwords, struct rvt_sge_state *ss, u32 len,
u32 plen, u32 dwords) u32 plen, u32 dwords)
{ {
struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device); struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
...@@ -1385,7 +1382,7 @@ static int qib_verbs_send_pio(struct qib_qp *qp, struct qib_ib_header *ibhdr, ...@@ -1385,7 +1382,7 @@ static int qib_verbs_send_pio(struct qib_qp *qp, struct qib_ib_header *ibhdr,
} }
qib_sendbuf_done(dd, pbufn); qib_sendbuf_done(dd, pbufn);
if (qp->s_rdma_mr) { if (qp->s_rdma_mr) {
qib_put_mr(qp->s_rdma_mr); rvt_put_mr(qp->s_rdma_mr);
qp->s_rdma_mr = NULL; qp->s_rdma_mr = NULL;
} }
if (qp->s_wqe) { if (qp->s_wqe) {
...@@ -1411,8 +1408,8 @@ static int qib_verbs_send_pio(struct qib_qp *qp, struct qib_ib_header *ibhdr, ...@@ -1411,8 +1408,8 @@ static int qib_verbs_send_pio(struct qib_qp *qp, struct qib_ib_header *ibhdr,
* Return zero if packet is sent or queued OK. * Return zero if packet is sent or queued OK.
* Return non-zero and clear qp->s_flags QIB_S_BUSY otherwise. * Return non-zero and clear qp->s_flags QIB_S_BUSY otherwise.
*/ */
int qib_verbs_send(struct qib_qp *qp, struct qib_ib_header *hdr, int qib_verbs_send(struct rvt_qp *qp, struct qib_ib_header *hdr,
u32 hdrwords, struct qib_sge_state *ss, u32 len) u32 hdrwords, struct rvt_sge_state *ss, u32 len)
{ {
struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device); struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
u32 plen; u32 plen;
...@@ -1544,8 +1541,8 @@ void qib_ib_piobufavail(struct qib_devdata *dd) ...@@ -1544,8 +1541,8 @@ void qib_ib_piobufavail(struct qib_devdata *dd)
{ {
struct qib_ibdev *dev = &dd->verbs_dev; struct qib_ibdev *dev = &dd->verbs_dev;
struct list_head *list; struct list_head *list;
struct qib_qp *qps[5]; struct rvt_qp *qps[5];
struct qib_qp *qp; struct rvt_qp *qp;
unsigned long flags; unsigned long flags;
unsigned i, n; unsigned i, n;
struct qib_qp_priv *priv; struct qib_qp_priv *priv;
...@@ -1617,8 +1614,8 @@ static int qib_query_device(struct ib_device *ibdev, struct ib_device_attr *prop ...@@ -1617,8 +1614,8 @@ static int qib_query_device(struct ib_device *ibdev, struct ib_device_attr *prop
props->max_cq = ib_qib_max_cqs; props->max_cq = ib_qib_max_cqs;
props->max_ah = ib_qib_max_ahs; props->max_ah = ib_qib_max_ahs;
props->max_cqe = ib_qib_max_cqes; props->max_cqe = ib_qib_max_cqes;
props->max_mr = dev->lk_table.max; props->max_mr = dev->rdi.lkey_table.max;
props->max_fmr = dev->lk_table.max; props->max_fmr = dev->rdi.lkey_table.max;
props->max_map_per_fmr = 32767; props->max_map_per_fmr = 32767;
props->max_pd = dev->rdi.dparms.props.max_pd; props->max_pd = dev->rdi.dparms.props.max_pd;
props->max_qp_rd_atom = QIB_MAX_RDMA_ATOMIC; props->max_qp_rd_atom = QIB_MAX_RDMA_ATOMIC;
...@@ -1848,7 +1845,7 @@ struct ib_ah *qib_create_qp0_ah(struct qib_ibport *ibp, u16 dlid) ...@@ -1848,7 +1845,7 @@ struct ib_ah *qib_create_qp0_ah(struct qib_ibport *ibp, u16 dlid)
{ {
struct ib_ah_attr attr; struct ib_ah_attr attr;
struct ib_ah *ah = ERR_PTR(-EINVAL); struct ib_ah *ah = ERR_PTR(-EINVAL);
struct qib_qp *qp0; struct rvt_qp *qp0;
memset(&attr, 0, sizeof(attr)); memset(&attr, 0, sizeof(attr));
attr.dlid = dlid; attr.dlid = dlid;
...@@ -2055,7 +2052,7 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2055,7 +2052,7 @@ int qib_register_ib_device(struct qib_devdata *dd)
struct qib_ibdev *dev = &dd->verbs_dev; struct qib_ibdev *dev = &dd->verbs_dev;
struct ib_device *ibdev = &dev->rdi.ibdev; struct ib_device *ibdev = &dev->rdi.ibdev;
struct qib_pportdata *ppd = dd->pport; struct qib_pportdata *ppd = dd->pport;
unsigned i, lk_tab_size; unsigned i;
int ret; int ret;
dev->qp_table_size = ib_qib_qp_table_size; dev->qp_table_size = ib_qib_qp_table_size;
...@@ -2087,29 +2084,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2087,29 +2084,6 @@ int qib_register_ib_device(struct qib_devdata *dd)
qib_init_qpn_table(dd, &dev->qpn_table); qib_init_qpn_table(dd, &dev->qpn_table);
/*
* The top ib_qib_lkey_table_size bits are used to index the
* table. The lower 8 bits can be owned by the user (copied from
* the LKEY). The remaining bits act as a generation number or tag.
*/
spin_lock_init(&dev->lk_table.lock);
/* insure generation is at least 4 bits see keys.c */
if (ib_qib_lkey_table_size > MAX_LKEY_TABLE_BITS) {
qib_dev_warn(dd, "lkey bits %u too large, reduced to %u\n",
ib_qib_lkey_table_size, MAX_LKEY_TABLE_BITS);
ib_qib_lkey_table_size = MAX_LKEY_TABLE_BITS;
}
dev->lk_table.max = 1 << ib_qib_lkey_table_size;
lk_tab_size = dev->lk_table.max * sizeof(*dev->lk_table.table);
dev->lk_table.table = (struct qib_mregion __rcu **)
vmalloc(lk_tab_size);
if (dev->lk_table.table == NULL) {
ret = -ENOMEM;
goto err_lk;
}
RCU_INIT_POINTER(dev->dma_mr, NULL);
for (i = 0; i < dev->lk_table.max; i++)
RCU_INIT_POINTER(dev->lk_table.table[i], NULL);
INIT_LIST_HEAD(&dev->pending_mmaps); INIT_LIST_HEAD(&dev->pending_mmaps);
spin_lock_init(&dev->pending_lock); spin_lock_init(&dev->pending_lock);
dev->mmap_offset = PAGE_SIZE; dev->mmap_offset = PAGE_SIZE;
...@@ -2221,15 +2195,15 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2221,15 +2195,15 @@ int qib_register_ib_device(struct qib_devdata *dd)
ibdev->resize_cq = qib_resize_cq; ibdev->resize_cq = qib_resize_cq;
ibdev->poll_cq = qib_poll_cq; ibdev->poll_cq = qib_poll_cq;
ibdev->req_notify_cq = qib_req_notify_cq; ibdev->req_notify_cq = qib_req_notify_cq;
ibdev->get_dma_mr = qib_get_dma_mr; ibdev->get_dma_mr = NULL;
ibdev->reg_user_mr = qib_reg_user_mr; ibdev->reg_user_mr = NULL;
ibdev->dereg_mr = qib_dereg_mr; ibdev->dereg_mr = NULL;
ibdev->alloc_mr = qib_alloc_mr; ibdev->alloc_mr = NULL;
ibdev->map_mr_sg = qib_map_mr_sg; ibdev->map_mr_sg = NULL;
ibdev->alloc_fmr = qib_alloc_fmr; ibdev->alloc_fmr = NULL;
ibdev->map_phys_fmr = qib_map_phys_fmr; ibdev->map_phys_fmr = NULL;
ibdev->unmap_fmr = qib_unmap_fmr; ibdev->unmap_fmr = NULL;
ibdev->dealloc_fmr = qib_dealloc_fmr; ibdev->dealloc_fmr = NULL;
ibdev->attach_mcast = qib_multicast_attach; ibdev->attach_mcast = qib_multicast_attach;
ibdev->detach_mcast = qib_multicast_detach; ibdev->detach_mcast = qib_multicast_detach;
ibdev->process_mad = qib_process_mad; ibdev->process_mad = qib_process_mad;
...@@ -2247,10 +2221,9 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2247,10 +2221,9 @@ int qib_register_ib_device(struct qib_devdata *dd)
dd->verbs_dev.rdi.driver_f.get_card_name = qib_get_card_name; dd->verbs_dev.rdi.driver_f.get_card_name = qib_get_card_name;
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.dparms.props.max_pd = ib_qib_max_pds; dd->verbs_dev.rdi.dparms.props.max_pd = ib_qib_max_pds;
dd->verbs_dev.rdi.flags = (RVT_FLAG_MR_INIT_DRIVER | dd->verbs_dev.rdi.flags = (RVT_FLAG_QP_INIT_DRIVER |
RVT_FLAG_QP_INIT_DRIVER |
RVT_FLAG_CQ_INIT_DRIVER); RVT_FLAG_CQ_INIT_DRIVER);
dd->verbs_dev.rdi.dparms.lkey_table_size = qib_lkey_table_size;
ret = rvt_register_device(&dd->verbs_dev.rdi); ret = rvt_register_device(&dd->verbs_dev.rdi);
if (ret) if (ret)
...@@ -2286,8 +2259,6 @@ int qib_register_ib_device(struct qib_devdata *dd) ...@@ -2286,8 +2259,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:
vfree(dev->lk_table.table);
err_lk:
kfree(dev->qp_table); kfree(dev->qp_table);
err_qpt: err_qpt:
qib_dev_err(dd, "cannot register verbs: %d!\n", -ret); qib_dev_err(dd, "cannot register verbs: %d!\n", -ret);
...@@ -2299,7 +2270,6 @@ void qib_unregister_ib_device(struct qib_devdata *dd) ...@@ -2299,7 +2270,6 @@ 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; u32 qps_inuse;
unsigned lk_tab_size;
qib_verbs_unregister_sysfs(dd); qib_verbs_unregister_sysfs(dd);
...@@ -2315,8 +2285,6 @@ void qib_unregister_ib_device(struct qib_devdata *dd) ...@@ -2315,8 +2285,6 @@ void qib_unregister_ib_device(struct qib_devdata *dd)
qib_dev_err(dd, "txwait list not empty!\n"); qib_dev_err(dd, "txwait list not empty!\n");
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");
if (dev->dma_mr)
qib_dev_err(dd, "DMA MR not NULL!\n");
qps_inuse = qib_free_all_qps(dd); qps_inuse = qib_free_all_qps(dd);
if (qps_inuse) if (qps_inuse)
...@@ -2338,15 +2306,13 @@ void qib_unregister_ib_device(struct qib_devdata *dd) ...@@ -2338,15 +2306,13 @@ 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);
lk_tab_size = dev->lk_table.max * sizeof(*dev->lk_table.table);
vfree(dev->lk_table.table);
kfree(dev->qp_table); kfree(dev->qp_table);
} }
/* /*
* This must be called with s_lock held. * This must be called with s_lock held.
*/ */
void qib_schedule_send(struct qib_qp *qp) void qib_schedule_send(struct rvt_qp *qp)
{ {
struct qib_qp_priv *priv = qp->priv; struct qib_qp_priv *priv = qp->priv;
if (qib_send_ok(qp)) { if (qib_send_ok(qp)) {
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
* qib_mcast_qp_alloc - alloc a struct to link a QP to mcast GID struct * qib_mcast_qp_alloc - alloc a struct to link a QP to mcast GID struct
* @qp: the QP to link * @qp: the QP to link
*/ */
static struct qib_mcast_qp *qib_mcast_qp_alloc(struct qib_qp *qp) static struct qib_mcast_qp *qib_mcast_qp_alloc(struct rvt_qp *qp)
{ {
struct qib_mcast_qp *mqp; struct qib_mcast_qp *mqp;
...@@ -56,7 +56,7 @@ static struct qib_mcast_qp *qib_mcast_qp_alloc(struct qib_qp *qp) ...@@ -56,7 +56,7 @@ static struct qib_mcast_qp *qib_mcast_qp_alloc(struct qib_qp *qp)
static void qib_mcast_qp_free(struct qib_mcast_qp *mqp) static void qib_mcast_qp_free(struct qib_mcast_qp *mqp)
{ {
struct qib_qp *qp = mqp->qp; struct rvt_qp *qp = mqp->qp;
/* Notify qib_destroy_qp() if it is waiting. */ /* Notify qib_destroy_qp() if it is waiting. */
if (atomic_dec_and_test(&qp->refcount)) if (atomic_dec_and_test(&qp->refcount))
...@@ -224,7 +224,7 @@ static int qib_mcast_add(struct qib_ibdev *dev, struct qib_ibport *ibp, ...@@ -224,7 +224,7 @@ static int qib_mcast_add(struct qib_ibdev *dev, struct qib_ibport *ibp,
int qib_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) int qib_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
{ {
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
struct qib_ibdev *dev = to_idev(ibqp->device); struct qib_ibdev *dev = to_idev(ibqp->device);
struct qib_ibport *ibp; struct qib_ibport *ibp;
struct qib_mcast *mcast; struct qib_mcast *mcast;
...@@ -282,7 +282,7 @@ int qib_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) ...@@ -282,7 +282,7 @@ int qib_multicast_attach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
int qib_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid) int qib_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid)
{ {
struct qib_qp *qp = to_iqp(ibqp); struct rvt_qp *qp = to_iqp(ibqp);
struct qib_ibdev *dev = to_idev(ibqp->device); struct qib_ibdev *dev = to_idev(ibqp->device);
struct qib_ibport *ibp = to_iport(ibqp->device, qp->port_num); struct qib_ibport *ibp = to_iport(ibqp->device, qp->port_num);
struct qib_mcast *mcast = NULL; struct qib_mcast *mcast = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册