| From 66273811b8380304d97de8edc1869e276b0eb0f0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 4 Mar 2023 11:45:27 -0600 |
| Subject: RDMA/rxe: Convert tasklet args to queue pairs |
| |
| From: Bob Pearson <rpearsonhpe@gmail.com> |
| |
| [ Upstream commit 3946fc2a42b18cf0b675121158a2625825ce27b5 ] |
| |
| Originally is was thought that the tasklet machinery in rxe_task.c would |
| be used in other applications but that has not happened for years. This |
| patch replaces the 'void *arg' by struct 'rxe_qp *qp' in the parameters to |
| the tasklet calls. This change will have no affect on performance but may |
| make the code a little clearer. |
| |
| Link: https://lore.kernel.org/r/20230304174533.11296-2-rpearsonhpe@gmail.com |
| Signed-off-by: Bob Pearson <rpearsonhpe@gmail.com> |
| Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> |
| Stable-dep-of: b2b1ddc45745 ("RDMA/rxe: Fix the error "trying to register non-static key in rxe_cleanup_task"") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/sw/rxe/rxe_comp.c | 3 +-- |
| drivers/infiniband/sw/rxe/rxe_loc.h | 6 +++--- |
| drivers/infiniband/sw/rxe/rxe_req.c | 3 +-- |
| drivers/infiniband/sw/rxe/rxe_resp.c | 3 +-- |
| drivers/infiniband/sw/rxe/rxe_task.c | 11 ++++++----- |
| drivers/infiniband/sw/rxe/rxe_task.h | 9 +++++---- |
| 6 files changed, 17 insertions(+), 18 deletions(-) |
| |
| --- a/drivers/infiniband/sw/rxe/rxe_comp.c |
| +++ b/drivers/infiniband/sw/rxe/rxe_comp.c |
| @@ -571,9 +571,8 @@ static void free_pkt(struct rxe_pkt_info |
| ib_device_put(dev); |
| } |
| |
| -int rxe_completer(void *arg) |
| +int rxe_completer(struct rxe_qp *qp) |
| { |
| - struct rxe_qp *qp = (struct rxe_qp *)arg; |
| struct rxe_dev *rxe = to_rdev(qp->ibqp.device); |
| struct rxe_send_wqe *wqe = NULL; |
| struct sk_buff *skb = NULL; |
| --- a/drivers/infiniband/sw/rxe/rxe_loc.h |
| +++ b/drivers/infiniband/sw/rxe/rxe_loc.h |
| @@ -171,9 +171,9 @@ void rxe_srq_cleanup(struct rxe_pool_ele |
| |
| void rxe_dealloc(struct ib_device *ib_dev); |
| |
| -int rxe_completer(void *arg); |
| -int rxe_requester(void *arg); |
| -int rxe_responder(void *arg); |
| +int rxe_completer(struct rxe_qp *qp); |
| +int rxe_requester(struct rxe_qp *qp); |
| +int rxe_responder(struct rxe_qp *qp); |
| |
| /* rxe_icrc.c */ |
| int rxe_icrc_init(struct rxe_dev *rxe); |
| --- a/drivers/infiniband/sw/rxe/rxe_req.c |
| +++ b/drivers/infiniband/sw/rxe/rxe_req.c |
| @@ -635,9 +635,8 @@ static int rxe_do_local_ops(struct rxe_q |
| return 0; |
| } |
| |
| -int rxe_requester(void *arg) |
| +int rxe_requester(struct rxe_qp *qp) |
| { |
| - struct rxe_qp *qp = (struct rxe_qp *)arg; |
| struct rxe_dev *rxe = to_rdev(qp->ibqp.device); |
| struct rxe_pkt_info pkt; |
| struct sk_buff *skb; |
| --- a/drivers/infiniband/sw/rxe/rxe_resp.c |
| +++ b/drivers/infiniband/sw/rxe/rxe_resp.c |
| @@ -1439,9 +1439,8 @@ static void rxe_drain_req_pkts(struct rx |
| queue_advance_consumer(q, q->type); |
| } |
| |
| -int rxe_responder(void *arg) |
| +int rxe_responder(struct rxe_qp *qp) |
| { |
| - struct rxe_qp *qp = (struct rxe_qp *)arg; |
| struct rxe_dev *rxe = to_rdev(qp->ibqp.device); |
| enum resp_states state; |
| struct rxe_pkt_info *pkt = NULL; |
| --- a/drivers/infiniband/sw/rxe/rxe_task.c |
| +++ b/drivers/infiniband/sw/rxe/rxe_task.c |
| @@ -11,7 +11,7 @@ int __rxe_do_task(struct rxe_task *task) |
| { |
| int ret; |
| |
| - while ((ret = task->func(task->arg)) == 0) |
| + while ((ret = task->func(task->qp)) == 0) |
| ; |
| |
| task->ret = ret; |
| @@ -29,7 +29,7 @@ static void do_task(struct tasklet_struc |
| int cont; |
| int ret; |
| struct rxe_task *task = from_tasklet(task, t, tasklet); |
| - struct rxe_qp *qp = (struct rxe_qp *)task->arg; |
| + struct rxe_qp *qp = (struct rxe_qp *)task->qp; |
| unsigned int iterations = RXE_MAX_ITERATIONS; |
| |
| spin_lock_bh(&task->lock); |
| @@ -54,7 +54,7 @@ static void do_task(struct tasklet_struc |
| |
| do { |
| cont = 0; |
| - ret = task->func(task->arg); |
| + ret = task->func(task->qp); |
| |
| spin_lock_bh(&task->lock); |
| switch (task->state) { |
| @@ -91,9 +91,10 @@ static void do_task(struct tasklet_struc |
| task->ret = ret; |
| } |
| |
| -int rxe_init_task(struct rxe_task *task, void *arg, int (*func)(void *)) |
| +int rxe_init_task(struct rxe_task *task, struct rxe_qp *qp, |
| + int (*func)(struct rxe_qp *)) |
| { |
| - task->arg = arg; |
| + task->qp = qp; |
| task->func = func; |
| task->destroyed = false; |
| |
| --- a/drivers/infiniband/sw/rxe/rxe_task.h |
| +++ b/drivers/infiniband/sw/rxe/rxe_task.h |
| @@ -22,18 +22,19 @@ struct rxe_task { |
| struct tasklet_struct tasklet; |
| int state; |
| spinlock_t lock; |
| - void *arg; |
| - int (*func)(void *arg); |
| + struct rxe_qp *qp; |
| + int (*func)(struct rxe_qp *qp); |
| int ret; |
| bool destroyed; |
| }; |
| |
| /* |
| * init rxe_task structure |
| - * arg => parameter to pass to fcn |
| + * qp => parameter to pass to func |
| * func => function to call until it returns != 0 |
| */ |
| -int rxe_init_task(struct rxe_task *task, void *arg, int (*func)(void *)); |
| +int rxe_init_task(struct rxe_task *task, struct rxe_qp *qp, |
| + int (*func)(struct rxe_qp *)); |
| |
| /* cleanup task */ |
| void rxe_cleanup_task(struct rxe_task *task); |