linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup()
@ 2020-08-17  8:28 Allen Pais
  2020-08-17  8:28 ` [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API Allen Pais
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Allen Pais @ 2020-08-17  8:28 UTC (permalink / raw)
  To: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs
  Cc: keescook, linux-rdma, linux-kernel, Allen Pais

Commit 12cc923f1ccc ("tasklet: Introduce new initialization API")'
introduced a new tasklet initialization API. This series converts 
all the infiniband drivers to use the new tasklet_setup() API

Allen Pais (5):
  infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API
  infiniband: hfi1: convert tasklets to use new tasklet_setup() API
  infiniband: i40iw: convert tasklets to use new tasklet_setup() API
  infiniband: qib: convert tasklets to use new tasklet_setup() API
  infiniband: rxe: convert tasklets to use new tasklet_setup() API

 drivers/infiniband/hw/bnxt_re/qplib_fp.c   |  7 +++----
 drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 13 ++++++-------
 drivers/infiniband/hw/hfi1/sdma.c          | 22 +++++++++++-----------
 drivers/infiniband/hw/i40iw/i40iw_main.c   | 14 +++++++-------
 drivers/infiniband/hw/qib/qib_iba7322.c    |  7 +++----
 drivers/infiniband/hw/qib/qib_sdma.c       | 10 +++++-----
 drivers/infiniband/sw/rxe/rxe_cq.c         |  6 +++---
 drivers/infiniband/sw/rxe/rxe_task.c       |  8 ++++----
 drivers/infiniband/sw/rxe/rxe_task.h       |  2 +-
 9 files changed, 43 insertions(+), 46 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API
  2020-08-17  8:28 [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup() Allen Pais
@ 2020-08-17  8:28 ` Allen Pais
  2020-08-17 17:53   ` Jason Gunthorpe
  2020-08-17  8:28 ` [PATCH 2/5] infiniband: hfi1: " Allen Pais
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Allen Pais @ 2020-08-17  8:28 UTC (permalink / raw)
  To: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs
  Cc: keescook, linux-rdma, linux-kernel, Allen Pais, Romain Perier

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.

Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
 drivers/infiniband/hw/bnxt_re/qplib_fp.c   |  7 +++----
 drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 13 ++++++-------
 2 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
index 117b42349a28..62b01582aa1c 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_fp.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
@@ -295,9 +295,9 @@ static void __wait_for_all_nqes(struct bnxt_qplib_cq *cq, u16 cnq_events)
 	}
 }
 
-static void bnxt_qplib_service_nq(unsigned long data)
+static void bnxt_qplib_service_nq(struct tasklet_struct *t)
 {
-	struct bnxt_qplib_nq *nq = (struct bnxt_qplib_nq *)data;
+	struct bnxt_qplib_nq *nq = from_tasklet(nq, t, nq_tasklet);
 	struct bnxt_qplib_hwq *hwq = &nq->hwq;
 	int num_srqne_processed = 0;
 	int num_cqne_processed = 0;
@@ -448,8 +448,7 @@ int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx,
 
 	nq->msix_vec = msix_vector;
 	if (need_init)
-		tasklet_init(&nq->nq_tasklet, bnxt_qplib_service_nq,
-			     (unsigned long)nq);
+		tasklet_setup(&nq->nq_tasklet, bnxt_qplib_service_nq);
 	else
 		tasklet_enable(&nq->nq_tasklet);
 
diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
index 4e211162acee..7261be29fb09 100644
--- a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
+++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
@@ -50,7 +50,7 @@
 #include "qplib_sp.h"
 #include "qplib_fp.h"
 
-static void bnxt_qplib_service_creq(unsigned long data);
+static void bnxt_qplib_service_creq(struct tasklet_struct *t);
 
 /* Hardware communication channel */
 static int __wait_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
@@ -79,7 +79,7 @@ static int __block_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
 		goto done;
 	do {
 		mdelay(1); /* 1m sec */
-		bnxt_qplib_service_creq((unsigned long)rcfw);
+		bnxt_qplib_service_creq(&rcfw->creq.creq_tasklet);
 	} while (test_bit(cbit, cmdq->cmdq_bitmap) && --count);
 done:
 	return count ? 0 : -ETIMEDOUT;
@@ -369,10 +369,10 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,
 }
 
 /* SP - CREQ Completion handlers */
