Non-xrc SRQs should be created with a domain number which will never
be assigned to an XRC TGT QP. This is so there is no possibility of such an SRQ
inadvertently receiving an XRC transmission.

XRC Domain number allocations begin with (dev->dev->caps.reserved_xrcds + 1);
Domain number (dev->dev->caps.reserved_xrcds) has been set aside to be used
for this purpose.

Signed-off-by: Jack Morgenstein <[email protected]

---
Sean,
This was a little "glitch" that I noticed during my code review.

-Jack

diff --git a/drivers/infiniband/hw/mlx4/srq.c b/drivers/infiniband/hw/mlx4/srq.c
index 361838f..39542f3 100644
--- a/drivers/infiniband/hw/mlx4/srq.c
+++ b/drivers/infiniband/hw/mlx4/srq.c
@@ -77,7 +77,7 @@ struct ib_srq *mlx4_ib_create_srq(struct ib_pd *pd,
        struct mlx4_wqe_srq_next_seg *next;
        struct mlx4_wqe_data_seg *scatter;
        u32 cqn;
-       u32 xrcdn;
+       u16 xrcdn;
        int desc_size;
        int buf_size;
        int err;
@@ -179,7 +179,8 @@ struct ib_srq *mlx4_ib_create_srq(struct ib_pd *pd,
        cqn = (init_attr->srq_type == IB_SRQT_XRC) ?
                to_mcq(init_attr->ext.xrc.cq)->mcq.cqn : 0;
        xrcdn = (init_attr->srq_type == IB_SRQT_XRC) ?
-               to_mxrcd(init_attr->ext.xrc.xrcd)->xrcdn : 0;
+               to_mxrcd(init_attr->ext.xrc.xrcd)->xrcdn :
+               (u16) dev->dev->caps.reserved_xrcds;
        err = mlx4_srq_alloc(dev->dev, to_mpd(pd)->pdn, cqn, xrcdn, &srq->mtt,
                             srq->db.dma, &srq->msrq);
        if (err)
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to