Skip to content

Commit

Permalink
RDMA/rxe: Convert tasklet args to queue pairs
Browse files Browse the repository at this point in the history
[ Upstream commit 3946fc2 ]

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: b2b1ddc ("RDMA/rxe: Fix the error "trying to register non-static key in rxe_cleanup_task"")
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Bob Pearson authored and gregkh committed May 11, 2023
1 parent a68ed2e commit 1661cc4
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 18 deletions.
3 changes: 1 addition & 2 deletions drivers/infiniband/sw/rxe/rxe_comp.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,9 +571,8 @@ static void free_pkt(struct rxe_pkt_info *pkt)
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;
Expand Down
6 changes: 3 additions & 3 deletions drivers/infiniband/sw/rxe/rxe_loc.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,9 +171,9 @@ void rxe_srq_cleanup(struct rxe_pool_elem *elem);

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);
Expand Down
3 changes: 1 addition & 2 deletions drivers/infiniband/sw/rxe/rxe_req.c
Original file line number Diff line number Diff line change
Expand Up @@ -635,9 +635,8 @@ static int rxe_do_local_ops(struct rxe_qp *qp, struct rxe_send_wqe *wqe)
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;
Expand Down
3 changes: 1 addition & 2 deletions drivers/infiniband/sw/rxe/rxe_resp.c
Original file line number Diff line number Diff line change
Expand Up @@ -1439,9 +1439,8 @@ static void rxe_drain_req_pkts(struct rxe_qp *qp, bool notify)
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;
Expand Down
11 changes: 6 additions & 5 deletions drivers/infiniband/sw/rxe/rxe_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -29,7 +29,7 @@ static void do_task(struct tasklet_struct *t)
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);
Expand All @@ -54,7 +54,7 @@ static void do_task(struct tasklet_struct *t)

do {
cont = 0;
ret = task->func(task->arg);
ret = task->func(task->qp);

spin_lock_bh(&task->lock);
switch (task->state) {
Expand Down Expand Up @@ -91,9 +91,10 @@ static void do_task(struct tasklet_struct *t)
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;

Expand Down
9 changes: 5 additions & 4 deletions drivers/infiniband/sw/rxe/rxe_task.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 1661cc4

Please sign in to comment.