obj-$(CONFIG_INFINIBAND_QIB) += ib_qib.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_mad.o qib_mmap.o qib_mr.o qib_pcie.o qib_pio_copy.o \
+       qib_file_ops.o qib_fs.o qib_init.o qib_intr.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_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 \
 
        /* ctxt rcvhdrq head offset */
        u32 head;
        /* lookaside fields */
-       struct qib_qp *lookaside_qp;
+       struct rvt_qp *lookaside_qp;
        u32 lookaside_qpn;
        /* QPs waiting for context processing */
        struct list_head qp_wait_list;
 #endif
 };
 
-struct qib_sge_state;
+struct rvt_sge_state;
 
 struct qib_sdma_txreq {
        int                 flags;
 
 struct qib_verbs_txreq {
        struct qib_sdma_txreq   txreq;
-       struct qib_qp           *qp;
-       struct qib_swqe         *wqe;
+       struct rvt_qp           *qp;
+       struct rvt_swqe         *wqe;
        u32                     dwords;
        u16                     hdr_dwords;
        u16                     hdr_inx;
        struct qib_pio_header   *align_buf;
-       struct qib_mregion      *mr;
-       struct qib_sge_state    *ss;
+       struct rvt_mregion      *mr;
+       struct rvt_sge_state    *ss;
 };
 
 #define QIB_SDMA_TXREQ_F_USELARGEBUF  0x1
 void qib_sdma_intr(struct qib_pportdata *);
 void qib_user_sdma_send_desc(struct qib_pportdata *dd,
                        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 *);
 /* ppd->sdma_lock should be locked before calling this. */
 int qib_sdma_make_progress(struct qib_pportdata *dd);
 
 
        if (cq->ip) {
                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);
 
 
                struct qib_ib_header *hdr = (struct qib_ib_header *) rhdr;
                struct qib_other_headers *ohdr = NULL;
                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);
                u16 lid  = be16_to_cpu(hdr->lrh[1]);
                int lnh = be16_to_cpu(hdr->lrh[0]) & 3;
        u32 eflags, etype, tlen, i = 0, updegr = 0, crcs = 0;
        int last;
        u64 lval;
-       struct qib_qp *qp, *nqp;
+       struct rvt_qp *qp, *nqp;
 
        l = rcd->head;
        rhf_addr = (__le32 *) rcd->rcvhdrq + l + dd->rhf_offset;
 
  *
  */
 
-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;
        u32 r;
        u32 n;
        int ret = 0;
        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);
 
        /* special case for dma_mr lkey == 0 */
        if (dma_region) {
-               struct qib_mregion *tmr;
+               struct rvt_mregion *tmr;
 
                tmr = rcu_access_pointer(dev->dma_mr);
                if (!tmr) {
         * bits are capped in qib_verbs.c to insure enough bits
         * for generation number
         */
-       mr->lkey = (r << (32 - ib_qib_lkey_table_size)) |
-               ((((1 << (24 - ib_qib_lkey_table_size)) - 1) & rkt->gen)
+       mr->lkey = (r << (32 - ib_rvt_lkey_table_size)) |
+               ((((1 << (24 - ib_rvt_lkey_table_size)) - 1) & rkt->gen)
                 << 8);
        if (mr->lkey == 0) {
                mr->lkey |= 1 << 8;
  * qib_free_lkey - free an lkey
  * @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;
        u32 lkey = mr->lkey;
        u32 r;
        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);
        if (!mr->lkey_published)
        if (lkey == 0)
                RCU_INIT_POINTER(dev->dma_mr, NULL);
        else {
-               r = lkey >> (32 - ib_qib_lkey_table_size);
+               r = lkey >> (32 - ib_rvt_lkey_table_size);
                RCU_INIT_POINTER(rkt->table[r], NULL);
        }
        qib_put_mr(mr);
        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
  * @qp: qp for validation
  *
  * 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)
 {
-       struct qib_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table;
-       struct qib_mregion *mr;
+       struct rvt_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table;
+       struct rvt_mregion *mr;
        unsigned n, m;
        size_t off;
 
        }
 
        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))
                goto bail;
 
 
                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;
+               m = entries_spanned_by_off / RVT_SEGSZ;
+               n = entries_spanned_by_off % RVT_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) {
+                       if (n >= RVT_SEGSZ) {
                                m++;
                                n = 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;
-}
 
 
 /**
  * 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)
 {
-       struct qib_mmap_info *ip =
-               container_of(ref, struct qib_mmap_info, ref);
+       struct rvt_mmap_info *ip =
+               container_of(ref, struct rvt_mmap_info, ref);
        struct qib_ibdev *dev = to_idev(ip->context->device);
 
        spin_lock_irq(&dev->pending_lock);
  */
 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);
 }
 
 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);
 }
        struct qib_ibdev *dev = to_idev(context->device);
        unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
        unsigned long size = vma->vm_end - vma->vm_start;
