RDMA/rxe: Convert tasklet args to queue pairs

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>
This commit is contained in:
Bob Pearson 2023-03-04 11:45:27 -06:00 committed by Jason Gunthorpe
parent 5bf944f241
commit 3946fc2a42
6 changed files with 17 additions and 18 deletions

View file

@ -575,9 +575,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;

View file

@ -170,9 +170,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);

View file

@ -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;

View file

@ -1443,9 +1443,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;

View file

@ -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_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);
@ -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) {
@ -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;

View file

@ -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);