From: Allen Pais <allen.lkml@gmail.com>
To: kuba@kernel.org, "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>
Cc: jes@trained-monkey.org, kda@linux-powerpc.org,
cai.huoqing@linux.dev, dougmill@linux.ibm.com, npiggin@gmail.com,
christophe.leroy@csgroup.eu, aneesh.kumar@kernel.org,
naveen.n.rao@linux.ibm.com, nnac123@linux.ibm.com,
tlfalcon@linux.ibm.com, cooldavid@cooldavid.org,
marcin.s.wojtas@gmail.com, mlindner@marvell.com,
stephen@networkplumber.org, nbd@nbd.name, sean.wang@mediatek.com,
Mark-MC.Lee@mediatek.com, lorenzo@kernel.org,
matthias.bgg@gmail.com, angelogioacchino.delregno@collabora.com,
borisp@nvidia.com, bryan.whitehead@microchip.com,
UNGLinuxDriver@microchip.com, louis.peens@corigine.com,
richardcochran@gmail.com, linux-rdma@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-acenic@sunsite.dk,
linux-net-drivers@amd.com, Allen Pais <allen.lkml@gmail.com>,
netdev@vger.kernel.org
Subject: [PATCH 05/15] net: cavium/liquidio: Convert tasklet API to new bottom half workqueue mechanism
Date: Thu, 20 Jun 2024 22:05:15 -0700 [thread overview]
Message-ID: <20240621050525.3720069-6-allen.lkml@gmail.com> (raw)
In-Reply-To: <20240621050525.3720069-1-allen.lkml@gmail.com>
Migrate tasklet APIs to the new bottom half workqueue mechanism. It
replaces all occurrences of tasklet usage with the appropriate workqueue
APIs throughout the cavium/liquidio driver. This transition ensures
compatibility with the latest design and enhances performance.
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
.../net/ethernet/cavium/liquidio/lio_core.c | 4 ++--
.../net/ethernet/cavium/liquidio/lio_main.c | 24 +++++++++----------
.../ethernet/cavium/liquidio/lio_vf_main.c | 10 ++++----
.../ethernet/cavium/liquidio/octeon_droq.c | 4 ++--
.../ethernet/cavium/liquidio/octeon_main.h | 4 ++--
5 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c
index 674c54831875..37307e02a6ff 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_core.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c
@@ -925,7 +925,7 @@ int liquidio_schedule_msix_droq_pkt_handler(struct octeon_droq *droq, u64 ret)
if (OCTEON_CN23XX_VF(oct))
dev_err(&oct->pci_dev->dev,
"should not come here should not get rx when poll mode = 0 for vf\n");
- tasklet_schedule(&oct_priv->droq_tasklet);
+ queue_work(system_bh_wq, &oct_priv->droq_bh_work);
return 1;
}
/* this will be flushed periodically by check iq db */
@@ -975,7 +975,7 @@ static void liquidio_schedule_droq_pkt_handlers(struct octeon_device *oct)
droq->ops.napi_fn(droq);
oct_priv->napi_mask |= BIT_ULL(oq_no);
} else {
- tasklet_schedule(&oct_priv->droq_tasklet);
+ queue_work(system_bh_wq, &oct_priv->droq_bh_work);
}
}
}
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c
index 1d79f6eaa41f..d348656c2f38 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
@@ -150,12 +150,12 @@ static int liquidio_set_vf_link_state(struct net_device *netdev, int vfidx,
static struct handshake handshake[MAX_OCTEON_DEVICES];
static struct completion first_stage;
-static void octeon_droq_bh(struct tasklet_struct *t)
+static void octeon_droq_bh(struct work_struct *work)
{
int q_no;
int reschedule = 0;
- struct octeon_device_priv *oct_priv = from_tasklet(oct_priv, t,
- droq_tasklet);
+ struct octeon_device_priv *oct_priv = from_work(oct_priv, work,
+ droq_bh_work);
struct octeon_device *oct = oct_priv->dev;
for (q_no = 0; q_no < MAX_OCTEON_OUTPUT_QUEUES(oct); q_no++) {
@@ -180,7 +180,7 @@ static void octeon_droq_bh(struct tasklet_struct *t)
}
if (reschedule)
- tasklet_schedule(&oct_priv->droq_tasklet);
+ queue_work(system_bh_wq, &oct_priv->droq_bh_work);
}
static int lio_wait_for_oq_pkts(struct octeon_device *oct)
@@ -199,7 +199,7 @@ static int lio_wait_for_oq_pkts(struct octeon_device *oct)
}
if (pkt_cnt > 0) {
pending_pkts += pkt_cnt;
- tasklet_schedule(&oct_priv->droq_tasklet);
+ queue_work(system_bh_wq, &oct_priv->droq_bh_work);
}
pkt_cnt = 0;
schedule_timeout_uninterruptible(1);
@@ -1130,7 +1130,7 @@ static void octeon_destroy_resources(struct octeon_device *oct)
break;
} /* end switch (oct->status) */
- tasklet_kill(&oct_priv->droq_tasklet);
+ cancel_work_sync(&oct_priv->droq_bh_work);
}
/**
@@ -1234,7 +1234,7 @@ static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx)
list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
netif_napi_del(napi);
- tasklet_enable(&oct_priv->droq_tasklet);
+ enable_and_queue_work(system_bh_wq, &oct_priv->droq_bh_work);
if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED)
unregister_netdev(netdev);
@@ -1770,7 +1770,7 @@ static int liquidio_open(struct net_device *netdev)
int ret = 0;
if (oct->props[lio->ifidx].napi_enabled == 0) {
- tasklet_disable(&oct_priv->droq_tasklet);
+ disable_work_sync(&oct_priv->droq_bh_work);
list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
napi_enable(napi);
@@ -1896,7 +1896,7 @@ static int liquidio_stop(struct net_device *netdev)
if (OCTEON_CN23XX_PF(oct))
oct->droq[0]->ops.poll_mode = 0;
- tasklet_enable(&oct_priv->droq_tasklet);
+ enable_and_queue_work(system_bh_wq, &oct_priv->droq_bh_work);
}
dev_info(&oct->pci_dev->dev, "%s interface is stopped\n", netdev->name);
@@ -4204,9 +4204,9 @@ static int octeon_device_init(struct octeon_device *octeon_dev)
}
}
- /* Initialize the tasklet that handles output queue packet processing.*/
- dev_dbg(&octeon_dev->pci_dev->dev, "Initializing droq tasklet\n");
- tasklet_setup(&oct_priv->droq_tasklet, octeon_droq_bh);
+ /* Initialize the bh work that handles output queue packet processing.*/
+ dev_dbg(&octeon_dev->pci_dev->dev, "Initializing droq bh work\n");
+ INIT_WORK(&oct_priv->droq_bh_work, octeon_droq_bh);
/* Setup the interrupt handler and record the INT SUM register address
*/
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
index 62c2eadc33e3..04117625f388 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
@@ -87,7 +87,7 @@ static int lio_wait_for_oq_pkts(struct octeon_device *oct)
}
if (pkt_cnt > 0) {
pending_pkts += pkt_cnt;
- tasklet_schedule(&oct_priv->droq_tasklet);
+ queue_work(system_bh_wq, &oct_priv->droq_bh_work);
}
pkt_cnt = 0;
schedule_timeout_uninterruptible(1);
@@ -584,7 +584,7 @@ static void octeon_destroy_resources(struct octeon_device *oct)
break;
}
- tasklet_kill(&oct_priv->droq_tasklet);
+ cancel_work_sync(&oct_priv->droq_bh_work);
}
/**
@@ -687,7 +687,7 @@ static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx)
list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
netif_napi_del(napi);
- tasklet_enable(&oct_priv->droq_tasklet);
+ enable_and_queue_work(system_bh_wq, &oct_priv->droq_bh_work);
if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED)
unregister_netdev(netdev);
@@ -911,7 +911,7 @@ static int liquidio_open(struct net_device *netdev)
int ret = 0;
if (!oct->props[lio->ifidx].napi_enabled) {
- tasklet_disable(&oct_priv->droq_tasklet);
+ disable_work_sync(&oct_priv->droq_bh_work);
list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list)
napi_enable(napi);
@@ -986,7 +986,7 @@ static int liquidio_stop(struct net_device *netdev)
oct->droq[0]->ops.poll_mode = 0;
- tasklet_enable(&oct_priv->droq_tasklet);
+ enable_and_queue_work(system_bh_wq, &oct_priv->droq_bh_work);
}
cancel_delayed_work_sync(&lio->stats_wk.work);
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c
index eef12fdd246d..4e5f8bbc891b 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c
@@ -96,7 +96,7 @@ u32 octeon_droq_check_hw_for_pkts(struct octeon_droq *droq)
last_count = pkt_count - droq->pkt_count;
droq->pkt_count = pkt_count;
- /* we shall write to cnts at napi irq enable or end of droq tasklet */
+ /* we shall write to cnts at napi irq enable or end of droq bh_work */
if (last_count)
atomic_add(last_count, &droq->pkts_pending);
@@ -764,7 +764,7 @@ octeon_droq_process_packets(struct octeon_device *oct,
(u16)rdisp->rinfo->recv_pkt->rh.r.subcode));
}
- /* If there are packets pending. schedule tasklet again */
+ /* If there are packets pending. schedule bh_work again */
if (atomic_read(&droq->pkts_pending))
return 1;
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_main.h b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
index 5b4cb725f60f..a8f2a0a7b08e 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_main.h
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_main.h
@@ -24,6 +24,7 @@
#define _OCTEON_MAIN_H_
#include <linux/sched/signal.h>
+#include <linux/workqueue.h>
#if BITS_PER_LONG == 32
#define CVM_CAST64(v) ((long long)(v))
@@ -36,8 +37,7 @@
#define DRV_NAME "LiquidIO"
struct octeon_device_priv {
- /** Tasklet structures for this device. */
- struct tasklet_struct droq_tasklet;
+ struct work_struct droq_bh_work;
unsigned long napi_mask;
struct octeon_device *dev;
};
--
2.34.1
next prev parent reply other threads:[~2024-06-21 5:05 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240621050525.3720069-1-allen.lkml@gmail.com>
2024-06-21 5:05 ` [PATCH 01/15] net: alteon: Convert tasklet API to new bottom half workqueue mechanism Allen Pais
2024-06-21 5:05 ` [PATCH 02/15] net: xgbe: " Allen Pais
2024-06-21 5:05 ` [PATCH 03/15] net: cnic: " Allen Pais
2024-06-21 5:05 ` [PATCH 04/15] net: macb: " Allen Pais
2024-06-21 5:05 ` Allen Pais [this message]
2024-06-21 11:45 ` [PATCH 05/15] net: cavium/liquidio: " Sunil Kovvuri Goutham
2024-06-21 5:05 ` [PATCH 06/15] net: octeon: " Allen Pais
2024-06-21 5:05 ` [PATCH 07/15] net: thunderx: " Allen Pais
2024-06-21 11:49 ` Sunil Kovvuri Goutham
2024-06-21 5:05 ` [PATCH 08/15] net: chelsio: " Allen Pais
2024-06-21 5:05 ` [PATCH 09/15] net: sundance: " Allen Pais
2024-06-21 5:05 ` [PATCH 10/15] net: hinic: " Allen Pais
2024-06-25 10:47 ` Paolo Abeni
2024-06-21 5:05 ` [PATCH 11/15] net: ehea: " Allen Pais
2024-06-21 5:05 ` [PATCH 12/15] net: ibmvnic: " Allen Pais
2024-06-21 5:05 ` [PATCH 13/15] net: jme: " Allen Pais
2024-06-25 10:38 ` Paolo Abeni
2024-07-01 10:13 ` Allen
2024-07-01 14:23 ` Paolo Abeni
2024-07-15 17:50 ` Allen
2024-07-16 8:47 ` Paolo Abeni
2024-07-17 16:55 ` Allen
2024-06-21 5:05 ` [PATCH 14/15] net: marvell: " Allen Pais
2024-06-21 5:05 ` [PATCH 15/15] net: mtk-wed: " Allen Pais
2024-06-21 18:39 [PATCH 00/15] ethernet: Convert from tasklet to BH workqueue Allen Pais
2024-06-21 18:39 ` [PATCH 05/15] net: cavium/liquidio: Convert tasklet API to new bottom half workqueue mechanism Allen Pais
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240621050525.3720069-6-allen.lkml@gmail.com \
--to=allen.lkml@gmail.com \
--cc=Mark-MC.Lee@mediatek.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=aneesh.kumar@kernel.org \
--cc=angelogioacchino.delregno@collabora.com \
--cc=borisp@nvidia.com \
--cc=bryan.whitehead@microchip.com \
--cc=cai.huoqing@linux.dev \
--cc=christophe.leroy@csgroup.eu \
--cc=cooldavid@cooldavid.org \
--cc=davem@davemloft.net \
--cc=dougmill@linux.ibm.com \
--cc=edumazet@google.com \
--cc=jes@trained-monkey.org \
--cc=kda@linux-powerpc.org \
--cc=kuba@kernel.org \
--cc=linux-acenic@sunsite.dk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-net-drivers@amd.com \
--cc=linux-rdma@vger.kernel.org \
--cc=lorenzo@kernel.org \
--cc=louis.peens@corigine.com \
--cc=marcin.s.wojtas@gmail.com \
--cc=matthias.bgg@gmail.com \
--cc=mlindner@marvell.com \
--cc=naveen.n.rao@linux.ibm.com \
--cc=nbd@nbd.name \
--cc=netdev@vger.kernel.org \
--cc=nnac123@linux.ibm.com \
--cc=npiggin@gmail.com \
--cc=pabeni@redhat.com \
--cc=richardcochran@gmail.com \
--cc=sean.wang@mediatek.com \
--cc=stephen@networkplumber.org \
--cc=tlfalcon@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).