Commit 7c2e11fe authored by Dennis Dalessandro's avatar Dennis Dalessandro Committed by 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: default avatarIra Weiny <ira.weiny@intel.com>
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 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)) {
......
...@@ -210,7 +210,7 @@ struct qib_pio_header { ...@@ -210,7 +210,7 @@ struct qib_pio_header {
*/ */
struct qib_mcast_qp { struct qib_mcast_qp {
struct list_head list; struct list_head list;
struct qib_qp *qp; struct rvt_qp *qp;
}; };
struct qib_mcast { struct qib_mcast {
...@@ -229,20 +229,6 @@ struct qib_ah { ...@@ -229,20 +229,6 @@ struct qib_ah {
atomic_t refcount; atomic_t refcount;
}; };
/*
* This structure is used by qib_mmap() to validate an offset
* when an mmap() request is made. The vm_area_struct then uses
* this as its vm_private_data.
*/
struct qib_mmap_info {
struct list_head pending_mmaps;
struct ib_ucontext *context;
void *obj;
__u64 offset;
struct kref ref;
unsigned size;
};
/* /*
* This structure is used to contain the head pointer, tail pointer, * This structure is used to contain the head pointer, tail pointer,
* and completion queue entries as a single memory allocation so * and completion queue entries as a single memory allocation so
...@@ -269,154 +255,21 @@ struct qib_cq { ...@@ -269,154 +255,21 @@ struct qib_cq {
u8 notify; u8 notify;
u8 triggered; u8 triggered;
struct qib_cq_wc *queue; struct qib_cq_wc *queue;
struct qib_mmap_info *ip; struct rvt_mmap_info *ip;
};
/*
* A segment is a linear region of low physical memory.
* XXX Maybe we should use phys addr here and kmap()/kunmap().
* Used by the verbs layer.
*/
struct qib_seg {
void *vaddr;
size_t length;
};
/* The number of qib_segs that fit in a page. */
#define QIB_SEGSZ (PAGE_SIZE / sizeof(struct qib_seg))
struct qib_segarray {
struct qib_seg segs[QIB_SEGSZ];
};
struct qib_mregion {
struct ib_pd *pd; /* shares refcnt of ibmr.pd */
u64 user_base; /* User's address for this region */
u64 iova; /* IB start address of this region */
size_t length;
u32 lkey;
u32 offset; /* offset (bytes) to start of region */
int access_flags;
u32 max_segs; /* number of qib_segs in all the arrays */
u32 mapsz; /* size of the map array */
u8 page_shift; /* 0 - non unform/non powerof2 sizes */
u8 lkey_published; /* in global table */
struct completion comp; /* complete when refcount goes to zero */
struct rcu_head list;
atomic_t refcount;
struct qib_segarray *map[0]; /* the segments */
};
/*
* These keep track of the copy progress within a memory region.
* Used by the verbs layer.
*/
struct qib_sge {
struct qib_mregion *mr;
void *vaddr; /* kernel virtual address of segment */
u32 sge_length; /* length of the SGE */
u32 length; /* remaining length of the segment */
u16 m; /* current index: mr->map[m] */
u16 n; /* current index: mr->map[m]->segs[n] */
};
/* Memory region */
struct qib_mr {
struct ib_mr ibmr;
struct ib_umem *umem;
u64 *pages;
u32 npages;
struct qib_mregion mr; /* must be last */
};
/*
* Send work request queue entry.
* The size of the sg_list is determined when the QP is created and stored
* in qp->s_max_sge.
*/
struct qib_swqe {
union {
struct ib_send_wr wr; /* don't use wr.sg_list */
struct ib_ud_wr ud_wr;
struct ib_reg_wr reg_wr;
struct ib_rdma_wr rdma_wr;
struct ib_atomic_wr atomic_wr;
};
u32 psn; /* first packet sequence number */
u32 lpsn; /* last packet sequence number */
u32 ssn; /* send sequence number */
u32 length; /* total length of data in sg_list */
struct qib_sge sg_list[0];
};
/*
* Receive work request queue entry.
* The size of the sg_list is determined when the QP (or SRQ) is created
* and stored in qp->r_rq.max_sge (or srq->rq.max_sge).
*/
struct qib_rwqe {
u64 wr_id;
u8 num_sge;
struct ib_sge sg_list[0];
};
/*
* This structure is used to contain the head pointer, tail pointer,
* and receive work queue entries as a single memory allocation so
* it can be mmap'ed into user space.
* Note that the wq array elements are variable size so you can't
* just index into the array to get the N'th element;
* use get_rwqe_ptr() instead.
*/
struct qib_rwq {
u32 head; /* new work requests posted to the head */
u32 tail; /* receives pull requests from here. */
struct qib_rwqe wq[0];
};
struct qib_rq {
struct qib_rwq *wq;
u32 size; /* size of RWQE array */
u8 max_sge;
spinlock_t lock /* protect changes in this struct */
____cacheline_aligned_in_smp;
}; };
struct qib_srq { struct qib_srq {
struct ib_srq ibsrq; struct ib_srq ibsrq;
struct qib_rq rq; struct rvt_rq rq;
struct qib_mmap_info *ip; struct rvt_mmap_info *ip;
/* send signal when number of RWQEs < limit */ /* send signal when number of RWQEs < limit */
u32 limit; u32 limit;
}; };
struct qib_sge_state {
struct qib_sge *sg_list; /* next SGE to be used if any */
struct qib_sge sge; /* progress state for the current SGE */
u32 total_len;
u8 num_sge;
};
/*
* This structure holds the information that the send tasklet needs
* to send a RDMA read response or atomic operation.
*/
struct qib_ack_entry {
u8 opcode;
u8 sent;
u32 psn;
u32 lpsn;
union {
struct qib_sge rdma_sge;
u64 atomic_data;
};
};
/* /*
* qib specific data structure that will be hidden from rvt after the queue pair * qib specific data structure that will be hidden from rvt after the queue pair
* is made common. * is made common.
*/ */
struct qib_qp;
struct qib_qp_priv { struct qib_qp_priv {
struct qib_ib_header *s_hdr; /* next packet header to send */ struct qib_ib_header *s_hdr; /* next packet header to send */
struct list_head iowait; /* link for wait PIO buf */ struct list_head iowait; /* link for wait PIO buf */
...@@ -424,121 +277,7 @@ struct qib_qp_priv { ...@@ -424,121 +277,7 @@ struct qib_qp_priv {
struct qib_verbs_txreq *s_tx; struct qib_verbs_txreq *s_tx;
struct work_struct s_work; struct work_struct s_work;
wait_queue_head_t wait_dma; wait_queue_head_t wait_dma;
struct qib_qp *owner; struct rvt_qp *owner;
};
/*
* Variables prefixed with s_ are for the requester (sender).
* Variables prefixed with r_ are for the responder (receiver).
* Variables prefixed with ack_ are for responder replies.
*
* Common variables are protected by both r_rq.lock and s_lock in that order
* which only happens in modify_qp() or changing the QP 'state'.
*/
struct qib_qp {
struct ib_qp ibqp;
struct qib_qp_priv *priv;
/* read mostly fields above and below */
struct ib_ah_attr remote_ah_attr;
struct ib_ah_attr alt_ah_attr;
struct qib_qp __rcu *next; /* link list for QPN hash table */
struct qib_swqe *s_wq; /* send work queue */
struct qib_mmap_info *ip;
unsigned long timeout_jiffies; /* computed from timeout */
enum ib_mtu path_mtu;
u32 remote_qpn;
u32 pmtu; /* decoded from path_mtu */
u32 qkey; /* QKEY for this QP (for UD or RD) */
u32 s_size; /* send work queue size */
u32 s_rnr_timeout; /* number of milliseconds for RNR timeout */
u8 state; /* QP state */
u8 qp_access_flags;
u8 alt_timeout; /* Alternate path timeout for this QP */
u8 timeout; /* Timeout for this QP */
u8 s_srate;
u8 s_mig_state;
u8 port_num;
u8 s_pkey_index; /* PKEY index to use */
u8 s_alt_pkey_index; /* Alternate path PKEY index to use */
u8 r_max_rd_atomic; /* max number of RDMA read/atomic to receive */
u8 s_max_rd_atomic; /* max number of RDMA read/atomic to send */
u8 s_retry_cnt; /* number of times to retry */
u8 s_rnr_retry_cnt;
u8 r_min_rnr_timer; /* retry timeout value for RNR NAKs */
u8 s_max_sge; /* size of s_wq->sg_list */
u8 s_draining;
/* start of read/write fields */
atomic_t refcount ____cacheline_aligned_in_smp;
wait_queue_head_t wait;
struct qib_ack_entry s_ack_queue[QIB_MAX_RDMA_ATOMIC + 1]
____cacheline_aligned_in_smp;
struct qib_sge_state s_rdma_read_sge;
spinlock_t r_lock ____cacheline_aligned_in_smp; /* used for APM */
unsigned long r_aflags;
u64 r_wr_id; /* ID for current receive WQE */
u32 r_ack_psn; /* PSN for next ACK or atomic ACK */
u32 r_len; /* total length of r_sge */
u32 r_rcv_len; /* receive data len processed */
u32 r_psn; /* expected rcv packet sequence number */
u32 r_msn; /* message sequence number */
u8 r_state; /* opcode of last packet received */
u8 r_flags;
u8 r_head_ack_queue; /* index into s_ack_queue[] */
struct list_head rspwait; /* link for waititing to respond */
struct qib_sge_state r_sge; /* current receive data */
struct qib_rq r_rq; /* receive work queue */
spinlock_t s_lock ____cacheline_aligned_in_smp;
struct qib_sge_state *s_cur_sge;
u32 s_flags;
struct qib_swqe *s_wqe;
struct qib_sge_state s_sge; /* current send request data */
struct qib_mregion *s_rdma_mr;
u32 s_cur_size; /* size of send packet in bytes */
u32 s_len; /* total length of s_sge */
u32 s_rdma_read_len; /* total length of s_rdma_read_sge */
u32 s_next_psn; /* PSN for next request */
u32 s_last_psn; /* last response PSN processed */
u32 s_sending_psn; /* lowest PSN that is being sent */
u32 s_sending_hpsn; /* highest PSN that is being sent */
u32 s_psn; /* current packet sequence number */
u32 s_ack_rdma_psn; /* PSN for sending RDMA read responses */
u32 s_ack_psn; /* PSN for acking sends and RDMA writes */
u32 s_head; /* new entries added here */
u32 s_tail; /* next entry to process */
u32 s_cur; /* current work queue entry */
u32 s_acked; /* last un-ACK'ed entry */
u32 s_last; /* last completed entry */
u32 s_ssn; /* SSN of tail entry */
u32 s_lsn; /* limit sequence number (credit) */
u16 s_hdrwords; /* size of s_hdr in 32 bit words */
u16 s_rdma_ack_cnt;
u8 s_state; /* opcode of last packet sent */
u8 s_ack_state; /* opcode of packet to ACK */
u8 s_nak_state; /* non-zero if NAK is pending */
u8 r_nak_state; /* non-zero if NAK is pending */
u8 s_retry; /* requester retry counter */
u8 s_rnr_retry; /* requester RNR retry counter */
u8 s_num_rd_atomic; /* number of RDMA read/atomic pending */
u8 s_tail_ack_queue; /* index into s_ack_queue[] */
struct qib_sge_state s_ack_rdma_sge;
struct timer_list s_timer;
struct qib_sge r_sg_list[0] /* verified SGEs */
____cacheline_aligned_in_smp;
}; };
/* /*
...@@ -616,27 +355,27 @@ struct qib_qp { ...@@ -616,27 +355,27 @@ struct qib_qp {
#define QIB_PSN_CREDIT 16 #define QIB_PSN_CREDIT 16
/* /*
* Since struct qib_swqe is not a fixed size, we can't simply index into * Since struct rvt_swqe is not a fixed size, we can't simply index into
* struct qib_qp.s_wq. This function does the array index computation. * struct rvt_qp.s_wq. This function does the array index computation.
*/ */
static inline struct qib_swqe *get_swqe_ptr(struct qib_qp *qp, static inline struct rvt_swqe *get_swqe_ptr(struct rvt_qp *qp,
unsigned n) unsigned n)
{ {
return (struct qib_swqe *)((char *)qp->s_wq + return (struct rvt_swqe *)((char *)qp->s_wq +
(sizeof(struct qib_swqe) + (sizeof(struct rvt_swqe) +
qp->s_max_sge * qp->s_max_sge *
sizeof(struct qib_sge)) * n); sizeof(struct rvt_sge)) * n);
} }
/* /*
* Since struct qib_rwqe is not a fixed size, we can't simply index into * Since struct rvt_rwqe is not a fixed size, we can't simply index into
* struct qib_rwq.wq. This function does the array index computation. * struct rvt_rwq.wq. This function does the array index computation.
*/ */
static inline struct qib_rwqe *get_rwqe_ptr(struct qib_rq *rq, unsigned n) static inline struct rvt_rwqe *get_rwqe_ptr(struct rvt_rq *rq, unsigned n)
{ {
return (struct qib_rwqe *) return (struct rvt_rwqe *)
((char *) rq->wq->wq + ((char *) rq->wq->wq +
(sizeof(struct qib_rwqe) + (sizeof(struct rvt_rwqe) +
rq->max_sge * sizeof(struct ib_sge)) * n); rq->max_sge * sizeof(struct ib_sge)) * n);
} }
...@@ -660,16 +399,6 @@ struct qib_qpn_table { ...@@ -660,16 +399,6 @@ struct qib_qpn_table {
struct qpn_map map[QPNMAP_ENTRIES]; struct qpn_map map[QPNMAP_ENTRIES];
}; };
#define MAX_LKEY_TABLE_BITS 23
struct qib_lkey_table {
spinlock_t lock; /* protect changes in this struct */
u32 next; /* next unused index (speeds search) */
u32 gen; /* generation count */
u32 max; /* size of the table */
struct qib_mregion __rcu **table;
};
struct qib_opcode_stats { struct qib_opcode_stats {
u64 n_packets; /* number of packets */ u64 n_packets; /* number of packets */
u64 n_bytes; /* total number of bytes */ u64 n_bytes; /* total number of bytes */
...@@ -687,8 +416,8 @@ struct qib_pma_counters { ...@@ -687,8 +416,8 @@ struct qib_pma_counters {
}; };
struct qib_ibport { struct qib_ibport {
struct qib_qp __rcu *qp0; struct rvt_qp __rcu *qp0;
struct qib_qp __rcu *qp1; struct rvt_qp __rcu *qp1;
struct ib_mad_agent *send_agent; /* agent for SMI (traps) */ struct ib_mad_agent *send_agent; /* agent for SMI (traps) */
struct qib_ah *sm_ah; struct qib_ah *sm_ah;
struct qib_ah *smi_ah; struct qib_ah *smi_ah;
...@@ -761,18 +490,16 @@ struct qib_ibdev { ...@@ -761,18 +490,16 @@ struct qib_ibdev {
struct list_head pending_mmaps; struct list_head pending_mmaps;
spinlock_t mmap_offset_lock; /* protect mmap_offset */ spinlock_t mmap_offset_lock; /* protect mmap_offset */
u32 mmap_offset; u32 mmap_offset;
struct qib_mregion __rcu *dma_mr;
/* QP numbers are shared by all IB ports */ /* QP numbers are shared by all IB ports */
struct qib_qpn_table qpn_table; struct qib_qpn_table qpn_table;
struct qib_lkey_table lk_table;
struct list_head piowait; /* list for wait PIO buf */ struct list_head piowait; /* list for wait PIO buf */
struct list_head dmawait; /* list for wait DMA */ struct list_head dmawait; /* list for wait DMA */
struct list_head txwait; /* list for wait qib_verbs_txreq */ struct list_head txwait; /* list for wait qib_verbs_txreq */
struct list_head memwait; /* list for wait kernel memory */ struct list_head memwait; /* list for wait kernel memory */
struct list_head txreq_free; struct list_head txreq_free;
struct timer_list mem_timer; struct timer_list mem_timer;
struct qib_qp __rcu **qp_table; struct rvt_qp __rcu **qp_table;
struct qib_pio_header *pio_hdrs; struct qib_pio_header *pio_hdrs;
dma_addr_t pio_hdrs_phys; dma_addr_t pio_hdrs_phys;
/* list of QPs waiting for RNR timer */ /* list of QPs waiting for RNR timer */
...@@ -818,11 +545,6 @@ struct qib_verbs_counters { ...@@ -818,11 +545,6 @@ struct qib_verbs_counters {
u32 vl15_dropped; u32 vl15_dropped;
}; };
static inline struct qib_mr *to_imr(struct ib_mr *ibmr)
{
return container_of(ibmr, struct qib_mr, ibmr);
}
static inline struct qib_ah *to_iah(struct ib_ah *ibah) static inline struct qib_ah *to_iah(struct ib_ah *ibah)
{ {
return container_of(ibah, struct qib_ah, ibah); return container_of(ibah, struct qib_ah, ibah);
...@@ -838,9 +560,9 @@ static inline struct qib_srq *to_isrq(struct ib_srq *ibsrq) ...@@ -838,9 +560,9 @@ static inline struct qib_srq *to_isrq(struct ib_srq *ibsrq)
return container_of(ibsrq, struct qib_srq, ibsrq); return container_of(ibsrq, struct qib_srq, ibsrq);
} }
static inline struct qib_qp *to_iqp(struct ib_qp *ibqp) static inline struct rvt_qp *to_iqp(struct ib_qp *ibqp)
{ {
return container_of(ibqp, struct qib_qp, ibqp); return container_of(ibqp, struct rvt_qp, ibqp);
} }
static inline struct qib_ibdev *to_idev(struct ib_device *ibdev) static inline struct qib_ibdev *to_idev(struct ib_device *ibdev)
...@@ -855,7 +577,7 @@ static inline struct qib_ibdev *to_idev(struct ib_device *ibdev) ...@@ -855,7 +577,7 @@ static inline struct qib_ibdev *to_idev(struct ib_device *ibdev)
* Send if not busy or waiting for I/O and either * Send if not busy or waiting for I/O and either
* a RC response is pending or we can process send work requests. * a RC response is pending or we can process send work requests.
*/ */
static inline int qib_send_ok(struct qib_qp *qp) static inline int qib_send_ok(struct rvt_qp *qp)
{ {
return !(qp->s_flags & (QIB_S_BUSY | QIB_S_ANY_WAIT_IO)) && return !(qp->s_flags & (QIB_S_BUSY | QIB_S_ANY_WAIT_IO)) &&
(qp->s_hdrwords || (qp->s_flags & QIB_S_RESP_PENDING) || (qp->s_hdrwords || (qp->s_flags & QIB_S_RESP_PENDING) ||
...@@ -865,7 +587,7 @@ static inline int qib_send_ok(struct qib_qp *qp) ...@@ -865,7 +587,7 @@ static inline int qib_send_ok(struct qib_qp *qp)
/* /*
* 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);
static inline int qib_pkey_ok(u16 pkey1, u16 pkey2) static inline int qib_pkey_ok(u16 pkey1, u16 pkey2)
{ {
...@@ -916,9 +638,9 @@ int qib_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid); ...@@ -916,9 +638,9 @@ int qib_multicast_detach(struct ib_qp *ibqp, union ib_gid *gid, u16 lid);
int qib_mcast_tree_empty(struct qib_ibport *ibp); int qib_mcast_tree_empty(struct qib_ibport *ibp);
__be32 qib_compute_aeth(struct qib_qp *qp); __be32 qib_compute_aeth(struct rvt_qp *qp);
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 ib_qp *qib_create_qp(struct ib_pd *ibpd, struct ib_qp *qib_create_qp(struct ib_pd *ibpd,
struct ib_qp_init_attr *init_attr, struct ib_qp_init_attr *init_attr,
...@@ -926,7 +648,7 @@ struct ib_qp *qib_create_qp(struct ib_pd *ibpd, ...@@ -926,7 +648,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);
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);
int qib_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, 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);
...@@ -952,7 +674,7 @@ void qib_qp_iter_print(struct seq_file *s, struct qib_qp_iter *iter); ...@@ -952,7 +674,7 @@ void qib_qp_iter_print(struct seq_file *s, struct qib_qp_iter *iter);
#endif #endif
void qib_get_credit(struct qib_qp *qp, u32 aeth); void qib_get_credit(struct rvt_qp *qp, u32 aeth);
unsigned qib_pkt_delay(u32 plen, u8 snd_mult, u8 rcv_mult); unsigned qib_pkt_delay(u32 plen, u8 snd_mult, u8 rcv_mult);
...@@ -960,19 +682,19 @@ void qib_verbs_sdma_desc_avail(struct qib_pportdata *ppd, unsigned avail); ...@@ -960,19 +682,19 @@ void qib_verbs_sdma_desc_avail(struct qib_pportdata *ppd, unsigned avail);
void qib_put_txreq(struct qib_verbs_txreq *tx); void qib_put_txreq(struct qib_verbs_txreq *tx);
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);
void qib_copy_sge(struct qib_sge_state *ss, void *data, u32 length, void qib_copy_sge(struct rvt_sge_state *ss, void *data, u32 length,
int release); int release);
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);
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);
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);
int qib_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr); int qib_check_ah(struct ib_device *ibdev, struct ib_ah_attr *ah_attr);
...@@ -980,24 +702,14 @@ struct ib_ah *qib_create_qp0_ah(struct qib_ibport *ibp, u16 dlid); ...@@ -980,24 +702,14 @@ struct ib_ah *qib_create_qp0_ah(struct qib_ibport *ibp, u16 dlid);
void qib_rc_rnr_retry(unsigned long arg); void qib_rc_rnr_retry(unsigned long arg);
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);
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);
int qib_post_ud_send(struct qib_qp *qp, struct ib_send_wr *wr); int qib_post_ud_send(struct rvt_qp *qp, struct ib_send_wr *wr);
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);
int qib_alloc_lkey(struct qib_mregion *mr, int dma_region);
void qib_free_lkey(struct qib_mregion *mr);
int qib_lkey_ok(struct qib_lkey_table *rkt, struct rvt_pd *pd,
struct qib_sge *isge, struct ib_sge *sge, int acc);
int qib_rkey_ok(struct qib_qp *qp, struct qib_sge *sge,
u32 len, u64 vaddr, u32 rkey, int acc);
int qib_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr, 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);
...@@ -1033,93 +745,53 @@ int qib_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags notify_flags); ...@@ -1033,93 +745,53 @@ int qib_req_notify_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags notify_flags);
int qib_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata); int qib_resize_cq(struct ib_cq *ibcq, int cqe, struct ib_udata *udata);
struct ib_mr *qib_get_dma_mr(struct ib_pd *pd, int acc);
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);
int qib_dereg_mr(struct ib_mr *ibmr);
struct ib_mr *qib_alloc_mr(struct ib_pd *pd,
enum ib_mr_type mr_type,
u32 max_entries);
int qib_map_mr_sg(struct ib_mr *ibmr,
struct scatterlist *sg,
int sg_nents);
int qib_reg_mr(struct qib_qp *qp, struct ib_reg_wr *wr);
struct ib_fmr *qib_alloc_fmr(struct ib_pd *pd, int mr_access_flags,
struct ib_fmr_attr *fmr_attr);
int qib_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list,
int list_len, u64 iova);
int qib_unmap_fmr(struct list_head *fmr_list);
int qib_dealloc_fmr(struct ib_fmr *ibfmr);
static inline void qib_get_mr(struct qib_mregion *mr)
{
atomic_inc(&mr->refcount);
}
void mr_rcu_callback(struct rcu_head *list); void mr_rcu_callback(struct rcu_head *list);
static inline void qib_put_mr(struct qib_mregion *mr) static inline void qib_put_ss(struct rvt_sge_state *ss)
{
if (unlikely(atomic_dec_and_test(&mr->refcount)))
call_rcu(&mr->list, mr_rcu_callback);
}
static inline void qib_put_ss(struct qib_sge_state *ss)
{ {
while (ss->num_sge) { while (ss->num_sge) {
qib_put_mr(ss->sge.mr); rvt_put_mr(ss->sge.mr);
if (--ss->num_sge) if (--ss->num_sge)
ss->sge = *ss->sg_list++; ss->sge = *ss->sg_list++;
} }
} }
void qib_release_mmap_info(struct kref *ref); void qib_release_mmap_info(struct kref *ref);
struct qib_mmap_info *qib_create_mmap_info(struct qib_ibdev *dev, u32 size, struct rvt_mmap_info *qib_create_mmap_info(struct qib_ibdev *dev, u32 size,
struct ib_ucontext *context, struct ib_ucontext *context,
void *obj); void *obj);
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);
int qib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma); int qib_mmap(struct ib_ucontext *context, struct vm_area_struct *vma);
int qib_get_rwqe(struct qib_qp *qp, int wr_id_only); int qib_get_rwqe(struct rvt_qp *qp, int wr_id_only);
void qib_migrate_qp(struct qib_qp *qp); void qib_migrate_qp(struct rvt_qp *qp);
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);
u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr, u32 qib_make_grh(struct qib_ibport *ibp, struct ib_grh *hdr,
struct ib_global_route *grh, u32 hwords, u32 nwords); struct ib_global_route *grh, u32 hwords, u32 nwords);
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);
void qib_do_send(struct work_struct *work); void qib_do_send(struct work_struct *work);
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);
void qib_send_rc_ack(struct qib_qp *qp); void qib_send_rc_ack(struct rvt_qp *qp);
int qib_make_rc_req(struct qib_qp *qp); int qib_make_rc_req(struct rvt_qp *qp);
int qib_make_uc_req(struct qib_qp *qp); int qib_make_uc_req(struct rvt_qp *qp);
int qib_make_ud_req(struct qib_qp *qp); int qib_make_ud_req(struct rvt_qp *qp);
int qib_register_ib_device(struct qib_devdata *); int qib_register_ib_device(struct qib_devdata *);
...@@ -1157,7 +829,7 @@ extern const int ib_qib_state_ops[]; ...@@ -1157,7 +829,7 @@ extern const int ib_qib_state_ops[];
extern __be64 ib_qib_sys_image_guid; /* in network order */ extern __be64 ib_qib_sys_image_guid; /* in network order */
extern unsigned int ib_qib_lkey_table_size; extern unsigned int ib_rvt_lkey_table_size;
extern unsigned int ib_qib_max_cqes; extern unsigned int ib_qib_max_cqes;
......
...@@ -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%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment