From: Bob Pearson <rpearsonhpe@gmail.com>
To: jgg@nvidia.com, leon@kernel.org, zyjzyj2000@gmail.com,
jhack@hpe.com, linux-rdma@vger.kernel.org
Cc: Bob Pearson <rpearsonhpe@gmail.com>
Subject: [PATCH for-next 04/17] RDMA/rxe: Add sg fragment ops
Date: Thu, 27 Oct 2022 13:54:58 -0500 [thread overview]
Message-ID: <20221027185510.33808-5-rpearsonhpe@gmail.com> (raw)
In-Reply-To: <20221027185510.33808-1-rpearsonhpe@gmail.com>
Rename rxe_mr_copy_dir to rxe_mr_copy_op and add new operations for
copying between an skb fragment list and an mr.
This is in preparation for supporting fragmented skbs.
Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com>
---
drivers/infiniband/sw/rxe/rxe_comp.c | 4 ++--
drivers/infiniband/sw/rxe/rxe_loc.h | 4 ++--
drivers/infiniband/sw/rxe/rxe_mr.c | 14 +++++++-------
drivers/infiniband/sw/rxe/rxe_req.c | 2 +-
drivers/infiniband/sw/rxe/rxe_resp.c | 9 +++++----
drivers/infiniband/sw/rxe/rxe_verbs.h | 15 ++++++++++++---
6 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/drivers/infiniband/sw/rxe/rxe_comp.c b/drivers/infiniband/sw/rxe/rxe_comp.c
index c9170dd99f3a..77640e35ae88 100644
--- a/drivers/infiniband/sw/rxe/rxe_comp.c
+++ b/drivers/infiniband/sw/rxe/rxe_comp.c
@@ -356,7 +356,7 @@ static inline enum comp_state do_read(struct rxe_qp *qp,
ret = copy_data(qp->pd, IB_ACCESS_LOCAL_WRITE,
&wqe->dma, payload_addr(pkt),
- payload_size(pkt), RXE_TO_MR_OBJ);
+ payload_size(pkt), RXE_COPY_TO_MR);
if (ret) {
wqe->status = IB_WC_LOC_PROT_ERR;
return COMPST_ERROR;
@@ -378,7 +378,7 @@ static inline enum comp_state do_atomic(struct rxe_qp *qp,
ret = copy_data(qp->pd, IB_ACCESS_LOCAL_WRITE,
&wqe->dma, &atomic_orig,
- sizeof(u64), RXE_TO_MR_OBJ);
+ sizeof(u64), RXE_COPY_TO_MR);
if (ret) {
wqe->status = IB_WC_LOC_PROT_ERR;
return COMPST_ERROR;
diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h
index 574a6afc1199..ff803a957ac1 100644
--- a/drivers/infiniband/sw/rxe/rxe_loc.h
+++ b/drivers/infiniband/sw/rxe/rxe_loc.h
@@ -69,9 +69,9 @@ int rxe_mr_init_user(struct rxe_dev *rxe, u64 start, u64 length, u64 iova,
int access, struct rxe_mr *mr);
int rxe_mr_init_fast(int max_pages, struct rxe_mr *mr);
int rxe_mr_copy(struct rxe_mr *mr, u64 iova, void *addr, int length,
- enum rxe_mr_copy_dir dir);
+ enum rxe_mr_copy_op op);
int copy_data(struct rxe_pd *pd, int access, struct rxe_dma_info *dma,
- void *addr, int length, enum rxe_mr_copy_dir dir);
+ void *addr, int length, enum rxe_mr_copy_op op);
void *iova_to_vaddr(struct rxe_mr *mr, u64 iova, int length);
struct rxe_mr *lookup_mr(struct rxe_pd *pd, int access, u32 key,
enum rxe_mr_lookup_type type);
diff --git a/drivers/infiniband/sw/rxe/rxe_mr.c b/drivers/infiniband/sw/rxe/rxe_mr.c
index 502e9ada99b3..1cb997caa292 100644
--- a/drivers/infiniband/sw/rxe/rxe_mr.c
+++ b/drivers/infiniband/sw/rxe/rxe_mr.c
@@ -290,7 +290,7 @@ void *iova_to_vaddr(struct rxe_mr *mr, u64 iova, int length)
* a mr object starting at iova.
*/
int rxe_mr_copy(struct rxe_mr *mr, u64 iova, void *addr, int length,
- enum rxe_mr_copy_dir dir)
+ enum rxe_mr_copy_op op)
{
int err;
int bytes;
@@ -307,9 +307,9 @@ int rxe_mr_copy(struct rxe_mr *mr, u64 iova, void *addr, int length,
if (mr->type == IB_MR_TYPE_DMA) {
u8 *src, *dest;
- src = (dir == RXE_TO_MR_OBJ) ? addr : ((void *)(uintptr_t)iova);
+ src = (op == RXE_COPY_TO_MR) ? addr : ((void *)(uintptr_t)iova);
- dest = (dir == RXE_TO_MR_OBJ) ? ((void *)(uintptr_t)iova) : addr;
+ dest = (op == RXE_COPY_TO_MR) ? ((void *)(uintptr_t)iova) : addr;
memcpy(dest, src, length);
@@ -333,8 +333,8 @@ int rxe_mr_copy(struct rxe_mr *mr, u64 iova, void *addr, int length,
u8 *src, *dest;
va = (u8 *)(uintptr_t)buf->addr + offset;
- src = (dir == RXE_TO_MR_OBJ) ? addr : va;
- dest = (dir == RXE_TO_MR_OBJ) ? va : addr;
+ src = (op == RXE_COPY_TO_MR) ? addr : va;
+ dest = (op == RXE_COPY_TO_MR) ? va : addr;
bytes = buf->size - offset;
@@ -372,7 +372,7 @@ int copy_data(
struct rxe_dma_info *dma,
void *addr,
int length,
- enum rxe_mr_copy_dir dir)
+ enum rxe_mr_copy_op op)
{
int bytes;
struct rxe_sge *sge = &dma->sge[dma->cur_sge];
@@ -433,7 +433,7 @@ int copy_data(
if (bytes > 0) {
iova = sge->addr + offset;
- err = rxe_mr_copy(mr, iova, addr, bytes, dir);
+ err = rxe_mr_copy(mr, iova, addr, bytes, op);
if (err)
goto err2;
diff --git a/drivers/infiniband/sw/rxe/rxe_req.c b/drivers/infiniband/sw/rxe/rxe_req.c
index 8cc683ebf536..9d92acfb2fcf 100644
--- a/drivers/infiniband/sw/rxe/rxe_req.c
+++ b/drivers/infiniband/sw/rxe/rxe_req.c
@@ -450,7 +450,7 @@ static int rxe_init_payload(struct rxe_qp *qp, struct rxe_send_wqe *wqe,
wqe->dma.sge_offset += payload;
} else {
err = copy_data(qp->pd, 0, &wqe->dma, payload_addr(pkt),
- payload, RXE_FROM_MR_OBJ);
+ payload, RXE_COPY_FROM_MR);
}
return err;
diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
index a00885799619..4b185ddac887 100644
--- a/drivers/infiniband/sw/rxe/rxe_resp.c
+++ b/drivers/infiniband/sw/rxe/rxe_resp.c
@@ -524,7 +524,7 @@ static enum resp_states send_data_in(struct rxe_qp *qp, void *data_addr,
int err;
err = copy_data(qp->pd, IB_ACCESS_LOCAL_WRITE, &qp->resp.wqe->dma,
- data_addr, data_len, RXE_TO_MR_OBJ);
+ data_addr, data_len, RXE_COPY_TO_MR);
if (unlikely(err))
return (err == -ENOSPC) ? RESPST_ERR_LENGTH
: RESPST_ERR_MALFORMED_WQE;
@@ -540,7 +540,7 @@ static enum resp_states write_data_in(struct rxe_qp *qp,
int data_len = payload_size(pkt);
err = rxe_mr_copy(qp->resp.mr, qp->resp.va + qp->resp.offset,
- payload_addr(pkt), data_len, RXE_TO_MR_OBJ);
+ payload_addr(pkt), data_len, RXE_COPY_TO_MR);
if (err) {
rc = RESPST_ERR_RKEY_VIOLATION;
goto out;
@@ -807,8 +807,9 @@ static enum resp_states read_reply(struct rxe_qp *qp,
return RESPST_ERR_RNR;
err = rxe_mr_copy(mr, res->read.va, payload_addr(&ack_pkt),
- payload, RXE_FROM_MR_OBJ);
- rxe_put(mr);
+ payload, RXE_COPY_FROM_MR);
+ if (mr)
+ rxe_put(mr);
if (err) {
kfree_skb(skb);
return RESPST_ERR_RKEY_VIOLATION;
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
index 5f5cbfcb3569..b3218715ef5d 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.h
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
@@ -267,9 +267,18 @@ enum rxe_mr_state {
RXE_MR_STATE_VALID,
};
-enum rxe_mr_copy_dir {
- RXE_TO_MR_OBJ,
- RXE_FROM_MR_OBJ,
+/**
+ * enum rxe_mr_copy_op - Operations peformed by rxe_copy_mr/dma_data()
+ * @RXE_COPY_TO_MR: Copy data from packet to MR(s)
+ * @RXE_COPY_FROM_MR: Copy data from MR(s) to packet
+ * @RXE_FRAG_TO_MR: Copy data from frag list to MR(s)
+ * @RXE_FRAG_FROM_MR: Copy data from MR(s) to frag list
+ */
+enum rxe_mr_copy_op {
+ RXE_COPY_TO_MR,
+ RXE_COPY_FROM_MR,
+ RXE_FRAG_TO_MR,
+ RXE_FRAG_FROM_MR,
};
enum rxe_mr_lookup_type {
--
2.34.1
next prev parent reply other threads:[~2022-10-27 18:56 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 18:54 [PATCH for-next 00/17] RDMA/rxe: Enable scatter/gather support for skbs Bob Pearson
2022-10-27 18:54 ` [PATCH for-next 01/17] RDMA/rxe: Isolate code to fill request roce headers Bob Pearson
2022-10-27 18:54 ` [PATCH for-next 02/17] RDMA/rxe: Isolate request payload code in a subroutine Bob Pearson
2022-10-27 18:54 ` [PATCH for-next 03/17] RDMA/rxe: Isolate code to build request packet Bob Pearson
2022-10-30 18:52 ` kernel test robot
2022-10-27 18:54 ` Bob Pearson [this message]
2022-10-27 18:54 ` [PATCH for-next 05/17] RDMA/rxe: Add rxe_add_frag() to rxe_mr.c Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 06/17] RDMA/rxe: Add routine to compute the number of frags Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 07/17] RDMA/rxe: Extend rxe_mr_copy to support skb frags Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 08/17] RDMA/rxe: Add routine to compute number of frags for dma Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 09/17] RDMA/rxe: Extend copy_data to support skb frags Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 10/17] RDMA/rxe: Replace rxe by qp as a parameter Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 11/17] RDMA/rxe: Extend rxe_init_packet() to support frags Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 12/17] RDMA/rxe: Extend rxe_icrc.c " Bob Pearson
2022-10-27 20:29 ` kernel test robot
2022-10-30 19:33 ` kernel test robot
2022-10-27 18:55 ` [PATCH for-next 13/17] RDMA/rxe: Extend rxe_init_req_packet() for frags Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 14/17] RDMA/rxe: Extend response packets " Bob Pearson
2022-10-30 20:13 ` kernel test robot
2022-10-27 18:55 ` [PATCH for-next 15/17] RDMA/rxe: Extend send/write_data_in() " Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 16/17] RDMA/rxe: Extend do_read() in rxe_comp,c " Bob Pearson
2022-10-27 18:55 ` [PATCH for-next 17/17] RDMA/rxe: Enable sg code in rxe Bob Pearson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221027185510.33808-5-rpearsonhpe@gmail.com \
--to=rpearsonhpe@gmail.com \
--cc=jgg@nvidia.com \
--cc=jhack@hpe.com \
--cc=leon@kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=zyjzyj2000@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.