* [PATCH v3 0/3] RDMA/rxe: Add RDMA Atomic Write operation @ 2022-03-11 11:52 Xiao Yang 2022-03-11 11:52 ` [PATCH v3 1/3] RDMA/rxe: Rename send_atomic_ack() and atomic member of struct resp_res Xiao Yang ` (2 more replies) 0 siblings, 3 replies; 15+ messages in thread From: Xiao Yang @ 2022-03-11 11:52 UTC (permalink / raw) To: linux-rdma Cc: yanjun.zhu, rpearsonhpe, jgg, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny, Xiao Yang The IB SPEC v1.5[1] defined new RDMA Atomic Write operation. This patchset makes SoftRoCE support new RDMA Atomic Write on RC service. I add ibv_wr_rdma_atomic_write() and a rdma_atomic_write example on my rdma-core repository[2]. You can verify the patchset by building and running the rdma_atomic_write example. server: $ ./rdma_atomic_write_server -s [server_address] -p [port_number] client: $ ./rdma_atomic_write_client -s [server_address] -p [port_number] [1]: https://www.infinibandta.org/wp-content/uploads/2021/08/IBTA-Overview-of-IBTA-Volume-1-Release-1.5-and-MPE-2021-08-17-Secure.pptx [2]: https://github.com/yangx-jy/rdma-core/tree/new_api V2->V3: 1) Rebase 2) Add RDMA Atomic Write attribute for rxe device V1->V2: 1) Set IB_OPCODE_RDMA_ATOMIC_WRITE to 0x1D 2) Add rdma.atomic_wr in struct rxe_send_wr and use it to pass the atomic write value 3) Use smp_store_release() to ensure that all prior operations have completed Xiao Yang (3): RDMA/rxe: Rename send_atomic_ack() and atomic member of struct resp_res RDMA/rxe: Support RDMA Atomic Write operation RDMA/rxe: Add RDMA Atomic Write attribute for rxe device drivers/infiniband/sw/rxe/rxe_comp.c | 4 ++ drivers/infiniband/sw/rxe/rxe_opcode.c | 19 +++++++++ drivers/infiniband/sw/rxe/rxe_opcode.h | 3 ++ drivers/infiniband/sw/rxe/rxe_param.h | 3 +- drivers/infiniband/sw/rxe/rxe_qp.c | 5 ++- drivers/infiniband/sw/rxe/rxe_req.c | 11 +++++- drivers/infiniband/sw/rxe/rxe_resp.c | 55 ++++++++++++++++++++------ drivers/infiniband/sw/rxe/rxe_verbs.h | 2 +- include/rdma/ib_pack.h | 2 + include/rdma/ib_verbs.h | 4 ++ include/uapi/rdma/ib_user_verbs.h | 2 + include/uapi/rdma/rdma_user_rxe.h | 1 + 12 files changed, 92 insertions(+), 19 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v3 1/3] RDMA/rxe: Rename send_atomic_ack() and atomic member of struct resp_res 2022-03-11 11:52 [PATCH v3 0/3] RDMA/rxe: Add RDMA Atomic Write operation Xiao Yang @ 2022-03-11 11:52 ` Xiao Yang 2022-03-11 11:52 ` [PATCH v3 2/3] RDMA/rxe: Support RDMA Atomic Write operation Xiao Yang 2022-03-11 11:52 ` [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device Xiao Yang 2 siblings, 0 replies; 15+ messages in thread From: Xiao Yang @ 2022-03-11 11:52 UTC (permalink / raw) To: linux-rdma Cc: yanjun.zhu, rpearsonhpe, jgg, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny, Xiao Yang send_atomic_ack() and atomic member of struct resp_res will be common in the future so rename them. Signed-off-by: Xiao Yang <yangx.jy@fujitsu.com> --- drivers/infiniband/sw/rxe/rxe_qp.c | 2 +- drivers/infiniband/sw/rxe/rxe_resp.c | 10 +++++----- drivers/infiniband/sw/rxe/rxe_verbs.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c index 5018b9387694..ca07e37d30a6 100644 --- a/drivers/infiniband/sw/rxe/rxe_qp.c +++ b/drivers/infiniband/sw/rxe/rxe_qp.c @@ -136,7 +136,7 @@ static void free_rd_atomic_resources(struct rxe_qp *qp) void free_rd_atomic_resource(struct rxe_qp *qp, struct resp_res *res) { if (res->type == RXE_ATOMIC_MASK) { - kfree_skb(res->atomic.skb); + kfree_skb(res->resp.skb); } else if (res->type == RXE_READ_MASK) { if (res->read.mr) rxe_drop_ref(res->read.mr); diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index e8f435fa6e4d..e015860e8c34 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -957,7 +957,7 @@ static int send_ack(struct rxe_qp *qp, struct rxe_pkt_info *pkt, return err; } -static int send_atomic_ack(struct rxe_qp *qp, struct rxe_pkt_info *pkt, +static int send_resp(struct rxe_qp *qp, struct rxe_pkt_info *pkt, u8 syndrome) { int rc = 0; @@ -979,7 +979,7 @@ static int send_atomic_ack(struct rxe_qp *qp, struct rxe_pkt_info *pkt, skb_get(skb); res->type = RXE_ATOMIC_MASK; - res->atomic.skb = skb; + res->resp.skb = skb; res->first_psn = ack_pkt.psn; res->last_psn = ack_pkt.psn; res->cur_psn = ack_pkt.psn; @@ -1002,7 +1002,7 @@ static enum resp_states acknowledge(struct rxe_qp *qp, if (qp->resp.aeth_syndrome != AETH_ACK_UNLIMITED) send_ack(qp, pkt, qp->resp.aeth_syndrome, pkt->psn); else if (pkt->mask & RXE_ATOMIC_MASK) - send_atomic_ack(qp, pkt, AETH_ACK_UNLIMITED); + send_resp(qp, pkt, AETH_ACK_UNLIMITED); else if (bth_ack(pkt)) send_ack(qp, pkt, AETH_ACK_UNLIMITED, pkt->psn); @@ -1111,9 +1111,9 @@ static enum resp_states duplicate_request(struct rxe_qp *qp, /* Find the operation in our list of responder resources. */ res = find_resource(qp, pkt->psn); if (res) { - skb_get(res->atomic.skb); + skb_get(res->resp.skb); /* Resend the result. */ - rc = rxe_xmit_packet(qp, pkt, res->atomic.skb); + rc = rxe_xmit_packet(qp, pkt, res->resp.skb); if (rc) { pr_err("Failed resending result. This flow is not handled - skb ignored\n"); rc = RESPST_CLEANUP; diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h index e48969e8d4c8..01421286ed07 100644 --- a/drivers/infiniband/sw/rxe/rxe_verbs.h +++ b/drivers/infiniband/sw/rxe/rxe_verbs.h @@ -155,7 +155,7 @@ struct resp_res { union { struct { struct sk_buff *skb; - } atomic; + } resp; struct { struct rxe_mr *mr; u64 va_org; -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v3 2/3] RDMA/rxe: Support RDMA Atomic Write operation 2022-03-11 11:52 [PATCH v3 0/3] RDMA/rxe: Add RDMA Atomic Write operation Xiao Yang 2022-03-11 11:52 ` [PATCH v3 1/3] RDMA/rxe: Rename send_atomic_ack() and atomic member of struct resp_res Xiao Yang @ 2022-03-11 11:52 ` Xiao Yang 2022-03-11 23:56 ` kernel test robot 2022-03-11 11:52 ` [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device Xiao Yang 2 siblings, 1 reply; 15+ messages in thread From: Xiao Yang @ 2022-03-11 11:52 UTC (permalink / raw) To: linux-rdma Cc: yanjun.zhu, rpearsonhpe, jgg, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny, Xiao Yang This patch implements RDMA Atomic Write operation for RC service. Signed-off-by: Xiao Yang <yangx.jy@fujitsu.com> --- drivers/infiniband/sw/rxe/rxe_comp.c | 4 +++ drivers/infiniband/sw/rxe/rxe_opcode.c | 19 +++++++++++ drivers/infiniband/sw/rxe/rxe_opcode.h | 3 ++ drivers/infiniband/sw/rxe/rxe_qp.c | 3 +- drivers/infiniband/sw/rxe/rxe_req.c | 11 +++++-- drivers/infiniband/sw/rxe/rxe_resp.c | 45 +++++++++++++++++++++----- include/rdma/ib_pack.h | 2 ++ include/rdma/ib_verbs.h | 2 ++ include/uapi/rdma/ib_user_verbs.h | 2 ++ include/uapi/rdma/rdma_user_rxe.h | 1 + 10 files changed, 81 insertions(+), 11 deletions(-) diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/rxe/rxe_comp.c index f363fe3fa414..6de7ac0b94ed 100644 --- a/drivers/infiniband/sw/rxe/rxe_comp.c +++ b/drivers/infiniband/sw/rxe/rxe_comp.c @@ -104,6 +104,7 @@ static enum ib_wc_opcode wr_to_wc_opcode(enum ib_wr_opcode opcode) case IB_WR_LOCAL_INV: return IB_WC_LOCAL_INV; case IB_WR_REG_MR: return IB_WC_REG_MR; case IB_WR_BIND_MW: return IB_WC_BIND_MW; + case IB_WR_RDMA_ATOMIC_WRITE: return IB_WC_RDMA_ATOMIC_WRITE; default: return 0xff; @@ -256,6 +257,9 @@ static inline enum comp_state check_ack(struct rxe_qp *qp, if ((syn & AETH_TYPE_MASK) != AETH_ACK) return COMPST_ERROR; + if (wqe->wr.opcode == IB_WR_RDMA_ATOMIC_WRITE) + return COMPST_WRITE_SEND; + fallthrough; /* (IB_OPCODE_RC_RDMA_READ_RESPONSE_MIDDLE doesn't have an AETH) */ diff --git a/drivers/infiniband/sw/rxe/rxe_opcode.c b/drivers/infiniband/sw/rxe/rxe_opcode.c index df596ba7527d..9b1ca0b3618a 100644 --- a/drivers/infiniband/sw/rxe/rxe_opcode.c +++ b/drivers/infiniband/sw/rxe/rxe_opcode.c @@ -103,6 +103,12 @@ struct rxe_wr_opcode_info rxe_wr_opcode_info[] = { [IB_QPT_UC] = WR_LOCAL_OP_MASK, }, }, + [IB_WR_RDMA_ATOMIC_WRITE] = { + .name = "IB_WR_RDMA_ATOMIC_WRITE", + .mask = { + [IB_QPT_RC] = WR_ATOMIC_WRITE_MASK, + }, + }, }; struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { @@ -380,6 +386,19 @@ struct rxe_opcode_info rxe_opcode[RXE_NUM_OPCODE] = { RXE_IETH_BYTES, } }, + [IB_OPCODE_RC_RDMA_ATOMIC_WRITE] = { + .name = "IB_OPCODE_RC_RDMA_ATOMIC_WRITE", + .mask = RXE_RETH_MASK | RXE_PAYLOAD_MASK | RXE_REQ_MASK | + RXE_ATOMIC_WRITE_MASK | RXE_START_MASK | + RXE_END_MASK, + .length = RXE_BTH_BYTES + RXE_RETH_BYTES, + .offset = { + [RXE_BTH] = 0, + [RXE_RETH] = RXE_BTH_BYTES, + [RXE_PAYLOAD] = RXE_BTH_BYTES + + RXE_RETH_BYTES, + } + }, /* UC */ [IB_OPCODE_UC_SEND_FIRST] = { diff --git a/drivers/infiniband/sw/rxe/rxe_opcode.h b/drivers/infiniband/sw/rxe/rxe_opcode.h index 8f9aaaf260f2..a470e9b0b884 100644 --- a/drivers/infiniband/sw/rxe/rxe_opcode.h +++ b/drivers/infiniband/sw/rxe/rxe_opcode.h @@ -20,6 +20,7 @@ enum rxe_wr_mask { WR_READ_MASK = BIT(3), WR_WRITE_MASK = BIT(4), WR_LOCAL_OP_MASK = BIT(5), + WR_ATOMIC_WRITE_MASK = BIT(7), WR_READ_OR_WRITE_MASK = WR_READ_MASK | WR_WRITE_MASK, WR_WRITE_OR_SEND_MASK = WR_WRITE_MASK | WR_SEND_MASK, @@ -81,6 +82,8 @@ enum rxe_hdr_mask { RXE_LOOPBACK_MASK = BIT(NUM_HDR_TYPES + 12), + RXE_ATOMIC_WRITE_MASK = BIT(NUM_HDR_TYPES + 14), + RXE_READ_OR_ATOMIC_MASK = (RXE_READ_MASK | RXE_ATOMIC_MASK), RXE_WRITE_OR_SEND_MASK = (RXE_WRITE_MASK | RXE_SEND_MASK), RXE_READ_OR_WRITE_MASK = (RXE_READ_MASK | RXE_WRITE_MASK), diff --git a/drivers/infiniband/sw/rxe/rxe_qp.c b/drivers/infiniband/sw/rxe/rxe_qp.c index ca07e37d30a6..be231907ac73 100644 --- a/drivers/infiniband/sw/rxe/rxe_qp.c +++ b/drivers/infiniband/sw/rxe/rxe_qp.c @@ -135,7 +135,8 @@ static void free_rd_atomic_resources(struct rxe_qp *qp) void free_rd_atomic_resource(struct rxe_qp *qp, struct resp_res *res) { - if (res->type == RXE_ATOMIC_MASK) { + if (res->type == RXE_ATOMIC_MASK || + res->type == RXE_ATOMIC_WRITE_MASK) { kfree_skb(res->resp.skb); } else if (res->type == RXE_READ_MASK) { if (res->read.mr) diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c index 5eb89052dd66..893c1e88b956 100644 --- a/drivers/infiniband/sw/rxe/rxe_req.c +++ b/drivers/infiniband/sw/rxe/rxe_req.c @@ -237,6 +237,10 @@ static int next_opcode_rc(struct rxe_qp *qp, u32 opcode, int fits) else return fits ? IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE : IB_OPCODE_RC_SEND_FIRST; + + case IB_WR_RDMA_ATOMIC_WRITE: + return IB_OPCODE_RC_RDMA_ATOMIC_WRITE; + case IB_WR_REG_MR: case IB_WR_LOCAL_INV: return opcode; @@ -479,6 +483,9 @@ static int finish_packet(struct rxe_qp *qp, struct rxe_send_wqe *wqe, } } + if (pkt->mask & RXE_ATOMIC_WRITE_MASK) + memcpy(payload_addr(pkt), &wqe->wr.wr.rdma.atomic_wr, paylen); + return 0; } @@ -674,13 +681,13 @@ int rxe_requester(void *arg) } mask = rxe_opcode[opcode].mask; - if (unlikely(mask & RXE_READ_OR_ATOMIC_MASK)) { + if (unlikely(mask & (RXE_READ_OR_ATOMIC_MASK | RXE_ATOMIC_WRITE_MASK))) { if (check_init_depth(qp, wqe)) goto exit; } mtu = get_mtu(qp); - payload = (mask & RXE_WRITE_OR_SEND_MASK) ? wqe->dma.resid : 0; + payload = (mask & (RXE_WRITE_OR_SEND_MASK | RXE_ATOMIC_WRITE_MASK)) ? wqe->dma.resid : 0; if (payload > mtu) { if (qp_type(qp) == IB_QPT_UD) { /* C10-93.1.1: If the total sum of all the buffer lengths specified for a diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index e015860e8c34..b21e9475db0f 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -258,7 +258,7 @@ static enum resp_states check_op_valid(struct rxe_qp *qp, case IB_QPT_RC: if (((pkt->mask & RXE_READ_MASK) && !(qp->attr.qp_access_flags & IB_ACCESS_REMOTE_READ)) || - ((pkt->mask & RXE_WRITE_MASK) && + ((pkt->mask & (RXE_WRITE_MASK | RXE_ATOMIC_WRITE_MASK)) && !(qp->attr.qp_access_flags & IB_ACCESS_REMOTE_WRITE)) || ((pkt->mask & RXE_ATOMIC_MASK) && !(qp->attr.qp_access_flags & IB_ACCESS_REMOTE_ATOMIC))) { @@ -362,7 +362,7 @@ static enum resp_states check_resource(struct rxe_qp *qp, } } - if (pkt->mask & RXE_READ_OR_ATOMIC_MASK) { + if (pkt->mask & (RXE_READ_OR_ATOMIC_MASK | RXE_ATOMIC_WRITE_MASK)) { /* it is the requesters job to not send * too many read/atomic ops, we just * recycle the responder resource queue @@ -413,7 +413,7 @@ static enum resp_states check_rkey(struct rxe_qp *qp, enum resp_states state; int access; - if (pkt->mask & RXE_READ_OR_WRITE_MASK) { + if (pkt->mask & (RXE_READ_OR_WRITE_MASK | RXE_ATOMIC_WRITE_MASK)) { if (pkt->mask & RXE_RETH_MASK) { qp->resp.va = reth_va(pkt); qp->resp.offset = 0; @@ -479,7 +479,7 @@ static enum resp_states check_rkey(struct rxe_qp *qp, goto err; } - if (pkt->mask & RXE_WRITE_MASK) { + if (pkt->mask & (RXE_WRITE_MASK | RXE_ATOMIC_WRITE_MASK)) { if (resid > mtu) { if (pktlen != mtu || bth_pad(pkt)) { state = RESPST_ERR_LENGTH; @@ -591,6 +591,28 @@ static enum resp_states process_atomic(struct rxe_qp *qp, return ret; } +static enum resp_states process_atomic_write(struct rxe_qp *qp, + struct rxe_pkt_info *pkt) +{ + struct rxe_mr *mr = qp->resp.mr; + + u64 *src = payload_addr(pkt); + + u64 *dst = iova_to_vaddr(mr, qp->resp.va + qp->resp.offset, sizeof(u64)); + + /* check vaddr is 8 bytes aligned. */ + if (!dst || (uintptr_t)dst & 7) + return RESPST_ERR_MISALIGNED_ATOMIC; + + /* Do atomic write after all prior operations have completed */ + smp_store_release(dst, *src); + + /* decrease resp.resid to zero */ + qp->resp.resid -= sizeof(u64); + + return RESPST_NONE; +} + static struct sk_buff *prepare_ack_packet(struct rxe_qp *qp, struct rxe_pkt_info *pkt, struct rxe_pkt_info *ack, @@ -801,6 +823,10 @@ static enum resp_states execute(struct rxe_qp *qp, struct rxe_pkt_info *pkt) err = process_atomic(qp, pkt); if (err) return err; + } else if (pkt->mask & RXE_ATOMIC_WRITE_MASK) { + err = process_atomic_write(qp, pkt); + if (err) + return err; } else { /* Unreachable */ WARN_ON_ONCE(1); @@ -965,9 +991,12 @@ static int send_resp(struct rxe_qp *qp, struct rxe_pkt_info *pkt, struct sk_buff *skb; struct resp_res *res; + int opcode = pkt->mask & RXE_ATOMIC_MASK ? + IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE : + IB_OPCODE_RC_RDMA_READ_RESPONSE_ONLY; + skb = prepare_ack_packet(qp, pkt, &ack_pkt, - IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE, 0, pkt->psn, - syndrome); + opcode, 0, pkt->psn, syndrome); if (!skb) { rc = -ENOMEM; goto out; @@ -978,7 +1007,7 @@ static int send_resp(struct rxe_qp *qp, struct rxe_pkt_info *pkt, rxe_advance_resp_resource(qp); skb_get(skb); - res->type = RXE_ATOMIC_MASK; + res->type = pkt->mask & (RXE_ATOMIC_MASK | RXE_ATOMIC_WRITE_MASK); res->resp.skb = skb; res->first_psn = ack_pkt.psn; res->last_psn = ack_pkt.psn; @@ -1001,7 +1030,7 @@ static enum resp_states acknowledge(struct rxe_qp *qp, if (qp->resp.aeth_syndrome != AETH_ACK_UNLIMITED) send_ack(qp, pkt, qp->resp.aeth_syndrome, pkt->psn); - else if (pkt->mask & RXE_ATOMIC_MASK) + else if (pkt->mask & (RXE_ATOMIC_MASK | RXE_ATOMIC_WRITE_MASK)) send_resp(qp, pkt, AETH_ACK_UNLIMITED); else if (bth_ack(pkt)) send_ack(qp, pkt, AETH_ACK_UNLIMITED, pkt->psn); diff --git a/include/rdma/ib_pack.h b/include/rdma/ib_pack.h index a9162f25beaf..519ec6b841e7 100644 --- a/include/rdma/ib_pack.h +++ b/include/rdma/ib_pack.h @@ -84,6 +84,7 @@ enum { /* opcode 0x15 is reserved */ IB_OPCODE_SEND_LAST_WITH_INVALIDATE = 0x16, IB_OPCODE_SEND_ONLY_WITH_INVALIDATE = 0x17, + IB_OPCODE_RDMA_ATOMIC_WRITE = 0x1D, /* real constants follow -- see comment about above IB_OPCODE() macro for more details */ @@ -112,6 +113,7 @@ enum { IB_OPCODE(RC, FETCH_ADD), IB_OPCODE(RC, SEND_LAST_WITH_INVALIDATE), IB_OPCODE(RC, SEND_ONLY_WITH_INVALIDATE), + IB_OPCODE(RC, RDMA_ATOMIC_WRITE), /* UC */ IB_OPCODE(UC, SEND_FIRST), diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 69d883f7fb41..abd1c5d3dc66 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -971,6 +971,7 @@ enum ib_wc_opcode { IB_WC_REG_MR, IB_WC_MASKED_COMP_SWAP, IB_WC_MASKED_FETCH_ADD, + IB_WC_RDMA_ATOMIC_WRITE = IB_UVERBS_WC_RDMA_ATOMIC_WRITE, /* * Set value of IB_WC_RECV so consumers can test if a completion is a * receive by testing (opcode & IB_WC_RECV). @@ -1311,6 +1312,7 @@ enum ib_wr_opcode { IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP, IB_WR_MASKED_ATOMIC_FETCH_AND_ADD = IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD, + IB_WR_RDMA_ATOMIC_WRITE = IB_UVERBS_WR_RDMA_ATOMIC_WRITE, /* These are kernel only and can not be issued by userspace */ IB_WR_REG_MR = 0x20, diff --git a/include/uapi/rdma/ib_user_verbs.h b/include/uapi/rdma/ib_user_verbs.h index 7ee73a0652f1..3b0b509fb96f 100644 --- a/include/uapi/rdma/ib_user_verbs.h +++ b/include/uapi/rdma/ib_user_verbs.h @@ -466,6 +466,7 @@ enum ib_uverbs_wc_opcode { IB_UVERBS_WC_BIND_MW = 5, IB_UVERBS_WC_LOCAL_INV = 6, IB_UVERBS_WC_TSO = 7, + IB_UVERBS_WC_RDMA_ATOMIC_WRITE = 9, }; struct ib_uverbs_wc { @@ -784,6 +785,7 @@ enum ib_uverbs_wr_opcode { IB_UVERBS_WR_RDMA_READ_WITH_INV = 11, IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12, IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13, + IB_UVERBS_WR_RDMA_ATOMIC_WRITE = 15, /* Review enum ib_wr_opcode before modifying this */ }; diff --git a/include/uapi/rdma/rdma_user_rxe.h b/include/uapi/rdma/rdma_user_rxe.h index f09c5c9e3dd5..7e02c614d826 100644 --- a/include/uapi/rdma/rdma_user_rxe.h +++ b/include/uapi/rdma/rdma_user_rxe.h @@ -86,6 +86,7 @@ struct rxe_send_wr { __aligned_u64 remote_addr; __u32 rkey; __u32 reserved; + __aligned_u64 atomic_wr; } rdma; struct { __aligned_u64 remote_addr; -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v3 2/3] RDMA/rxe: Support RDMA Atomic Write operation 2022-03-11 11:52 ` [PATCH v3 2/3] RDMA/rxe: Support RDMA Atomic Write operation Xiao Yang @ 2022-03-11 23:56 ` kernel test robot 0 siblings, 0 replies; 15+ messages in thread From: kernel test robot @ 2022-03-11 23:56 UTC (permalink / raw) To: Xiao Yang, linux-rdma Cc: kbuild-all, yanjun.zhu, rpearsonhpe, jgg, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny, Xiao Yang Hi Xiao, Thank you for the patch! Yet something to improve: [auto build test ERROR on rdma/for-next] [also build test ERROR on v5.17-rc7 next-20220310] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Xiao-Yang/RDMA-rxe-Add-RDMA-Atomic-Write-operation/20220311-195406 base: https://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git for-next config: parisc-allyesconfig (https://download.01.org/0day-ci/archive/20220312/202203120740.G02NgRLo-lkp@intel.com/config) compiler: hppa-linux-gcc (GCC) 11.2.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/e2d651ea47e6ed9341efeec5b1cb960c5c12f31c git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Xiao-Yang/RDMA-rxe-Add-RDMA-Atomic-Write-operation/20220311-195406 git checkout e2d651ea47e6ed9341efeec5b1cb960c5c12f31c # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=parisc SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All errors (new ones prefixed by >>): In file included from <command-line>: In function 'process_atomic_write', inlined from 'execute' at drivers/infiniband/sw/rxe/rxe_resp.c:828:9: >> include/linux/compiler_types.h:346:45: error: call to '__compiletime_assert_463' declared with attribute error: Need native word sized stores/loads for atomicity. 346 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:327:25: note: in definition of macro '__compiletime_assert' 327 | prefix ## suffix(); \ | ^~~~~~ include/linux/compiler_types.h:346:9: note: in expansion of macro '_compiletime_assert' 346 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/compiler_types.h:349:9: note: in expansion of macro 'compiletime_assert' 349 | compiletime_assert(__native_word(t), \ | ^~~~~~~~~~~~~~~~~~ arch/parisc/include/asm/barrier.h:38:9: note: in expansion of macro 'compiletime_assert_atomic_type' 38 | compiletime_assert_atomic_type(*p); \ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/asm-generic/barrier.h:164:55: note: in expansion of macro '__smp_store_release' 164 | #define smp_store_release(p, v) do { kcsan_release(); __smp_store_release(p, v); } while (0) | ^~~~~~~~~~~~~~~~~~~ drivers/infiniband/sw/rxe/rxe_resp.c:609:9: note: in expansion of macro 'smp_store_release' 609 | smp_store_release(dst, *src); | ^~~~~~~~~~~~~~~~~ vim +/__compiletime_assert_463 +346 include/linux/compiler_types.h eb5c2d4b45e3d2 Will Deacon 2020-07-21 332 eb5c2d4b45e3d2 Will Deacon 2020-07-21 333 #define _compiletime_assert(condition, msg, prefix, suffix) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 334 __compiletime_assert(condition, msg, prefix, suffix) eb5c2d4b45e3d2 Will Deacon 2020-07-21 335 eb5c2d4b45e3d2 Will Deacon 2020-07-21 336 /** eb5c2d4b45e3d2 Will Deacon 2020-07-21 337 * compiletime_assert - break build and emit msg if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 338 * @condition: a compile-time constant condition to check eb5c2d4b45e3d2 Will Deacon 2020-07-21 339 * @msg: a message to emit if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 340 * eb5c2d4b45e3d2 Will Deacon 2020-07-21 341 * In tradition of POSIX assert, this macro will break the build if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 342 * supplied condition is *false*, emitting the supplied error message if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 343 * compiler has support to do so. eb5c2d4b45e3d2 Will Deacon 2020-07-21 344 */ eb5c2d4b45e3d2 Will Deacon 2020-07-21 345 #define compiletime_assert(condition, msg) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 @346 _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) eb5c2d4b45e3d2 Will Deacon 2020-07-21 347 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-11 11:52 [PATCH v3 0/3] RDMA/rxe: Add RDMA Atomic Write operation Xiao Yang 2022-03-11 11:52 ` [PATCH v3 1/3] RDMA/rxe: Rename send_atomic_ack() and atomic member of struct resp_res Xiao Yang 2022-03-11 11:52 ` [PATCH v3 2/3] RDMA/rxe: Support RDMA Atomic Write operation Xiao Yang @ 2022-03-11 11:52 ` Xiao Yang 2022-03-15 18:53 ` Jason Gunthorpe 2 siblings, 1 reply; 15+ messages in thread From: Xiao Yang @ 2022-03-11 11:52 UTC (permalink / raw) To: linux-rdma Cc: yanjun.zhu, rpearsonhpe, jgg, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny, Xiao Yang The attribute shows that rxe device supports RDMA Atomic Write operation. Signed-off-by: Xiao Yang <yangx.jy@fujitsu.com> --- drivers/infiniband/sw/rxe/rxe_param.h | 3 ++- include/rdma/ib_verbs.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/infiniband/sw/rxe/rxe_param.h b/drivers/infiniband/sw/rxe/rxe_param.h index 918270e34a35..6ae6c4079639 100644 --- a/drivers/infiniband/sw/rxe/rxe_param.h +++ b/drivers/infiniband/sw/rxe/rxe_param.h @@ -53,7 +53,8 @@ enum rxe_device_param { | IB_DEVICE_ALLOW_USER_UNREG | IB_DEVICE_MEM_WINDOW | IB_DEVICE_MEM_WINDOW_TYPE_2A - | IB_DEVICE_MEM_WINDOW_TYPE_2B, + | IB_DEVICE_MEM_WINDOW_TYPE_2B + | IB_DEVICE_ATOMIC_WRITE, RXE_MAX_SGE = 32, RXE_MAX_WQE_SIZE = sizeof(struct rxe_send_wqe) + sizeof(struct ib_sge) * RXE_MAX_SGE, diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index abd1c5d3dc66..580b5cacec09 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -291,6 +291,8 @@ enum ib_device_cap_flags { /* The device supports padding incoming writes to cacheline. */ IB_DEVICE_PCI_WRITE_END_PADDING = (1ULL << 36), IB_DEVICE_ALLOW_USER_UNREG = (1ULL << 37), + /* Atomic write attributes */ + IB_DEVICE_ATOMIC_WRITE = (1ULL << 40), }; enum ib_atomic_cap { -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-11 11:52 ` [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device Xiao Yang @ 2022-03-15 18:53 ` Jason Gunthorpe 2022-03-17 5:58 ` yangx.jy 2022-03-21 3:55 ` yangx.jy 0 siblings, 2 replies; 15+ messages in thread From: Jason Gunthorpe @ 2022-03-15 18:53 UTC (permalink / raw) To: Xiao Yang Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On Fri, Mar 11, 2022 at 07:52:47PM +0800, Xiao Yang wrote: > diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h > index abd1c5d3dc66..580b5cacec09 100644 > +++ b/include/rdma/ib_verbs.h > @@ -291,6 +291,8 @@ enum ib_device_cap_flags { > /* The device supports padding incoming writes to cacheline. */ > IB_DEVICE_PCI_WRITE_END_PADDING = (1ULL << 36), > IB_DEVICE_ALLOW_USER_UNREG = (1ULL << 37), > + /* Atomic write attributes */ > + IB_DEVICE_ATOMIC_WRITE = (1ULL << 40), > }; Can you make a patch to clean this up too? The right parts of it need to get moved to the uapi header and it should work similarly to the ib_uverbs_wr_opcode / ib_wr_opcode thing. You'll also need to do something about the 32 bit compatability that kbuild detected - I suppose this can't work on 32 bit platforms? So IS_ENABLED() it off or something? Jason ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-15 18:53 ` Jason Gunthorpe @ 2022-03-17 5:58 ` yangx.jy 2022-03-21 3:55 ` yangx.jy 1 sibling, 0 replies; 15+ messages in thread From: yangx.jy @ 2022-03-17 5:58 UTC (permalink / raw) To: Jason Gunthorpe Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On 2022/3/16 2:53, Jason Gunthorpe wrote: > Can you make a patch to clean this up too? The right parts of it need > to get moved to the uapi header and it should work similarly to the > ib_uverbs_wr_opcode / ib_wr_opcode thing. > > You'll also need to do something about the 32 bit compatability that > kbuild detected - I suppose this can't work on 32 bit platforms? So > IS_ENABLED() it off or something? Hi Jason, Thanks for your reminder. I will do the cleanup and fix the issue detected by kbuild. Best Regards, Xiao Yang ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-15 18:53 ` Jason Gunthorpe 2022-03-17 5:58 ` yangx.jy @ 2022-03-21 3:55 ` yangx.jy 2022-03-21 15:32 ` Jason Gunthorpe 1 sibling, 1 reply; 15+ messages in thread From: yangx.jy @ 2022-03-21 3:55 UTC (permalink / raw) To: Jason Gunthorpe Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On 2022/3/16 2:53, Jason Gunthorpe wrote: > You'll also need to do something about the 32 bit compatability that > kbuild detected - I suppose this can't work on 32 bit platforms? So > IS_ENABLED() it off or something? Hi Jason, Is it possible to fix the issue by atomic64_set_release()? If not, we may need to add a check for __native_word(*dst) and return an unsupported error when __native_word(*dst) is false. Best Regards, Xiao Yang ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-21 3:55 ` yangx.jy @ 2022-03-21 15:32 ` Jason Gunthorpe 2022-03-25 11:44 ` yangx.jy 0 siblings, 1 reply; 15+ messages in thread From: Jason Gunthorpe @ 2022-03-21 15:32 UTC (permalink / raw) To: yangx.jy Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On Mon, Mar 21, 2022 at 03:55:01AM +0000, yangx.jy@fujitsu.com wrote: > On 2022/3/16 2:53, Jason Gunthorpe wrote: > > You'll also need to do something about the 32 bit compatability that > > kbuild detected - I suppose this can't work on 32 bit platforms? So > > IS_ENABLED() it off or something? > Hi Jason, > > Is it possible to fix the issue by atomic64_set_release()? No > If not, we may need to add a check for __native_word(*dst) and return an > unsupported error when __native_word(*dst) is false. The whole feature, including the cap bits should be turned off for 32 bit builds because it cannot possibly work Jason ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-21 15:32 ` Jason Gunthorpe @ 2022-03-25 11:44 ` yangx.jy 2022-03-25 13:22 ` Jason Gunthorpe 0 siblings, 1 reply; 15+ messages in thread From: yangx.jy @ 2022-03-25 11:44 UTC (permalink / raw) To: Jason Gunthorpe Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On 2022/3/21 23:32, Jason Gunthorpe write: > On Mon, Mar 21, 2022 at 03:55:01AM +0000, yangx.jy@fujitsu.com wrote: >> On 2022/3/16 2:53, Jason Gunthorpe wrote: >>> You'll also need to do something about the 32 bit compatability that >>> kbuild detected - I suppose this can't work on 32 bit platforms? So >>> IS_ENABLED() it off or something? >> Hi Jason, >> >> Is it possible to fix the issue by atomic64_set_release()? > No > >> If not, we may need to add a check for __native_word(*dst) and return an >> unsupported error when __native_word(*dst) is false. > The whole feature, including the cap bits should be turned off for 32 > bit builds because it cannot possibly work Hi Jason, Is it ok to disable the whole atomic write by checking CONFIG_64BIT? Best Regards, Xiao Yang > > Jason ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-25 11:44 ` yangx.jy @ 2022-03-25 13:22 ` Jason Gunthorpe 2022-03-28 10:07 ` yangx.jy 0 siblings, 1 reply; 15+ messages in thread From: Jason Gunthorpe @ 2022-03-25 13:22 UTC (permalink / raw) To: yangx.jy Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On Fri, Mar 25, 2022 at 11:44:53AM +0000, yangx.jy@fujitsu.com wrote: > On 2022/3/21 23:32, Jason Gunthorpe write: > > On Mon, Mar 21, 2022 at 03:55:01AM +0000, yangx.jy@fujitsu.com wrote: > >> On 2022/3/16 2:53, Jason Gunthorpe wrote: > >>> You'll also need to do something about the 32 bit compatability that > >>> kbuild detected - I suppose this can't work on 32 bit platforms? So > >>> IS_ENABLED() it off or something? > >> Hi Jason, > >> > >> Is it possible to fix the issue by atomic64_set_release()? > > No > > > >> If not, we may need to add a check for __native_word(*dst) and return an > >> unsupported error when __native_word(*dst) is false. > > The whole feature, including the cap bits should be turned off for 32 > > bit builds because it cannot possibly work > > Hi Jason, > > Is it ok to disable the whole atomic write by checking CONFIG_64BIT? It is not great, but there is not another choice I can see.. Jason ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-25 13:22 ` Jason Gunthorpe @ 2022-03-28 10:07 ` yangx.jy 2022-03-28 11:39 ` Jason Gunthorpe 0 siblings, 1 reply; 15+ messages in thread From: yangx.jy @ 2022-03-28 10:07 UTC (permalink / raw) To: Jason Gunthorpe Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On 2022/3/25 21:22, Jason Gunthorpe wrote: > It is not great, but there is not another choice I can see.. Hi Jason, I plan to only disable the key places by the following change so that user cannot use the atomic write: ----------------------------------------------------------------------------------------------------------- diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c index e2d332a5af0a..7f83b5e39ace 100644 --- a/drivers/infiniband/sw/rxe/rxe_req.c +++ b/drivers/infiniband/sw/rxe/rxe_req.c @@ -238,8 +238,10 @@ static int next_opcode_rc(struct rxe_qp *qp, u32 opcode, int fits) return fits ? IB_OPCODE_RC_SEND_ONLY_WITH_INVALIDATE : IB_OPCODE_RC_SEND_FIRST; +#ifdef CONFIG_64BIT case IB_WR_RDMA_ATOMIC_WRITE: return IB_OPCODE_RC_RDMA_ATOMIC_WRITE; +#endif /* CONFIG_64BIT */ case IB_WR_REG_MR: case IB_WR_LOCAL_INV: diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c index ddc791b199e2..311ec523fb57 100644 --- a/drivers/infiniband/sw/rxe/rxe_resp.c +++ b/drivers/infiniband/sw/rxe/rxe_resp.c @@ -592,6 +592,7 @@ static enum resp_states process_atomic(struct rxe_qp *qp, return ret; } +#ifdef CONFIG_64BIT static enum resp_states process_atomic_write(struct rxe_qp *qp, struct rxe_pkt_info *pkt) { @@ -613,6 +614,7 @@ static enum resp_states process_atomic_write(struct rxe_qp *qp, return RESPST_NONE; } +#endif /* CONFIG_64BIT */ static struct sk_buff *prepare_ack_packet(struct rxe_qp *qp, struct rxe_pkt_info *pkt, @@ -871,10 +873,12 @@ static enum resp_states execute(struct rxe_qp *qp, struct rxe_pkt_info *pkt) err = process_atomic(qp, pkt); if (err) return err; +#ifdef CONFIG_64BIT } else if (pkt->mask & RXE_ATOMIC_WRITE_MASK) { err = process_atomic_write(qp, pkt); if (err) return err; +#endif /* CONFIG_64BIT */ } else { /* Unreachable */ WARN_ON_ONCE(1); ----------------------------------------------------------------------------------------------------------- Best Regards, Xiao Yang > > Jason ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-28 10:07 ` yangx.jy @ 2022-03-28 11:39 ` Jason Gunthorpe 2022-03-29 2:36 ` yangx.jy 0 siblings, 1 reply; 15+ messages in thread From: Jason Gunthorpe @ 2022-03-28 11:39 UTC (permalink / raw) To: yangx.jy Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On Mon, Mar 28, 2022 at 10:07:26AM +0000, yangx.jy@fujitsu.com wrote: > On 2022/3/25 21:22, Jason Gunthorpe wrote: > > It is not great, but there is not another choice I can see.. > > Hi Jason, > > I plan to only disable the key places by the following change so that > user cannot use the atomic write: Isn't there a cap flag too? Jason ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-28 11:39 ` Jason Gunthorpe @ 2022-03-29 2:36 ` yangx.jy 2022-03-29 2:39 ` yangx.jy 0 siblings, 1 reply; 15+ messages in thread From: yangx.jy @ 2022-03-29 2:36 UTC (permalink / raw) To: Jason Gunthorpe Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On 2022/3/28 19:39, Jason Gunthorpe wrote: > On Mon, Mar 28, 2022 at 10:07:26AM +0000, yangx.jy@fujitsu.com wrote: >> On 2022/3/25 21:22, Jason Gunthorpe wrote: >>> It is not great, but there is not another choice I can see.. >> Hi Jason, >> >> I plan to only disable the key places by the following change so that >> user cannot use the atomic write: > Isn't there a cap flag too? Hi Jason, I will disable the atomic write cap flag as well, like this: ----------------------------------- diff --git a/drivers/infiniband/sw/rxe/rxe_param.h b/drivers/infiniband/sw/rxe/rxe_param.h index 918270e34a35..88953f9c26e4 100644 --- a/drivers/infiniband/sw/rxe/rxe_param.h +++ b/drivers/infiniband/sw/rxe/rxe_param.h @@ -53,7 +53,12 @@ enum rxe_device_param { | IB_DEVICE_ALLOW_USER_UNREG | IB_DEVICE_MEM_WINDOW | IB_DEVICE_MEM_WINDOW_TYPE_2A +#ifdef CONFIG_64BIT + | IB_DEVICE_MEM_WINDOW_TYPE_2B + | IB_DEVICE_ATOMIC_WRITE, +#else | IB_DEVICE_MEM_WINDOW_TYPE_2B, +#endif /* CONFIG_64BIT */ RXE_MAX_SGE = 32, RXE_MAX_WQE_SIZE = sizeof(struct rxe_send_wqe) + sizeof(struct ib_sge) * RXE_MAX_SGE, ----------------------------------- BTW: I hope we can review and merge my cleanup patchset[1][2] first. So that I will update the third patch[3] based on it. ^_^ [1]: [PATCH v2 1/2] IB/uverbs: Move enum ib_raw_packet_caps to uapi [2]: [PATCH v2 2/2] IB/uverbs: Move part of enum ib_device_cap_flags to uapi [3]: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device Best Regards, Xiao Yang > > Jason ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device 2022-03-29 2:36 ` yangx.jy @ 2022-03-29 2:39 ` yangx.jy 0 siblings, 0 replies; 15+ messages in thread From: yangx.jy @ 2022-03-29 2:39 UTC (permalink / raw) To: Jason Gunthorpe Cc: linux-rdma, yanjun.zhu, rpearsonhpe, y-goto, lizhijian, tomasz.gromadzki, tom, ira.weiny On 2022/3/29 10:36, yangx.jy@fujitsu.com wrote: > On 2022/3/28 19:39, Jason Gunthorpe wrote: >> On Mon, Mar 28, 2022 at 10:07:26AM +0000, yangx.jy@fujitsu.com wrote: >>> On 2022/3/25 21:22, Jason Gunthorpe wrote: >>>> It is not great, but there is not another choice I can see.. >>> Hi Jason, >>> >>> I plan to only disable the key places by the following change so that >>> user cannot use the atomic write: >> Isn't there a cap flag too? > Hi Jason, > > I will disable the atomic write cap flag as well, like this: > > ----------------------------------- > > diff --git a/drivers/infiniband/sw/rxe/rxe_param.h > b/drivers/infiniband/sw/rxe/rxe_param.h > index 918270e34a35..88953f9c26e4 100644 > --- a/drivers/infiniband/sw/rxe/rxe_param.h > +++ b/drivers/infiniband/sw/rxe/rxe_param.h > @@ -53,7 +53,12 @@ enum rxe_device_param { > | IB_DEVICE_ALLOW_USER_UNREG > | IB_DEVICE_MEM_WINDOW > | IB_DEVICE_MEM_WINDOW_TYPE_2A > +#ifdef CONFIG_64BIT > + | IB_DEVICE_MEM_WINDOW_TYPE_2B > + | IB_DEVICE_ATOMIC_WRITE, > +#else > | IB_DEVICE_MEM_WINDOW_TYPE_2B, > +#endif /* CONFIG_64BIT */ > RXE_MAX_SGE = 32, > RXE_MAX_WQE_SIZE = sizeof(struct rxe_send_wqe) + > sizeof(struct ib_sge) * > RXE_MAX_SGE, > > ----------------------------------- > > BTW: > > I hope we can review and merge my cleanup patchset[1][2] first. So that > I will update the third patch[3] based on it. ^_^ > > [1]: [PATCH v2 1/2] IB/uverbs: Move enum ib_raw_packet_caps to uapi > > [2]: [PATCH v2 2/2] IB/uverbs: Move part of enum ib_device_cap_flags to uapi Sorry, the correct version is my v3 cleanup patchset [1]: [PATCH v3 1/2] IB/uverbs: Move enum ib_raw_packet_caps to uapi [2]: [PATCH v3 2/2] IB/uverbs: Move part of enum ib_device_cap_flags to uapi > > [3]: [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device > > Best Regards, > > Xiao Yang > >> Jason ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2022-03-29 2:40 UTC | newest] Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-03-11 11:52 [PATCH v3 0/3] RDMA/rxe: Add RDMA Atomic Write operation Xiao Yang 2022-03-11 11:52 ` [PATCH v3 1/3] RDMA/rxe: Rename send_atomic_ack() and atomic member of struct resp_res Xiao Yang 2022-03-11 11:52 ` [PATCH v3 2/3] RDMA/rxe: Support RDMA Atomic Write operation Xiao Yang 2022-03-11 23:56 ` kernel test robot 2022-03-11 11:52 ` [PATCH v3 3/3] RDMA/rxe: Add RDMA Atomic Write attribute for rxe device Xiao Yang 2022-03-15 18:53 ` Jason Gunthorpe 2022-03-17 5:58 ` yangx.jy 2022-03-21 3:55 ` yangx.jy 2022-03-21 15:32 ` Jason Gunthorpe 2022-03-25 11:44 ` yangx.jy 2022-03-25 13:22 ` Jason Gunthorpe 2022-03-28 10:07 ` yangx.jy 2022-03-28 11:39 ` Jason Gunthorpe 2022-03-29 2:36 ` yangx.jy 2022-03-29 2:39 ` yangx.jy
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.