-       struct qib_mmap_info *ip, *pp;
+       struct rvt_mmap_info *ip, *pp;
        int ret = -EINVAL;
 
        /*
 /*
  * 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,
                                           struct ib_ucontext *context,
                                           void *obj) {
-       struct qib_mmap_info *ip;
+       struct rvt_mmap_info *ip;
 
        ip = kmalloc(sizeof(*ip), GFP_KERNEL);
        if (!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)
 {
        size = PAGE_ALIGN(size);
 
+++ /dev/null
-/*
- * 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);
-}
 
  * Put the QP into the hash table.
  * 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);
        unsigned long flags;
  * Remove the QP from the table so it can't be found asynchronously by
  * 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);
        unsigned n = qpn_hash(dev, qp->ibqp.qp_num);
                        lockdep_is_held(&dev->qpt_lock)) == qp) {
                RCU_INIT_POINTER(ibp->qp1, NULL);
        } else {
-               struct qib_qp *q;
-               struct qib_qp __rcu **qpp;
+               struct rvt_qp *q;
+               struct rvt_qp __rcu **qpp;
 
                removed = 0;
                qpp = &dev->qp_table[n];
 {
        struct qib_ibdev *dev = &dd->verbs_dev;
        unsigned long flags;
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
        unsigned n, qp_inuse = 0;
 
        for (n = 0; n < dd->num_pports; n++) {
  * The caller is responsible for decrementing the QP reference count
  * 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();
        if (unlikely(qpn <= 1)) {
  * @qp: the QP to reset
  * @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;
        qp->remote_qpn = 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;
 
 
        if (clr_sends) {
                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;
 
                        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 ||
                            qp->ibqp.qp_type == IB_QPT_SMI ||
                                qp->s_last = 0;
                }
                if (qp->s_rdma_mr) {
-                       qib_put_mr(qp->s_rdma_mr);
+                       rvt_put_mr(qp->s_rdma_mr);
                        qp->s_rdma_mr = NULL;
                }
        }
                return;
 
        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 &&
                    e->rdma_sge.mr) {
-                       qib_put_mr(e->rdma_sge.mr);
+                       rvt_put_mr(e->rdma_sge.mr);
                        e->rdma_sge.mr = NULL;
                }
        }
  * The QP r_lock and s_lock should be held and interrupts disabled.
  * 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_ibdev *dev = to_idev(qp->ibqp.device);
        if (!(qp->s_flags & QIB_S_BUSY)) {
                qp->s_hdrwords = 0;
                if (qp->s_rdma_mr) {
-                       qib_put_mr(qp->s_rdma_mr);
+                       rvt_put_mr(qp->s_rdma_mr);
                        qp->s_rdma_mr = NULL;
                }
                if (priv->s_tx) {
        wc.status = IB_WC_WR_FLUSH_ERR;
 
        if (qp->r_rq.wq) {
-               struct qib_rwq *wq;
+               struct rvt_rwq *wq;
                u32 head;
                u32 tail;
 
                  int attr_mask, struct ib_udata *udata)
 {
        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;
        enum ib_qp_state cur_state, new_state;
        struct ib_event ev;
 int qib_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *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->cur_qp_state = attr->qp_state;
  *
  * 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;
 
        } else {
                u32 min, max, x;
                u32 credits;
-               struct qib_rwq *wq = qp->r_rq.wq;
+               struct rvt_rwq *wq = qp->r_rq.wq;
                u32 head;
                u32 tail;
 
                            struct ib_qp_init_attr *init_attr,
                            struct ib_udata *udata)
 {
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
        int err;
-       struct qib_swqe *swq = NULL;
+       struct rvt_swqe *swq = NULL;
        struct qib_ibdev *dev;
        struct qib_devdata *dd;
        size_t sz;
        case IB_QPT_UC:
        case IB_QPT_RC:
        case IB_QPT_UD:
-               sz = sizeof(struct qib_sge) *
+               sz = sizeof(struct rvt_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,
                                gfp, PAGE_KERNEL);
                if (swq == NULL) {
                        qp->r_rq.size = init_attr->cap.max_recv_wr + 1;
                        qp->r_rq.max_sge = init_attr->cap.max_recv_sge;
                        sz = (sizeof(struct ib_sge) * qp->r_rq.max_sge) +
-                               sizeof(struct qib_rwqe);
+                               sizeof(struct rvt_rwqe);
                        if (gfp != GFP_NOIO)
                                qp->r_rq.wq = vmalloc_user(
-                                               sizeof(struct qib_rwq) +
+                                               sizeof(struct rvt_rwq) +
                                                qp->r_rq.size * sz);
                        else
                                qp->r_rq.wq = __vmalloc(
-                                               sizeof(struct qib_rwq) +
+                                               sizeof(struct rvt_rwq) +
                                                qp->r_rq.size * sz,
                                                gfp, PAGE_KERNEL);
 
                                goto bail_ip;
                        }
                } 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,
                                                      ibpd->uobject->context,
  */
 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_qp_priv *priv = qp->priv;
 
  *
  * 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;
 
 
 struct qib_qp_iter {
        struct qib_ibdev *dev;
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
        int n;
 };
 
        struct qib_ibdev *dev = iter->dev;
        int n = iter->n;
        int ret = 1;