-static void bnxt_qplib_service_creq(unsigned long data)
+static void bnxt_qplib_service_creq(struct tasklet_struct *t)
 {
-	struct bnxt_qplib_rcfw *rcfw = (struct bnxt_qplib_rcfw *)data;
-	struct bnxt_qplib_creq_ctx *creq = &rcfw->creq;
+	struct bnxt_qplib_creq_ctx *creq = from_tasklet(creq, t, creq_tasklet);
+	struct bnxt_qplib_rcfw *rcfw = container_of(creq, typeof(*rcfw), creq);
 	u32 type, budget = CREQ_ENTRY_POLL_BUDGET;
 	struct bnxt_qplib_hwq *hwq = &creq->hwq;
 	struct creq_base *creqe;
@@ -685,8 +685,7 @@ int bnxt_qplib_rcfw_start_irq(struct bnxt_qplib_rcfw *rcfw, int msix_vector,
 
 	creq->msix_vec = msix_vector;
 	if (need_init)
-		tasklet_init(&creq->creq_tasklet,
-			     bnxt_qplib_service_creq, (unsigned long)rcfw);
+		tasklet_setup(&creq->creq_tasklet, bnxt_qplib_service_creq);
 	else
 		tasklet_enable(&creq->creq_tasklet);
 	rc = request_irq(creq->msix_vec, bnxt_qplib_creq_irq, 0,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/5] infiniband: hfi1: convert tasklets to use new tasklet_setup() API
  2020-08-17  8:28 [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup() Allen Pais
  2020-08-17  8:28 ` [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API Allen Pais
@ 2020-08-17  8:28 ` Allen Pais
  2020-08-17  8:28 ` [PATCH 3/5] infiniband: i40iw: " Allen Pais
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Allen Pais @ 2020-08-17  8:28 UTC (permalink / raw)
  To: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs
  Cc: keescook, linux-rdma, linux-kernel, Allen Pais, Romain Perier

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.

Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
 drivers/infiniband/hw/hfi1/sdma.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/infiniband/hw/hfi1/sdma.c b/drivers/infiniband/hw/hfi1/sdma.c
index 04575c9afd61..a307d4c8b15a 100644
--- a/drivers/infiniband/hw/hfi1/sdma.c
+++ b/drivers/infiniband/hw/hfi1/sdma.c
@@ -232,11 +232,11 @@ static const struct sdma_set_state_action sdma_action_table[] = {
 static void sdma_complete(struct kref *);
 static void sdma_finalput(struct sdma_state *);
 static void sdma_get(struct sdma_state *);
-static void sdma_hw_clean_up_task(unsigned long);
+static void sdma_hw_clean_up_task(struct tasklet_struct *);
 static void sdma_put(struct sdma_state *);
 static void sdma_set_state(struct sdma_engine *, enum sdma_states);
 static void sdma_start_hw_clean_up(struct sdma_engine *);
-static void sdma_sw_clean_up_task(unsigned long);
+static void sdma_sw_clean_up_task(struct tasklet_struct *);
 static void sdma_sendctrl(struct sdma_engine *, unsigned);
 static void init_sdma_regs(struct sdma_engine *, u32, uint);
 static void sdma_process_event(
@@ -545,9 +545,10 @@ static void sdma_err_progress_check(struct timer_list *t)
 	schedule_work(&sde->err_halt_worker);
 }
 
-static void sdma_hw_clean_up_task(unsigned long opaque)
+static void sdma_hw_clean_up_task(struct tasklet_struct *t)
 {
-	struct sdma_engine *sde = (struct sdma_engine *)opaque;
+	struct sdma_engine *sde = from_tasklet(sde, t,
+					       sdma_hw_clean_up_task);
 	u64 statuscsr;
 
 	while (1) {
@@ -604,9 +605,9 @@ static void sdma_flush_descq(struct sdma_engine *sde)
 		sdma_desc_avail(sde, sdma_descq_freecnt(sde));
 }
 
-static void sdma_sw_clean_up_task(unsigned long opaque)
+static void sdma_sw_clean_up_task(struct tasklet_struct *t)
 {
-	struct sdma_engine *sde = (struct sdma_engine *)opaque;
+	struct sdma_engine *sde = from_tasklet(sde, t, sdma_sw_clean_up_task);
 	unsigned long flags;
 
 	spin_lock_irqsave(&sde->tail_lock, flags);
@@ -1454,11 +1455,10 @@ int sdma_init(struct hfi1_devdata *dd, u8 port)
 		sde->tail_csr =
 			get_kctxt_csr_addr(dd, this_idx, SD(TAIL));
 
-		tasklet_init(&sde->sdma_hw_clean_up_task, sdma_hw_clean_up_task,
-			     (unsigned long)sde);
-
-		tasklet_init(&sde->sdma_sw_clean_up_task, sdma_sw_clean_up_task,
-			     (unsigned long)sde);
+		tasklet_setup(&sde->sdma_hw_clean_up_task,
+			      sdma_hw_clean_up_task);
+		tasklet_setup(&sde->sdma_sw_clean_up_task,
+			      sdma_sw_clean_up_task);
 		INIT_WORK(&sde->err_halt_worker, sdma_err_halt_wait);
 		INIT_WORK(&sde->flush_worker, sdma_field_flush);
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/5] infiniband: i40iw: convert tasklets to use new tasklet_setup() API
  2020-08-17  8:28 [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup() Allen Pais
  2020-08-17  8:28 ` [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API Allen Pais
  2020-08-17  8:28 ` [PATCH 2/5] infiniband: hfi1: " Allen Pais
@ 2020-08-17  8:28 ` Allen Pais
  2020-08-17  8:28 ` [PATCH 4/5] infiniband: qib: " Allen Pais
  2020-08-17  8:28 ` [PATCH 5/5] infiniband: rxe: " Allen Pais
  4 siblings, 0 replies; 8+ messages in thread
From: Allen Pais @ 2020-08-17  8:28 UTC (permalink / raw)
  To: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs
  Cc: keescook, linux-rdma, linux-kernel, Allen Pais, Romain Perier

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.

Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
 drivers/infiniband/hw/i40iw/i40iw_main.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/infiniband/hw/i40iw/i40iw_main.c b/drivers/infiniband/hw/i40iw/i40iw_main.c
index 9c96ece5e7f3..229a0658ff18 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_main.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_main.c
@@ -192,9 +192,9 @@ static void i40iw_enable_intr(struct i40iw_sc_dev *dev, u32 msix_id)
  * i40iw_dpc - tasklet for aeq and ceq 0
  * @data: iwarp device
  */
-static void i40iw_dpc(unsigned long data)
+static void i40iw_dpc(struct tasklet_struct *t)
 {
-	struct i40iw_device *iwdev = (struct i40iw_device *)data;
+	struct i40iw_device *iwdev = from_tasklet(iwdev, t, dpc_tasklet);
 
 	if (iwdev->msix_shared)
 		i40iw_process_ceq(iwdev, iwdev->ceqlist);
@@ -206,9 +206,9 @@ static void i40iw_dpc(unsigned long data)
  * i40iw_ceq_dpc - dpc handler for CEQ
  * @data: data points to CEQ
  */
-static void i40iw_ceq_dpc(unsigned long data)
+static void i40iw_ceq_dpc(struct tasklet_struct *t)
 {
-	struct i40iw_ceq *iwceq = (struct i40iw_ceq *)data;
+	struct i40iw_ceq *iwceq = from_tasklet(iwceq, t, dpc_tasklet);
 	struct i40iw_device *iwdev = iwceq->iwdev;
 
 	i40iw_process_ceq(iwdev, iwceq);
@@ -689,10 +689,10 @@ static enum i40iw_status_code i40iw_configure_ceq_vector(struct i40iw_device *iw
 	enum i40iw_status_code status;
 
 	if (iwdev->msix_shared && !ceq_id) {
-		tasklet_init(&iwdev->dpc_tasklet, i40iw_dpc, (unsigned long)iwdev);
+		tasklet_setup(&iwdev->dpc_tasklet, i40iw_dpc);
 		status = request_irq(msix_vec->irq, i40iw_irq_handler, 0, "AEQCEQ", iwdev);
 	} else {
-		tasklet_init(&iwceq->dpc_tasklet, i40iw_ceq_dpc, (unsigned long)iwceq);
+		tasklet_setup(&iwceq->dpc_tasklet, i40iw_ceq_dpc);
 		status = request_irq(msix_vec->irq, i40iw_ceq_handler, 0, "CEQ", iwceq);
 	}
 
@@ -841,7 +841,7 @@ static enum i40iw_status_code i40iw_configure_aeq_vector(struct i40iw_device *iw
 	u32 ret = 0;
 
 	if (!iwdev->msix_shared) {
-		tasklet_init(&iwdev->dpc_tasklet, i40iw_dpc, (unsigned long)iwdev);
+		tasklet_setup(&iwdev->dpc_tasklet, i40iw_dpc);
 		ret = request_irq(msix_vec->irq, i40iw_irq_handler, 0, "i40iw", iwdev);
 	}
 	if (ret) {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/5] infiniband: qib: convert tasklets to use new tasklet_setup() API
  2020-08-17  8:28 [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup() Allen Pais
                   ` (2 preceding siblings ...)
  2020-08-17  8:28 ` [PATCH 3/5] infiniband: i40iw: " Allen Pais
@ 2020-08-17  8:28 ` Allen Pais
  2020-08-17  8:28 ` [PATCH 5/5] infiniband: rxe: " Allen Pais
  4 siblings, 0 replies; 8+ messages in thread
From: Allen Pais @ 2020-08-17  8:28 UTC (permalink / raw)
  To: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs
  Cc: keescook, linux-rdma, linux-kernel, Allen Pais, Romain Perier

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.

Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
 drivers/infiniband/hw/qib/qib_iba7322.c |  7 +++----
 drivers/infiniband/hw/qib/qib_sdma.c    | 10 +++++-----
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/infiniband/hw/qib/qib_iba7322.c b/drivers/infiniband/hw/qib/qib_iba7322.c
index 8bcbc884e5b6..0f6f021e0562 100644
--- a/drivers/infiniband/hw/qib/qib_iba7322.c
+++ b/drivers/infiniband/hw/qib/qib_iba7322.c
@@ -1733,9 +1733,9 @@ static noinline void handle_7322_errors(struct qib_devdata *dd)
 	return;
 }
 
-static void qib_error_tasklet(unsigned long data)
+static void qib_error_tasklet(struct tasklet_struct *t)
 {
-	struct qib_devdata *dd = (struct qib_devdata *)data;
+	struct qib_devdata *dd = from_tasklet(dd, t, error_tasklet);
 
 	handle_7322_errors(dd);
 	qib_write_kreg(dd, kr_errmask, dd->cspec->errormask);
@@ -3537,8 +3537,7 @@ static void qib_setup_7322_interrupt(struct qib_devdata *dd, int clearpend)
 	for (i = 0; i < ARRAY_SIZE(redirect); i++)
 		qib_write_kreg(dd, kr_intredirect + i, redirect[i]);
 	dd->cspec->main_int_mask = mask;
-	tasklet_init(&dd->error_tasklet, qib_error_tasklet,
-		(unsigned long)dd);
+	tasklet_setup(&dd->error_tasklet, qib_error_tasklet);
 }
 
 /**
diff --git a/drivers/infiniband/hw/qib/qib_sdma.c b/drivers/infiniband/hw/qib/qib_sdma.c
index 99e11c347130..eece0d4ce6c7 100644
--- a/drivers/infiniband/hw/qib/qib_sdma.c
+++ b/drivers/infiniband/hw/qib/qib_sdma.c
@@ -62,7 +62,7 @@ static void sdma_get(struct qib_sdma_state *);
 static void sdma_put(struct qib_sdma_state *);
 static void sdma_set_state(struct qib_pportdata *, enum qib_sdma_states);
 static void sdma_start_sw_clean_up(struct qib_pportdata *);
-static void sdma_sw_clean_up_task(unsigned long);
+static void sdma_sw_clean_up_task(struct tasklet_struct *);
 static void unmap_desc(struct qib_pportdata *, unsigned);
 
 static void sdma_get(struct qib_sdma_state *ss)
@@ -119,9 +119,10 @@ static void clear_sdma_activelist(struct qib_pportdata *ppd)
 	}
 }
 
-static void sdma_sw_clean_up_task(unsigned long opaque)
+static void sdma_sw_clean_up_task(struct tasklet_struct *t)
 {
-	struct qib_pportdata *ppd = (struct qib_pportdata *) opaque;
+	struct qib_pportdata *ppd = from_tasklet(ppd, t,
+						 sdma_sw_clean_up_task);
 	unsigned long flags;
 
 	spin_lock_irqsave(&ppd->sdma_lock, flags);
@@ -436,8 +437,7 @@ int qib_setup_sdma(struct qib_pportdata *ppd)
 
 	INIT_LIST_HEAD(&ppd->sdma_activelist);
 
-	tasklet_init(&ppd->sdma_sw_clean_up_task, sdma_sw_clean_up_task,
-		(unsigned long)ppd);
+	tasklet_setup(&ppd->sdma_sw_clean_up_task, sdma_sw_clean_up_task);
 
 	ret = dd->f_init_sdma_regs(ppd);
 	if (ret)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/5] infiniband: rxe: convert tasklets to use new tasklet_setup() API
  2020-08-17  8:28 [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup() Allen Pais
                   ` (3 preceding siblings ...)
  2020-08-17  8:28 ` [PATCH 4/5] infiniband: qib: " Allen Pais
@ 2020-08-17  8:28 ` Allen Pais
  4 siblings, 0 replies; 8+ messages in thread
From: Allen Pais @ 2020-08-17  8:28 UTC (permalink / raw)
  To: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs
  Cc: keescook, linux-rdma, linux-kernel, Allen Pais, Romain Perier

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.

Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
 drivers/infiniband/sw/rxe/rxe_cq.c   | 6 +++---
 drivers/infiniband/sw/rxe/rxe_task.c | 8 ++++----
 drivers/infiniband/sw/rxe/rxe_task.h | 2 +-
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/infiniband/sw/rxe/rxe_cq.c b/drivers/infiniband/sw/rxe/rxe_cq.c
index ad3090131126..f232fd03d19a 100644
--- a/drivers/infiniband/sw/rxe/rxe_cq.c
+++ b/drivers/infiniband/sw/rxe/rxe_cq.c
@@ -66,9 +66,9 @@ int rxe_cq_chk_attr(struct rxe_dev *rxe, struct rxe_cq *cq,
 	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);
@@ -107,7 +107,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;
diff --git a/drivers/infiniband/sw/rxe/rxe_task.c b/drivers/infiniband/sw/rxe/rxe_task.c
index 08f05ac5f5d5..f7c944d2f987 100644
--- a/drivers/infiniband/sw/rxe/rxe_task.c
+++ b/drivers/infiniband/sw/rxe/rxe_task.c
@@ -55,12 +55,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) {
@@ -123,7 +123,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);
@@ -159,7 +159,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)
diff --git a/drivers/infiniband/sw/rxe/rxe_task.h b/drivers/infiniband/sw/rxe/rxe_task.h
index 08ff42d451c6..f69fbb2dd09f 100644
--- a/drivers/infiniband/sw/rxe/rxe_task.h
+++ b/drivers/infiniband/sw/rxe/rxe_task.h
@@ -80,7 +80,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.
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API
  2020-08-17  8:28 ` [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API Allen Pais
@ 2020-08-17 17:53   ` Jason Gunthorpe
  2020-08-18  9:19     ` Allen
  0 siblings, 1 reply; 8+ messages in thread
From: Jason Gunthorpe @ 2020-08-17 17:53 UTC (permalink / raw)
  To: Allen Pais
  Cc: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs, keescook, linux-rdma,
	linux-kernel, Romain Perier

On Mon, Aug 17, 2020 at 01:58:40PM +0530, Allen Pais wrote:
> 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.
> 
> Signed-off-by: Romain Perier <romain.perier@gmail.com>
> Signed-off-by: Allen Pais <allen.lkml@gmail.com>
>  drivers/infiniband/hw/bnxt_re/qplib_fp.c   |  7 +++----
>  drivers/infiniband/hw/bnxt_re/qplib_rcfw.c | 13 ++++++-------
>  2 files changed, 9 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_fp.c b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
> index 117b42349a28..62b01582aa1c 100644
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_fp.c
> @@ -295,9 +295,9 @@ static void __wait_for_all_nqes(struct bnxt_qplib_cq *cq, u16 cnq_events)
>  	}
>  }
>  
> -static void bnxt_qplib_service_nq(unsigned long data)
> +static void bnxt_qplib_service_nq(struct tasklet_struct *t)
>  {
> -	struct bnxt_qplib_nq *nq = (struct bnxt_qplib_nq *)data;
> +	struct bnxt_qplib_nq *nq = from_tasklet(nq, t, nq_tasklet);
>  	struct bnxt_qplib_hwq *hwq = &nq->hwq;
>  	int num_srqne_processed = 0;
>  	int num_cqne_processed = 0;
> @@ -448,8 +448,7 @@ int bnxt_qplib_nq_start_irq(struct bnxt_qplib_nq *nq, int nq_indx,
>  
>  	nq->msix_vec = msix_vector;
>  	if (need_init)
> -		tasklet_init(&nq->nq_tasklet, bnxt_qplib_service_nq,
> -			     (unsigned long)nq);
> +		tasklet_setup(&nq->nq_tasklet, bnxt_qplib_service_nq);
>  	else
>  		tasklet_enable(&nq->nq_tasklet);
>  
> diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
> index 4e211162acee..7261be29fb09 100644
> +++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
> @@ -50,7 +50,7 @@
>  #include "qplib_sp.h"
>  #include "qplib_fp.h"
>  
> -static void bnxt_qplib_service_creq(unsigned long data);
> +static void bnxt_qplib_service_creq(struct tasklet_struct *t);
>  
>  /* Hardware communication channel */
>  static int __wait_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
> @@ -79,7 +79,7 @@ static int __block_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
>  		goto done;
>  	do {
>  		mdelay(1); /* 1m sec */
> -		bnxt_qplib_service_creq((unsigned long)rcfw);
> +		bnxt_qplib_service_creq(&rcfw->creq.creq_tasklet);
>  	} while (test_bit(cbit, cmdq->cmdq_bitmap) && --count);
>  done:
>  	return count ? 0 : -ETIMEDOUT;
> @@ -369,10 +369,10 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,
>  }
>  
>  /* SP - CREQ Completion handlers */
> -static void bnxt_qplib_service_creq(unsigned long data)
> +static void bnxt_qplib_service_creq(struct tasklet_struct *t)
>  {
> -	struct bnxt_qplib_rcfw *rcfw = (struct bnxt_qplib_rcfw *)data;
> -	struct bnxt_qplib_creq_ctx *creq = &rcfw->creq;
> +	struct bnxt_qplib_creq_ctx *creq = from_tasklet(creq, t, creq_tasklet);

This is just:

  struct bnxt_qplib_rcfw *rcfw = from_tasklet(rcfw, t, crew.creq_tasklet);

No need for the extra container_of

Jason

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API
  2020-08-17 17:53   ` Jason Gunthorpe
@ 2020-08-18  9:19     ` Allen
  0 siblings, 0 replies; 8+ messages in thread
From: Allen @ 2020-08-18  9:19 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: selvin.xavier, devesh.sharma, somnath.kotur,
	sriharsha.basavapatna, nareshkumar.pbs, Kees Cook, linux-rdma,
	linux-kernel, Romain Perier

> > diff --git a/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
> > index 4e211162acee..7261be29fb09 100644
> > +++ b/drivers/infiniband/hw/bnxt_re/qplib_rcfw.c
> > @@ -50,7 +50,7 @@
> >  #include "qplib_sp.h"
> >  #include "qplib_fp.h"
> >
> > -static void bnxt_qplib_service_creq(unsigned long data);
> > +static void bnxt_qplib_service_creq(struct tasklet_struct *t);
> >
> >  /* Hardware communication channel */
> >  static int __wait_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
> > @@ -79,7 +79,7 @@ static int __block_for_resp(struct bnxt_qplib_rcfw *rcfw, u16 cookie)
> >               goto done;
> >       do {
> >               mdelay(1); /* 1m sec */
> > -             bnxt_qplib_service_creq((unsigned long)rcfw);
> > +             bnxt_qplib_service_creq(&rcfw->creq.creq_tasklet);
> >       } while (test_bit(cbit, cmdq->cmdq_bitmap) && --count);
> >  done:
> >       return count ? 0 : -ETIMEDOUT;
> > @@ -369,10 +369,10 @@ static int bnxt_qplib_process_qp_event(struct bnxt_qplib_rcfw *rcfw,
> >  }
> >
> >  /* SP - CREQ Completion handlers */
> > -static void bnxt_qplib_service_creq(unsigned long data)
> > +static void bnxt_qplib_service_creq(struct tasklet_struct *t)
> >  {
> > -     struct bnxt_qplib_rcfw *rcfw = (struct bnxt_qplib_rcfw *)data;
> > -     struct bnxt_qplib_creq_ctx *creq = &rcfw->creq;
> > +     struct bnxt_qplib_creq_ctx *creq = from_tasklet(creq, t, creq_tasklet);
>
> This is just:
>
>   struct bnxt_qplib_rcfw *rcfw = from_tasklet(rcfw, t, crew.creq_tasklet);
>
> No need for the extra container_of

Sure, will fix it and spin V2.

Thanks.
>
> Jason



-- 
       - Allen

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-08-18  9:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-17  8:28 [PATCH 0/5] infiniband: convert tasklets to use new tasklet_setup() Allen Pais
2020-08-17  8:28 ` [PATCH 1/5] infiniband: bnxt_re: convert tasklets to use new tasklet_setup() API Allen Pais
2020-08-17 17:53   ` Jason Gunthorpe
2020-08-18  9:19     ` Allen
2020-08-17  8:28 ` [PATCH 2/5] infiniband: hfi1: " Allen Pais
2020-08-17  8:28 ` [PATCH 3/5] infiniband: i40iw: " Allen Pais
2020-08-17  8:28 ` [PATCH 4/5] infiniband: qib: " Allen Pais
2020-08-17  8:28 ` [PATCH 5/5] infiniband: rxe: " Allen Pais

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).