tree 0fd855bc5f99d0decf977a1630d42cf1f43f6dd8 parent b87dcfbacee9c57b39738f43f32834f02ec302d5 author Roland Dreier <[EMAIL PROTECTED]> Sun, 17 Apr 2005 05:26:23 -0700 committer Linus Torvalds <[EMAIL PROTECTED]> Sun, 17 Apr 2005 05:26:23 -0700
[PATCH] IB/mthca: implement RDMA/atomic operations for mem-free mode Add code to support RDMA and atomic send work requests in mem-free mode. Signed-off-by: Roland Dreier <[EMAIL PROTECTED]> Signed-off-by: Andrew Morton <[EMAIL PROTECTED]> Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]> infiniband/hw/mthca/mthca_qp.c | 47 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 47 insertions(+) Index: drivers/infiniband/hw/mthca/mthca_qp.c =================================================================== --- 179fcf61040e2ac160ea38d3ca79e5f9d04cdd94/drivers/infiniband/hw/mthca/mthca_qp.c (mode:100644 sha1:1992effe3f8b067a3e11154fc570bfa97d20252a) +++ 0fd855bc5f99d0decf977a1630d42cf1f43f6dd8/drivers/infiniband/hw/mthca/mthca_qp.c (mode:100644 sha1:2d3b1815c04e431095af6fe05ce120f0e3785a3c) @@ -1775,6 +1775,53 @@ size = sizeof (struct mthca_next_seg) / 16; switch (qp->transport) { + case RC: + switch (wr->opcode) { + case IB_WR_ATOMIC_CMP_AND_SWP: + case IB_WR_ATOMIC_FETCH_AND_ADD: + ((struct mthca_raddr_seg *) wqe)->raddr = + cpu_to_be64(wr->wr.atomic.remote_addr); + ((struct mthca_raddr_seg *) wqe)->rkey = + cpu_to_be32(wr->wr.atomic.rkey); + ((struct mthca_raddr_seg *) wqe)->reserved = 0; + + wqe += sizeof (struct mthca_raddr_seg); + + if (wr->opcode == IB_WR_ATOMIC_CMP_AND_SWP) { + ((struct mthca_atomic_seg *) wqe)->swap_add = + cpu_to_be64(wr->wr.atomic.swap); + ((struct mthca_atomic_seg *) wqe)->compare = + cpu_to_be64(wr->wr.atomic.compare_add); + } else { + ((struct mthca_atomic_seg *) wqe)->swap_add = + cpu_to_be64(wr->wr.atomic.compare_add); + ((struct mthca_atomic_seg *) wqe)->compare = 0; + } + + wqe += sizeof (struct mthca_atomic_seg); + size += sizeof (struct mthca_raddr_seg) / 16 + + sizeof (struct mthca_atomic_seg); + break; + + case IB_WR_RDMA_WRITE: + case IB_WR_RDMA_WRITE_WITH_IMM: + case IB_WR_RDMA_READ: + ((struct mthca_raddr_seg *) wqe)->raddr = + cpu_to_be64(wr->wr.rdma.remote_addr); + ((struct mthca_raddr_seg *) wqe)->rkey = + cpu_to_be32(wr->wr.rdma.rkey); + ((struct mthca_raddr_seg *) wqe)->reserved = 0; + wqe += sizeof (struct mthca_raddr_seg); + size += sizeof (struct mthca_raddr_seg) / 16; + break; + + default: + /* No extra segments required for sends */ + break; + } + + break; + case UD: memcpy(((struct mthca_arbel_ud_seg *) wqe)->av, to_mah(wr->wr.ud.ah)->av, MTHCA_AV_SIZE); - To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html