-       struct qib_qp *pqp = iter->qp;
-       struct qib_qp *qp;
+       struct rvt_qp *pqp = iter->qp;
+       struct rvt_qp *qp;
 
        for (; n < dev->qp_table_size; n++) {
                if (pqp)
 
 void qib_qp_iter_print(struct seq_file *s, struct qib_qp_iter *iter)
 {
-       struct qib_swqe *wqe;
-       struct qib_qp *qp = iter->qp;
+       struct rvt_swqe *wqe;
+       struct rvt_qp *qp = iter->qp;
        struct qib_qp_priv *priv = qp->priv;
 
        wqe = get_swqe_ptr(qp, qp->s_last);
 
 
 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 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_timer.function = rc_timeout;
  * Note that we are in the responder's side of the QP context.
  * 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_ack_entry *e;
+       struct rvt_ack_entry *e;
        u32 hwords;
        u32 len;
        u32 bth0;
        case OP(RDMA_READ_RESPONSE_ONLY):
                e = &qp->s_ack_queue[qp->s_tail_ack_queue];
                if (e->rdma_sge.mr) {
-                       qib_put_mr(e->rdma_sge.mr);
+                       rvt_put_mr(e->rdma_sge.mr);
                        e->rdma_sge.mr = NULL;
                }
                /* FALLTHROUGH */
                        /* Copy SGE state in case we need to resend */
                        qp->s_rdma_mr = e->rdma_sge.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.num_sge = 1;
                        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;
                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;
                if (len > pmtu)
                        len = pmtu;
  *
  * 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_ibdev *dev = to_idev(qp->ibqp.device);
        struct qib_other_headers *ohdr;
-       struct qib_sge_state *ss;
-       struct qib_swqe *wqe;
+       struct rvt_sge_state *ss;
+       struct rvt_swqe *wqe;
        u32 hwords;
        u32 len;
        u32 bth0;
  * Note that RDMA reads and atomics are handled in the
  * 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_ibport *ibp = to_iport(qp->ibqp.device, qp->port_num);
  * for the given QP.
  * 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;
-       struct qib_swqe *wqe = get_swqe_ptr(qp, n);
+       struct rvt_swqe *wqe = get_swqe_ptr(qp, n);
        u32 opcode;
 
        qp->s_cur = n;
  * Back up requester to resend the last un-ACKed request.
  * 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;
 
        if (qp->s_retry == 0) {
  */
 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;
        unsigned long flags;
 
  */
 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;
 
        spin_lock_irqsave(&qp->s_lock, flags);
  * Set qp->s_sending_psn to the next PSN after the given one.
  * 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;
 
        /* Find the work request corresponding to the given PSN. */
 /*
  * 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_swqe *wqe;
+       struct rvt_swqe *wqe;
        struct ib_wc wc;
        unsigned i;
        u32 opcode;
                    qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) <= 0)
                        break;
                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. */
                if (!(qp->s_flags & QIB_S_SIGNAL_REQ_WR) ||
        }
 }
 
-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;
 }
  * 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.
  */
-static struct qib_swqe *do_rc_completion(struct qib_qp *qp,
-                                        struct qib_swqe *wqe,
+static struct rvt_swqe *do_rc_completion(struct rvt_qp *qp,
+                                        struct rvt_swqe *wqe,
                                         struct qib_ibport *ibp)
 {
        struct ib_wc wc;
        if (qib_cmp24(wqe->lpsn, qp->s_sending_psn) < 0 ||
            qib_cmp24(qp->s_sending_psn, qp->s_sending_hpsn) > 0) {
                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. */
                if (!(qp->s_flags & QIB_S_SIGNAL_REQ_WR) ||
  * Called at interrupt level with the QP s_lock held.
  * 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)
 {
        struct qib_ibport *ibp;
        enum ib_wc_status status;
-       struct qib_swqe *wqe;
+       struct rvt_swqe *wqe;
        int ret = 0;
        u32 ack_psn;
        int diff;
  * 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.
  */
-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_swqe *wqe;
+       struct rvt_swqe *wqe;
 
        /* Remove QP from retry timer */
        if (qp->s_flags & (QIB_S_TIMER | QIB_S_WAIT_RNR)) {
 static void qib_rc_rcv_resp(struct qib_ibport *ibp,
                            struct qib_other_headers *ohdr,
                            void *data, u32 tlen,
-                           struct qib_qp *qp,
+                           struct rvt_qp *qp,
                            u32 opcode,
                            u32 psn, u32 hdrsize, u32 pmtu,
                            struct qib_ctxtdata *rcd)
 {
-       struct qib_swqe *wqe;
+       struct rvt_swqe *wqe;
        struct qib_pportdata *ppd = ppd_from_ibp(ibp);
        enum ib_wc_status status;
        unsigned long flags;
  */
 static int qib_rc_rcv_error(struct qib_other_headers *ohdr,
                            void *data,
-                           struct qib_qp *qp,
+                           struct rvt_qp *qp,
                            u32 opcode,
                            u32 psn,
                            int diff,
                            struct qib_ctxtdata *rcd)
 {
        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;
        u8 i, prev;
        int old_req;
                if (unlikely(offset + len != e->rdma_sge.sge_length))
                        goto unlock_done;
                if (e->rdma_sge.mr) {
-                       qib_put_mr(e->rdma_sge.mr);
+                       rvt_put_mr(e->rdma_sge.mr);
                        e->rdma_sge.mr = NULL;
                }
                if (len != 0) {
                        u64 vaddr = be64_to_cpu(reth->vaddr);
                        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);
                        if (unlikely(!ok))
                                goto unlock_done;
        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;
        int lastwqe;
        }
 }
 
-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;
 
  * Called at interrupt level.
  */
 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_other_headers *ohdr;
                        int ok;
 
                        /* 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);
                        if (unlikely(!ok))
                                goto nack_acc;
                goto send_last;
 
        case OP(RDMA_READ_REQUEST): {
-               struct qib_ack_entry *e;
+               struct rvt_ack_entry *e;
                u32 len;
                u8 next;
 
                }
                e = &qp->s_ack_queue[qp->r_head_ack_queue];
                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;
                }
                reth = &ohdr->u.rc.reth;
                        int ok;
 
                        /* 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);
                        if (unlikely(!ok))
                                goto nack_acc_unlck;
        case OP(COMPARE_SWAP):
        case OP(FETCH_ADD): {
                struct ib_atomic_eth *ateth;
-               struct qib_ack_entry *e;
+               struct rvt_ack_entry *e;
                u64 vaddr;
                atomic64_t *maddr;
                u64 sdata;
                }
                e = &qp->s_ack_queue[qp->r_head_ack_queue];
                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;
                }
                ateth = &ohdr->u.atomic_eth;
                        goto nack_inv_unlck;
                rkey = be32_to_cpu(ateth->rkey);
                /* 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,
                                          IB_ACCESS_REMOTE_ATOMIC)))
                        goto nack_acc_unlck;
                        (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
                                      be64_to_cpu(ateth->compare_data),
                                      sdata);
-               qib_put_mr(qp->r_sge.sge.mr);
+               rvt_put_mr(qp->r_sge.sge.mr);
                qp->r_sge.num_sge = 0;
                e->opcode = opcode;
                e->sent = 0;
 
  * Validate a RWQE and fill in the SGE state.
  * 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;
        struct ib_wc wc;
-       struct qib_lkey_table *rkt;
+       struct rvt_lkey_table *rkt;
        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);
        ss = &qp->r_sge;
        ss->sg_list = qp->r_sg_list;
                if (wqe->sg_list[i].length == 0)
                        continue;
                /* 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))
                        goto bad_lkey;
                qp->r_len += wqe->sg_list[i].length;
 
 bad_lkey:
        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;
        memset(&wc, 0, sizeof(wc));
  *
  * 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;
-       struct qib_rq *rq;
-       struct qib_rwq *wq;
+       struct rvt_rq *rq;
+       struct rvt_rwq *wq;
        struct qib_srq *srq;
-       struct qib_rwqe *wqe;
+       struct rvt_rwqe *wqe;
        void (*handler)(struct ib_event *, void *);
        u32 tail;
        int ret;
  * Switch to alternate path.
  * 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;
 
  * 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 has_grh, struct qib_qp *qp, u32 bth0)
+                     int has_grh, struct rvt_qp *qp, u32 bth0)
 {
        __be64 guid;
        unsigned long flags;
  * receive interrupts since this is a connected protocol and all packets
  * 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_qp *qp;
-       struct qib_swqe *wqe;
-       struct qib_sge *sge;
+       struct rvt_qp *qp;
+       struct rvt_swqe *wqe;
+       struct rvt_sge *sge;
        unsigned long flags;
        struct ib_wc wc;
        u64 sdata;
                        goto inv_err;
                if (wqe->length == 0)
                        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.rkey,
                                          IB_ACCESS_REMOTE_WRITE)))
        case IB_WR_RDMA_READ:
                if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_READ)))
                        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.rkey,
                                          IB_ACCESS_REMOTE_READ)))
        case IB_WR_ATOMIC_FETCH_AND_ADD:
                if (unlikely(!(qp->qp_access_flags & IB_ACCESS_REMOTE_ATOMIC)))
                        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.rkey,
                                          IB_ACCESS_REMOTE_ATOMIC)))
                        (u64) atomic64_add_return(sdata, maddr) - sdata :
                        (u64) cmpxchg((u64 *) qp->r_sge.sge.vaddr,
                                      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;
                goto send_comp;
 
                sge->sge_length -= len;
                if (sge->sge_length == 0) {
                        if (!release)
-                               qib_put_mr(sge->mr);
+                               rvt_put_mr(sge->mr);
                        if (--sqp->s_sge.num_sge)
                                *sge = *sqp->s_sge.sg_list++;
                } else if (sge->length == 0 && sge->mr->lkey) {
-                       if (++sge->n >= QIB_SEGSZ) {
+                       if (++sge->n >= RVT_SEGSZ) {
                                if (++sge->m >= sge->mr->mapsz)
                                        break;
                                sge->n = 0;
        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)
 {
        struct qib_qp_priv *priv = qp->priv;
 {
        struct qib_qp_priv *priv = container_of(work, struct qib_qp_priv,
                                                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_pportdata *ppd = ppd_from_ibp(ibp);
-       int (*make_req)(struct qib_qp *qp);
+       int (*make_req)(struct rvt_qp *qp);
        unsigned long flags;
 
        if ((qp->ibqp.qp_type == IB_QPT_RC ||
 /*
  * 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)
 {
        u32 old_last, last;
                return;
 
        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 ||
            qp->ibqp.qp_type == IB_QPT_SMI ||
 
  * 3) The SGE addresses are suitable for passing to dma_map_single().
  */
 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)
 {
        unsigned long flags;
-       struct qib_sge *sge;
-       struct qib_qp *qp;
+       struct rvt_sge *sge;
+       struct rvt_qp *qp;
        int ret = 0;
        u16 tail;
        __le64 *descqp;
                        if (--ss->num_sge)
                                *sge = *ss->sg_list++;
                } else if (sge->length == 0 && sge->mr->lkey) {
-                       if (++sge->n >= QIB_SEGSZ) {
+                       if (++sge->n >= RVT_SEGSZ) {
                                if (++sge->m >= sge->mr->mapsz)
                                        break;
                                sge->n = 0;
 
                         struct ib_recv_wr **bad_wr)
 {
        struct qib_srq *srq = to_isrq(ibsrq);
-       struct qib_rwq *wq;
+       struct rvt_rwq *wq;
        unsigned long flags;
        int ret;
 
        for (; wr; wr = wr->next) {
-               struct qib_rwqe *wqe;
+               struct rvt_rwqe *wqe;
                u32 next;
                int i;
 
        srq->rq.size = srq_init_attr->attr.max_wr + 1;
        srq->rq.max_sge = srq_init_attr->attr.max_sge;
        sz = sizeof(struct ib_sge) * srq->rq.max_sge +
-               sizeof(struct qib_rwqe);
-       srq->rq.wq = vmalloc_user(sizeof(struct qib_rwq) + srq->rq.size * sz);
+               sizeof(struct rvt_rwqe);
+       srq->rq.wq = vmalloc_user(sizeof(struct rvt_rwq) + srq->rq.size * sz);
        if (!srq->rq.wq) {
                ret = ERR_PTR(-ENOMEM);
                goto bail_srq;
         */
        if (udata && udata->outlen >= sizeof(__u64)) {
                int err;
-               u32 s = sizeof(struct qib_rwq) + srq->rq.size * sz;
+               u32 s = sizeof(struct rvt_rwq) + srq->rq.size * sz;
 
                srq->ip =
                    qib_create_mmap_info(dev, s, ibpd->uobject->context,
                   struct ib_udata *udata)
 {
        struct qib_srq *srq = to_isrq(ibsrq);
-       struct qib_rwq *wq;
+       struct rvt_rwq *wq;
        int ret = 0;
 
        if (attr_mask & IB_SRQ_MAX_WR) {
-               struct qib_rwq *owq;
-               struct qib_rwqe *p;
+               struct rvt_rwq *owq;
+               struct rvt_rwqe *p;
                u32 sz, size, n, head, tail;
 
                /* Check that the requested sizes are below the limits. */
                        goto bail;
                }
 
-               sz = sizeof(struct qib_rwqe) +
+               sz = sizeof(struct rvt_rwqe) +
                        srq->rq.max_sge * sizeof(struct ib_sge);
                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) {
                        ret = -ENOMEM;
                        goto bail;
                n = 0;
                p = wq->wq;
                while (tail != head) {
-                       struct qib_rwqe *wqe;
+                       struct rvt_rwqe *wqe;
                        int i;
 
                        wqe = get_rwqe_ptr(&srq->rq, tail);
                        for (i = 0; i < wqe->num_sge; i++)
                                p->sg_list[i] = wqe->sg_list[i];
                        n++;
-                       p = (struct qib_rwqe *)((char *) p + sz);
+                       p = (struct rvt_rwqe *)((char *)p + sz);
                        if (++tail >= srq->rq.size)
                                tail = 0;
                }
                vfree(owq);
 
                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);
-                       u32 s = sizeof(struct qib_rwq) + size * sz;
+                       u32 s = sizeof(struct rvt_rwq) + size * sz;
 
                        qib_update_mmap_info(dev, ip, s, wq);
 
 
  *
  * 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_other_headers *ohdr;
-       struct qib_swqe *wqe;
+       struct rvt_swqe *wqe;
        unsigned long flags;
        u32 hwords;
        u32 bth0;
  * Called at interrupt level.
  */
 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;
        u32 opcode;
                        int ok;
 
                        /* 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);
                        if (unlikely(!ok))
                                goto drop;
 
  * Note that the receive interrupt handler may be calling qib_ud_rcv()
  * 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_pportdata *ppd;
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
        struct ib_ah_attr *ah_attr;
        unsigned long flags;
-       struct qib_sge_state ssge;
-       struct qib_sge *sge;
+       struct rvt_sge_state ssge;
+       struct rvt_sge *sge;
        struct ib_wc wc;
        u32 length;
        enum ib_qp_type sqptype, dqptype;
                        if (--ssge.num_sge)
                                *sge = *ssge.sg_list++;
                } else if (sge->length == 0 && sge->mr->lkey) {
-                       if (++sge->n >= QIB_SEGSZ) {
+                       if (++sge->n >= RVT_SEGSZ) {
                                if (++sge->m >= sge->mr->mapsz)
                                        break;
                                sge->n = 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_other_headers *ohdr;
        struct ib_ah_attr *ah_attr;
        struct qib_pportdata *ppd;
        struct qib_ibport *ibp;
-       struct qib_swqe *wqe;
+       struct rvt_swqe *wqe;
        unsigned long flags;
        u32 nwords;
        u32 extra_bytes;
  * Called at interrupt level.
  */
 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;
        int opcode;
 
 module_param_named(qp_table_size, ib_qib_qp_table_size, uint, S_IRUGO);
 MODULE_PARM_DESC(qp_table_size, "QP table size");
 
-unsigned int ib_qib_lkey_table_size = 16;
-module_param_named(lkey_table_size, ib_qib_lkey_table_size, uint,
+static unsigned int qib_lkey_table_size = 16;
+module_param_named(lkey_table_size, qib_lkey_table_size, uint,
                   S_IRUGO);
 MODULE_PARM_DESC(lkey_table_size,
                 "LKEY table size in bits (2^n, 1 <= n <= 23)");
  * @data: the data to copy
  * @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) {
                u32 len = sge->length;
                sge->sge_length -= len;
                if (sge->sge_length == 0) {
                        if (release)
-                               qib_put_mr(sge->mr);
+                               rvt_put_mr(sge->mr);
                        if (--ss->num_sge)
                                *sge = *ss->sg_list++;
                } else if (sge->length == 0 && sge->mr->lkey) {
-                       if (++sge->n >= QIB_SEGSZ) {
+                       if (++sge->n >= RVT_SEGSZ) {
                                if (++sge->m >= sge->mr->mapsz)
                                        break;
                                sge->n = 0;
  * @ss: the SGE state
  * @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) {
                u32 len = sge->length;
                sge->sge_length -= len;
                if (sge->sge_length == 0) {
                        if (release)
-                               qib_put_mr(sge->mr);
+                               rvt_put_mr(sge->mr);
                        if (--ss->num_sge)
                                *sge = *ss->sg_list++;
                } else if (sge->length == 0 && sge->mr->lkey) {
-                       if (++sge->n >= QIB_SEGSZ) {
+                       if (++sge->n >= RVT_SEGSZ) {
                                if (++sge->m >= sge->mr->mapsz)
                                        break;
                                sge->n = 0;
  * Don't modify the qib_sge_state to get the count.
  * 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 qib_sge sge = ss->sge;
+       struct rvt_sge *sg_list = ss->sg_list;
+       struct rvt_sge sge = ss->sge;
        u8 num_sge = ss->num_sge;
        u32 ndesc = 1;  /* count the header */
 
                        if (--num_sge)
                                sge = *sg_list++;
                } else if (sge.length == 0 && sge.mr->lkey) {
-                       if (++sge.n >= QIB_SEGSZ) {
+                       if (++sge.n >= RVT_SEGSZ) {
                                if (++sge.m >= sge.mr->mapsz)
                                        break;
                                sge.n = 0;
 /*
  * 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) {
                u32 len = sge->length;
                        if (--ss->num_sge)
                                *sge = *ss->sg_list++;
                } else if (sge->length == 0 && sge->mr->lkey) {
-                       if (++sge->n >= QIB_SEGSZ) {
+                       if (++sge->n >= RVT_SEGSZ) {
                                if (++sge->m >= sge->mr->mapsz)
                                        break;
                                sge->n = 0;
  * @qp: the QP to post on
  * @wr: the work request to send
  */
-static int qib_post_one_send(struct qib_qp *qp, struct ib_send_wr *wr,
-       int *scheduled)
+static int qib_post_one_send(struct rvt_qp *qp, struct ib_send_wr *wr,
+                            int *scheduled)
 {
-       struct qib_swqe *wqe;
+       struct rvt_swqe *wqe;
        u32 next;
        int i;
        int j;
        int acc;
        int ret;
        unsigned long flags;
-       struct qib_lkey_table *rkt;
+       struct rvt_lkey_table *rkt;
        struct rvt_pd *pd;
        int avoid_schedule = 0;
 
         * undefined operations.
         * Make sure buffer is large enough to hold the result for atomics.
         */
-       if (wr->opcode == IB_WR_REG_MR) {
-               if (qib_reg_mr(qp, reg_wr(wr)))
-                       goto bail_inval;
-       } else if (qp->ibqp.qp_type == IB_QPT_UC) {
+       if (qp->ibqp.qp_type == IB_QPT_UC) {
                if ((unsigned) wr->opcode >= IB_WR_RDMA_READ)
                        goto bail_inval;
        } else if (qp->ibqp.qp_type != IB_QPT_RC) {
                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);
        wqe = get_swqe_ptr(qp, qp->s_head);
 
 
                        if (length == 0)
                                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);
                        if (!ok)
                                goto bail_inval_free;
 
 bail_inval_free:
        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:
        ret = -EINVAL;
 static int qib_post_send(struct ib_qp *ibqp, struct ib_send_wr *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;
        int err = 0;
        int scheduled = 0;
 static int qib_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
                            struct ib_recv_wr **bad_wr)
 {
-       struct qib_qp *qp = to_iqp(ibqp);
-       struct qib_rwq *wq = qp->r_rq.wq;
+       struct rvt_qp *qp = to_iqp(ibqp);
+       struct rvt_rwq *wq = qp->r_rq.wq;
        unsigned long flags;
        int ret;
 
        }
 
        for (; wr; wr = wr->next) {
-               struct qib_rwqe *wqe;
+               struct rvt_rwqe *wqe;
                u32 next;
                int i;
 
  * Called at interrupt level.
  */
 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 = &ppd->ibport_data;
        struct qib_ib_header *hdr = rhdr;
        struct qib_other_headers *ohdr;
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
        u32 qp_num;
        int lnh;
        u8 opcode;
 {
        struct qib_ibdev *dev = (struct qib_ibdev *) data;
        struct list_head *list = &dev->memwait;
-       struct qib_qp *qp = NULL;
+       struct rvt_qp *qp = NULL;
        struct qib_qp_priv *priv = NULL;
        unsigned long flags;
 
        }
 }
 
-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->length -= length;
                if (--ss->num_sge)
                        *sge = *ss->sg_list++;
        } else if (sge->length == 0 && sge->mr->lkey) {
-               if (++sge->n >= QIB_SEGSZ) {
+               if (++sge->n >= RVT_SEGSZ) {
                        if (++sge->m >= sge->mr->mapsz)
                                return;
                        sge->n = 0;
 }
 #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 extra = 0;
 }
 
 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_verbs_txreq *tx;
 }
 
 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;
        unsigned long flags;
 void qib_put_txreq(struct qib_verbs_txreq *tx)
 {
        struct qib_ibdev *dev;
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
        struct qib_qp_priv *priv;
        unsigned long flags;
 
        if (atomic_dec_and_test(&qp->refcount))
                wake_up(&qp->wait);
        if (tx->mr) {
-               qib_put_mr(tx->mr);
+               rvt_put_mr(tx->mr);
                tx->mr = NULL;
        }
        if (tx->txreq.flags & QIB_SDMA_TXREQ_F_FREEBUF) {
  */
 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 *qps[20];
+       struct rvt_qp *qps[20];
        struct qib_ibdev *dev;
        unsigned i, n;
 
 {
        struct qib_verbs_txreq *tx =
                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;
 
        spin_lock(&qp->s_lock);
        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;
        unsigned long flags;
        return ret;
 }
 
-static int qib_verbs_send_dma(struct qib_qp *qp, struct qib_ib_header *hdr,
-                             u32 hdrwords, struct qib_sge_state *ss, u32 len,
+static int qib_verbs_send_dma(struct rvt_qp *qp, struct qib_ib_header *hdr,
+                             u32 hdrwords, struct rvt_sge_state *ss, u32 len,
                              u32 plen, u32 dwords)
 {
        struct qib_qp_priv *priv = qp->priv;
  * If we are now in the error state, return zero to flush the
  * 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_ibdev *dev = to_idev(qp->ibqp.device);
        return ret;
 }
 
-static int qib_verbs_send_pio(struct qib_qp *qp, struct qib_ib_header *ibhdr,
-                             u32 hdrwords, struct qib_sge_state *ss, u32 len,
+static int qib_verbs_send_pio(struct rvt_qp *qp, struct qib_ib_header *ibhdr,
+                             u32 hdrwords, struct rvt_sge_state *ss, u32 len,
                              u32 plen, u32 dwords)
 {
        struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
        }
        qib_sendbuf_done(dd, pbufn);
        if (qp->s_rdma_mr) {
-               qib_put_mr(qp->s_rdma_mr);
+               rvt_put_mr(qp->s_rdma_mr);
                qp->s_rdma_mr = NULL;
        }
        if (qp->s_wqe) {
  * Return zero if packet is sent or queued OK.
  * 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,
-                  u32 hdrwords, struct qib_sge_state *ss, u32 len)
+int qib_verbs_send(struct rvt_qp *qp, struct qib_ib_header *hdr,
+                  u32 hdrwords, struct rvt_sge_state *ss, u32 len)
 {
        struct qib_devdata *dd = dd_from_ibdev(qp->ibqp.device);
        u32 plen;
 {
        struct qib_ibdev *dev = &dd->verbs_dev;
        struct list_head *list;
-       struct qib_qp *qps[5];
-       struct qib_qp *qp;
+       struct rvt_qp *qps[5];
+       struct rvt_qp *qp;
        unsigned long flags;
        unsigned i, n;
        struct qib_qp_priv *priv;
        props->max_cq = ib_qib_max_cqs;
        props->max_ah = ib_qib_max_ahs;
        props->max_cqe = ib_qib_max_cqes;
-       props->max_mr = dev->lk_table.max;
-       props->max_fmr = dev->lk_table.max;
+       props->max_mr = dev->rdi.lkey_table.max;
+       props->max_fmr = dev->rdi.lkey_table.max;
        props->max_map_per_fmr = 32767;
        props->max_pd = dev->rdi.dparms.props.max_pd;
        props->max_qp_rd_atom = QIB_MAX_RDMA_ATOMIC;
 {
        struct ib_ah_attr attr;
        struct ib_ah *ah = ERR_PTR(-EINVAL);
-       struct qib_qp *qp0;
+       struct rvt_qp *qp0;
 
        memset(&attr, 0, sizeof(attr));
        attr.dlid = dlid;
        struct qib_ibdev *dev = &dd->verbs_dev;
        struct ib_device *ibdev = &dev->rdi.ibdev;
        struct qib_pportdata *ppd = dd->pport;
-       unsigned i, lk_tab_size;
+       unsigned i;
        int ret;
 
        dev->qp_table_size = ib_qib_qp_table_size;
 
        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);
        spin_lock_init(&dev->pending_lock);
        dev->mmap_offset = PAGE_SIZE;
        ibdev->resize_cq = qib_resize_cq;
        ibdev->poll_cq = qib_poll_cq;
        ibdev->req_notify_cq = qib_req_notify_cq;
-       ibdev->get_dma_mr = qib_get_dma_mr;
-       ibdev->reg_user_mr = qib_reg_user_mr;
-       ibdev->dereg_mr = qib_dereg_mr;
-       ibdev->alloc_mr = qib_alloc_mr;
-       ibdev->map_mr_sg = qib_map_mr_sg;
-       ibdev->alloc_fmr = qib_alloc_fmr;
-       ibdev->map_phys_fmr = qib_map_phys_fmr;
-       ibdev->unmap_fmr = qib_unmap_fmr;
-       ibdev->dealloc_fmr = qib_dealloc_fmr;
+       ibdev->get_dma_mr = NULL;
+       ibdev->reg_user_mr = NULL;
+       ibdev->dereg_mr = NULL;
+       ibdev->alloc_mr = NULL;
+       ibdev->map_mr_sg = NULL;
+       ibdev->alloc_fmr = NULL;
+       ibdev->map_phys_fmr = NULL;
+       ibdev->unmap_fmr = NULL;
+       ibdev->dealloc_fmr = NULL;
        ibdev->attach_mcast = qib_multicast_attach;
        ibdev->detach_mcast = qib_multicast_detach;
        ibdev->process_mad = qib_process_mad;
        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.dparms.props.max_pd = ib_qib_max_pds;
-       dd->verbs_dev.rdi.flags = (RVT_FLAG_MR_INIT_DRIVER |
-                                  RVT_FLAG_QP_INIT_DRIVER |
+       dd->verbs_dev.rdi.flags = (RVT_FLAG_QP_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);
        if (ret)
                                        sizeof(struct qib_pio_header),
                                  dev->pio_hdrs, dev->pio_hdrs_phys);
 err_hdrs:
-       vfree(dev->lk_table.table);
-err_lk:
        kfree(dev->qp_table);
 err_qpt:
        qib_dev_err(dd, "cannot register verbs: %d!\n", -ret);
 {
        struct qib_ibdev *dev = &dd->verbs_dev;
        u32 qps_inuse;
-       unsigned lk_tab_size;
 
        qib_verbs_unregister_sysfs(dd);
 
                qib_dev_err(dd, "txwait list not empty!\n");
        if (!list_empty(&dev->memwait))
                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);
        if (qps_inuse)
                                  dd->pport->sdma_descq_cnt *
                                        sizeof(struct qib_pio_header),
                                  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);
 }
 
 /*
  * 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;
        if (qib_send_ok(qp)) {
 
  */
 struct qib_mcast_qp {
        struct list_head list;
-       struct qib_qp *qp;
+       struct rvt_qp *qp;
 };
 
 struct qib_mcast {
        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,
  * and completion queue entries as a single memory allocation so
        u8 notify;
        u8 triggered;
        struct qib_cq_wc *queue;
-       struct qib_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 rvt_mmap_info *ip;
 };
 
 struct qib_srq {
        struct ib_srq ibsrq;
-       struct qib_rq rq;
-       struct qib_mmap_info *ip;
+       struct rvt_rq rq;
+       struct rvt_mmap_info *ip;
        /* send signal when number of RWQEs < 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
  * is made common.
  */
-struct qib_qp;
 struct qib_qp_priv {
        struct qib_ib_header *s_hdr;    /* next packet header to send */
        struct list_head iowait;        /* link for wait PIO buf */
        struct qib_verbs_txreq *s_tx;
        struct work_struct s_work;
        wait_queue_head_t wait_dma;
-       struct qib_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;
+       struct rvt_qp *owner;
 };
 
 /*
 #define QIB_PSN_CREDIT  16
 
 /*
- * Since struct qib_swqe is not a fixed size, we can't simply index into
- * struct qib_qp.s_wq.  This function does the array index computation.
+ * Since struct rvt_swqe is not a fixed size, we can't simply index into
+ * struct rvt_qp.s_wq.  This function does the array index computation.
  */
-static inline struct qib_swqe *get_swqe_ptr(struct qib_qp *qp,
-                                             unsigned n)
+static inline struct rvt_swqe *get_swqe_ptr(struct rvt_qp *qp,
+                                           unsigned n)
 {
-       return (struct qib_swqe *)((char *)qp->s_wq +
-                                    (sizeof(struct qib_swqe) +
+       return (struct rvt_swqe *)((char *)qp->s_wq +
+                                    (sizeof(struct rvt_swqe) +
                                      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
- * struct qib_rwq.wq.  This function does the array index computation.
+ * Since struct rvt_rwqe is not a fixed size, we can't simply index into
+ * 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 +
-                (sizeof(struct qib_rwqe) +
+                (sizeof(struct rvt_rwqe) +
                  rq->max_sge * sizeof(struct ib_sge)) * n);
 }
 
        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 {
        u64 n_packets;          /* number of packets */
        u64 n_bytes;            /* total number of bytes */
 };
 
 struct qib_ibport {
-       struct qib_qp __rcu *qp0;
-       struct qib_qp __rcu *qp1;
+       struct rvt_qp __rcu *qp0;
+       struct rvt_qp __rcu *qp1;
        struct ib_mad_agent *send_agent;        /* agent for SMI (traps) */
        struct qib_ah *sm_ah;
        struct qib_ah *smi_ah;
        struct list_head pending_mmaps;
        spinlock_t mmap_offset_lock; /* protect mmap_offset */
        u32 mmap_offset;
-       struct qib_mregion __rcu *dma_mr;
 
        /* QP numbers are shared by all IB ports */
        struct qib_qpn_table qpn_table;
-       struct qib_lkey_table lk_table;
        struct list_head piowait;       /* list for wait PIO buf */
        struct list_head dmawait;       /* list for wait DMA */
        struct list_head txwait;        /* list for wait qib_verbs_txreq */
        struct list_head memwait;       /* list for wait kernel memory */
        struct list_head txreq_free;
        struct timer_list mem_timer;
-       struct qib_qp __rcu **qp_table;
+       struct rvt_qp __rcu **qp_table;
        struct qib_pio_header *pio_hdrs;
        dma_addr_t pio_hdrs_phys;
        /* list of QPs waiting for RNR timer */
        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)
 {
        return container_of(ibah, struct qib_ah, ibah);
        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)
  * Send if not busy or waiting for I/O and either
  * 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)) &&
                (qp->s_hdrwords || (qp->s_flags & QIB_S_RESP_PENDING) ||
 /*
  * 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)
 {
 
 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_init_attr *init_attr,
 
 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 attr_mask, struct ib_udata *udata);
 
 #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);
 
 
 void qib_put_txreq(struct qib_verbs_txreq *tx);
 
-int qib_verbs_send(struct qib_qp *qp, struct qib_ib_header *hdr,
-                  u32 hdrwords, struct qib_sge_state *ss, u32 len);
+int qib_verbs_send(struct rvt_qp *qp, struct qib_ib_header *hdr,
+                  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);
 
-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,
-               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,
-               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);
 
 
 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,
-               int has_grh, void *data, u32 tlen, struct qib_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 has_grh, void *data, u32 tlen, struct rvt_qp *qp);
 
 int qib_post_srq_receive(struct ib_srq *ibsrq, struct ib_recv_wr *wr,
                         struct ib_recv_wr **bad_wr);
 
 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);
 
-static inline void qib_put_mr(struct qib_mregion *mr)
-{
-       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)
+static inline void qib_put_ss(struct rvt_sge_state *ss)
 {
        while (ss->num_sge) {
-               qib_put_mr(ss->sge.mr);
+               rvt_put_mr(ss->sge.mr);
                if (--ss->num_sge)
                        ss->sge = *ss->sg_list++;
        }
 }
 
-
 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,
                                           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);
 
 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 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,
                 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);
 
 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);
 
-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 *);
 
 
 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;
 
 
  * qib_mcast_qp_alloc - alloc a struct to link a QP to mcast GID struct
  * @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;
 
 
 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. */
        if (atomic_dec_and_test(&qp->refcount))
 
 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_ibport *ibp;
        struct qib_mcast *mcast;
 
 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_ibport *ibp = to_iport(ibqp->device, qp->port_num);
        struct qib_mcast *mcast = NULL;