Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd4ceee3 authored by Dennis Dalessandro's avatar Dennis Dalessandro Committed by Doug Ledford
Browse files

staging/rdma/hfi1: Remove MR data structures from hfi1



Remove MR data structures from hfi1 and use the version in rdmavt

Reviewed-by: default avatarDean Luick <dean.luick@intel.com>
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 4f87ccfc
Loading
Loading
Loading
Loading
+15 −15
Original line number Diff line number Diff line
@@ -63,21 +63,21 @@
 *
 */

int hfi1_alloc_lkey(struct hfi1_mregion *mr, int dma_region)
int hfi1_alloc_lkey(struct rvt_mregion *mr, int dma_region)
{
	unsigned long flags;
	u32 r;
	u32 n;
	int ret = 0;
	struct hfi1_ibdev *dev = to_idev(mr->pd->device);
	struct hfi1_lkey_table *rkt = &dev->lk_table;
	struct rvt_lkey_table *rkt = &dev->lk_table;

	hfi1_get_mr(mr);
	spin_lock_irqsave(&rkt->lock, flags);

	/* special case for dma_mr lkey == 0 */
	if (dma_region) {
		struct hfi1_mregion *tmr;
		struct rvt_mregion *tmr;

		tmr = rcu_access_pointer(dev->dma_mr);
		if (!tmr) {
@@ -133,13 +133,13 @@ int hfi1_alloc_lkey(struct hfi1_mregion *mr, int dma_region)
 * hfi1_free_lkey - free an lkey
 * @mr: mr to free from tables
 */
void hfi1_free_lkey(struct hfi1_mregion *mr)
void hfi1_free_lkey(struct rvt_mregion *mr)
{
	unsigned long flags;
	u32 lkey = mr->lkey;
	u32 r;
	struct hfi1_ibdev *dev = to_idev(mr->pd->device);
	struct hfi1_lkey_table *rkt = &dev->lk_table;
	struct rvt_lkey_table *rkt = &dev->lk_table;
	int freed = 0;

	spin_lock_irqsave(&rkt->lock, flags);
@@ -176,10 +176,10 @@ void hfi1_free_lkey(struct hfi1_mregion *mr)
 * Check the IB SGE for validity and initialize our internal version
 * of it.
 */
int hfi1_lkey_ok(struct hfi1_lkey_table *rkt, struct rvt_pd *pd,
int hfi1_lkey_ok(struct rvt_lkey_table *rkt, struct rvt_pd *pd,
		 struct hfi1_sge *isge, struct ib_sge *sge, int acc)
{
	struct hfi1_mregion *mr;
	struct rvt_mregion *mr;
	unsigned n, m;
	size_t off;

@@ -231,15 +231,15 @@ int hfi1_lkey_ok(struct hfi1_lkey_table *rkt, struct rvt_pd *pd,

		entries_spanned_by_off = off >> mr->page_shift;
		off -= (entries_spanned_by_off << mr->page_shift);
		m = entries_spanned_by_off / HFI1_SEGSZ;
		n = entries_spanned_by_off % HFI1_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 >= HFI1_SEGSZ) {
			if (n >= RVT_SEGSZ) {
				m++;
				n = 0;
			}
@@ -274,8 +274,8 @@ int hfi1_lkey_ok(struct hfi1_lkey_table *rkt, struct rvt_pd *pd,
int hfi1_rkey_ok(struct hfi1_qp *qp, struct hfi1_sge *sge,
		 u32 len, u64 vaddr, u32 rkey, int acc)
{
	struct hfi1_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table;
	struct hfi1_mregion *mr;
	struct rvt_lkey_table *rkt = &to_idev(qp->ibqp.device)->lk_table;
	struct rvt_mregion *mr;
	unsigned n, m;
	size_t off;

@@ -328,15 +328,15 @@ int hfi1_rkey_ok(struct hfi1_qp *qp, struct hfi1_sge *sge,

		entries_spanned_by_off = off >> mr->page_shift;
		off -= (entries_spanned_by_off << mr->page_shift);
		m = entries_spanned_by_off / HFI1_SEGSZ;
		n = entries_spanned_by_off % HFI1_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 >= HFI1_SEGSZ) {
			if (n >= RVT_SEGSZ) {
				m++;
				n = 0;
			}
+10 −10
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@
/* Fast memory region */
struct hfi1_fmr {
	struct ib_fmr ibfmr;
	struct hfi1_mregion mr;        /* must be last */
	struct rvt_mregion mr;        /* must be last */
};

static inline struct hfi1_fmr *to_ifmr(struct ib_fmr *ibfmr)
@@ -64,13 +64,13 @@ static inline struct hfi1_fmr *to_ifmr(struct ib_fmr *ibfmr)
	return container_of(ibfmr, struct hfi1_fmr, ibfmr);
}

static int init_mregion(struct hfi1_mregion *mr, struct ib_pd *pd,
static int init_mregion(struct rvt_mregion *mr, struct ib_pd *pd,
			int count)
{
	int m, i = 0;
	int rval = 0;

	m = (count + HFI1_SEGSZ - 1) / HFI1_SEGSZ;
	m = (count + RVT_SEGSZ - 1) / RVT_SEGSZ;
	for (; i < m; i++) {
		mr->map[i] = kzalloc(sizeof(*mr->map[0]), GFP_KERNEL);
		if (!mr->map[i])
@@ -91,7 +91,7 @@ static int init_mregion(struct hfi1_mregion *mr, struct ib_pd *pd,
	goto out;
}

static void deinit_mregion(struct hfi1_mregion *mr)
static void deinit_mregion(struct rvt_mregion *mr)
{
	int i = mr->mapsz;

@@ -159,7 +159,7 @@ static struct hfi1_mr *alloc_mr(int count, struct ib_pd *pd)
	int m;

	/* Allocate struct plus pointers to first level page tables. */
	m = (count + HFI1_SEGSZ - 1) / HFI1_SEGSZ;
	m = (count + RVT_SEGSZ - 1) / RVT_SEGSZ;
	mr = kzalloc(sizeof(*mr) + m * sizeof(mr->mr.map[0]), GFP_KERNEL);
	if (!mr)
		goto bail;
@@ -245,7 +245,7 @@ struct ib_mr *hfi1_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
		mr->mr.map[m]->segs[n].vaddr = vaddr;
		mr->mr.map[m]->segs[n].length = umem->page_size;
		n++;
		if (n == HFI1_SEGSZ) {
		if (n == RVT_SEGSZ) {
			m++;
			n = 0;
		}
@@ -333,7 +333,7 @@ struct ib_fmr *hfi1_alloc_fmr(struct ib_pd *pd, int mr_access_flags,
	int rval = -ENOMEM;

	/* Allocate struct plus pointers to first level page tables. */
	m = (fmr_attr->max_pages + HFI1_SEGSZ - 1) / HFI1_SEGSZ;
	m = (fmr_attr->max_pages + RVT_SEGSZ - 1) / RVT_SEGSZ;
	fmr = kzalloc(sizeof(*fmr) + m * sizeof(fmr->mr.map[0]), GFP_KERNEL);
	if (!fmr)
		goto bail;
@@ -385,7 +385,7 @@ int hfi1_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list,
		      int list_len, u64 iova)
{
	struct hfi1_fmr *fmr = to_ifmr(ibfmr);
	struct hfi1_lkey_table *rkt;
	struct rvt_lkey_table *rkt;
	unsigned long flags;
	int m, n, i;
	u32 ps;
@@ -410,7 +410,7 @@ int hfi1_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list,
	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 == HFI1_SEGSZ) {
		if (++n == RVT_SEGSZ) {
			m++;
			n = 0;
		}
@@ -431,7 +431,7 @@ int hfi1_map_phys_fmr(struct ib_fmr *ibfmr, u64 *page_list,
int hfi1_unmap_fmr(struct list_head *fmr_list)
{
	struct hfi1_fmr *fmr;
	struct hfi1_lkey_table *rkt;
	struct rvt_lkey_table *rkt;
	unsigned long flags;

	list_for_each_entry(fmr, fmr_list, ibfmr.list) {
+2 −2
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ static int init_sge(struct hfi1_qp *qp, struct hfi1_rwqe *wqe)
{
	int i, j, ret;
	struct ib_wc wc;
	struct hfi1_lkey_table *rkt;
	struct rvt_lkey_table *rkt;
	struct rvt_pd *pd;
	struct hfi1_sge_state *ss;

@@ -534,7 +534,7 @@ static void ruc_loopback(struct hfi1_qp *sqp)
			if (--sqp->s_sge.num_sge)
				*sge = *sqp->s_sge.sg_list++;
		} else if (sge->length == 0 && sge->mr->lkey) {
			if (++sge->n >= HFI1_SEGSZ) {
			if (++sge->n >= RVT_SEGSZ) {
				if (++sge->m >= sge->mr->mapsz)
					break;
				sge->n = 0;
+1 −1
Original line number Diff line number Diff line
@@ -381,7 +381,7 @@ struct verbs_txreq {
	struct sdma_txreq       txreq;
	struct hfi1_qp           *qp;
	struct hfi1_swqe         *wqe;
	struct hfi1_mregion	*mr;
	struct rvt_mregion	*mr;
	struct hfi1_sge_state    *ss;
	struct sdma_engine     *sde;
	u16                     hdr_dwords;
+1 −1
Original line number Diff line number Diff line
@@ -210,7 +210,7 @@ static void ud_loopback(struct hfi1_qp *sqp, struct hfi1_swqe *swqe)
			if (--ssge.num_sge)
				*sge = *ssge.sg_list++;
		} else if (sge->length == 0 && sge->mr->lkey) {
			if (++sge->n >= HFI1_SEGSZ) {
			if (++sge->n >= RVT_SEGSZ) {
				if (++sge->m >= sge->mr->mapsz)
					break;
				sge->n = 0;
Loading