RDMA/rxe: Convert tasklets to use new tasklet_setup() API
authorAllen Pais <allen.lkml@gmail.com>
Thu, 3 Sep 2020 06:06:37 +0000 (11:36 +0530)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 3 Sep 2020 15:01:53 +0000 (12:01 -0300)
In preparation for unconditionally passing the struct tasklet_struct
pointer to all tasklet callbacks, switch to using the new tasklet_setup()
and from_tasklet() to pass the tasklet pointer explicitly.

Link: https://lore.kernel.org/r/20200903060637.424458-6-allen.lkml@gmail.com
Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/sw/rxe/rxe_cq.c
drivers/infiniband/sw/rxe/rxe_task.c
drivers/infiniband/sw/rxe/rxe_task.h

index 13b15a541ffa6fdd9c26d8da0ef01fa5fc5189e0..43394c3f29d41144ca1b3279161c1992a3611ea3 100644 (file)
@@ -39,9 +39,9 @@ err1:
        return -EINVAL;
 }
 
-static void rxe_send_complete(unsigned long data)
+static void rxe_send_complete(struct tasklet_struct *t)
 {
-       struct rxe_cq *cq = (struct rxe_cq *)data;
+       struct rxe_cq *cq = from_tasklet(cq, t, comp_task);
        unsigned long flags;
 
        spin_lock_irqsave(&cq->cq_lock, flags);
@@ -80,7 +80,7 @@ int rxe_cq_from_init(struct rxe_dev *rxe, struct rxe_cq *cq, int cqe,
 
        cq->is_dying = false;
 
-       tasklet_init(&cq->comp_task, rxe_send_complete, (unsigned long)cq);
+       tasklet_setup(&cq->comp_task, rxe_send_complete);
 
        spin_lock_init(&cq->cq_lock);
        cq->ibcq.cqe = cqe;
index 0da1166adea2e362691e351b4bc059fa336b0b97..6951fdcb31bf51f88b65be198a5d3397a0bd6408 100644 (file)
@@ -28,12 +28,12 @@ int __rxe_do_task(struct rxe_task *task)
  * a second caller finds the task already running
  * but looks just after the last call to func
  */
-void rxe_do_task(unsigned long data)
+void rxe_do_task(struct tasklet_struct *t)
 {
        int cont;
        int ret;
        unsigned long flags;
-       struct rxe_task *task = (struct rxe_task *)data;
+       struct rxe_task *task = from_tasklet(task, t, tasklet);
 
        spin_lock_irqsave(&task->state_lock, flags);
        switch (task->state) {
@@ -96,7 +96,7 @@ int rxe_init_task(void *obj, struct rxe_task *task,
        snprintf(task->name, sizeof(task->name), "%s", name);
        task->destroyed = false;
 
-       tasklet_init(&task->tasklet, rxe_do_task, (unsigned long)task);
+       tasklet_setup(&task->tasklet, rxe_do_task);
 
        task->state = TASK_STATE_START;
        spin_lock_init(&task->state_lock);
@@ -132,7 +132,7 @@ void rxe_run_task(struct rxe_task *task, int sched)
        if (sched)
                tasklet_schedule(&task->tasklet);
        else
-               rxe_do_task((unsigned long)task);
+               rxe_do_task(&task->tasklet);
 }
 
 void rxe_disable_task(struct rxe_task *task)
index 53aa8e45cbf72516e559302984b6075b390866ef..11d183fd333863d74a888dcfed916e14067b3150 100644 (file)
@@ -53,7 +53,7 @@ int __rxe_do_task(struct rxe_task *task);
  * work to do someone must reschedule the task before
  * leaving
  */
-void rxe_do_task(unsigned long data);
+void rxe_do_task(struct tasklet_struct *t);
 
 /* run a task, else schedule it to run as a tasklet, The decision
  * to run or schedule tasklet is based on the parameter sched.