Skip to content

Commit

Permalink
net: alteon: Convert tasklet API to new bottom half workqueue mechanism
Browse files Browse the repository at this point in the history
Migrate tasklet APIs to the new bottom half workqueue mechanism. It
replaces all occurrences of tasklet usage with the appropriate workqueue
APIs throughout the alteon driver. This transition ensures compatibility
with the latest design and enhances performance.

Signed-off-by: Allen Pais <allen.lkml@gmail.com>
Link: https://patch.msgid.link/20240730183403.4176544-2-allen.lkml@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Allen Pais authored and Jakub Kicinski committed Aug 1, 2024
1 parent 9bb3ec1 commit 20a3bcf
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 17 deletions.
26 changes: 13 additions & 13 deletions drivers/net/ethernet/alteon/acenic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1560,9 +1560,9 @@ static void ace_watchdog(struct net_device *data, unsigned int txqueue)
}


static void ace_tasklet(struct tasklet_struct *t)
static void ace_bh_work(struct work_struct *work)
{
struct ace_private *ap = from_tasklet(ap, t, ace_tasklet);
struct ace_private *ap = from_work(ap, work, ace_bh_work);
struct net_device *dev = ap->ndev;
int cur_size;

Expand Down Expand Up @@ -1595,7 +1595,7 @@ static void ace_tasklet(struct tasklet_struct *t)
#endif
ace_load_jumbo_rx_ring(dev, RX_JUMBO_SIZE - cur_size);
}
ap->tasklet_pending = 0;
ap->bh_work_pending = 0;
}


Expand All @@ -1617,7 +1617,7 @@ static void ace_dump_trace(struct ace_private *ap)
*
* Loading rings is safe without holding the spin lock since this is
* done only before the device is enabled, thus no interrupts are
* generated and by the interrupt handler/tasklet handler.
* generated and by the interrupt handler/bh handler.
*/
static void ace_load_std_rx_ring(struct net_device *dev, int nr_bufs)
{
Expand Down Expand Up @@ -2160,7 +2160,7 @@ static irqreturn_t ace_interrupt(int irq, void *dev_id)
*/
if (netif_running(dev)) {
int cur_size;
int run_tasklet = 0;
int run_bh_work = 0;

cur_size = atomic_read(&ap->cur_rx_bufs);
if (cur_size < RX_LOW_STD_THRES) {
Expand All @@ -2172,7 +2172,7 @@ static irqreturn_t ace_interrupt(int irq, void *dev_id)
ace_load_std_rx_ring(dev,
RX_RING_SIZE - cur_size);
} else
run_tasklet = 1;
run_bh_work = 1;
}

if (!ACE_IS_TIGON_I(ap)) {
Expand All @@ -2188,7 +2188,7 @@ static irqreturn_t ace_interrupt(int irq, void *dev_id)
ace_load_mini_rx_ring(dev,
RX_MINI_SIZE - cur_size);
} else
run_tasklet = 1;
run_bh_work = 1;
}
}

Expand All @@ -2205,12 +2205,12 @@ static irqreturn_t ace_interrupt(int irq, void *dev_id)
ace_load_jumbo_rx_ring(dev,
RX_JUMBO_SIZE - cur_size);
} else
run_tasklet = 1;
run_bh_work = 1;
}
}
if (run_tasklet && !ap->tasklet_pending) {
ap->tasklet_pending = 1;
tasklet_schedule(&ap->ace_tasklet);
if (run_bh_work && !ap->bh_work_pending) {
ap->bh_work_pending = 1;
queue_work(system_bh_wq, &ap->ace_bh_work);
}
}

Expand Down Expand Up @@ -2267,7 +2267,7 @@ static int ace_open(struct net_device *dev)
/*
* Setup the bottom half rx ring refill handler
*/
tasklet_setup(&ap->ace_tasklet, ace_tasklet);
INIT_WORK(&ap->ace_bh_work, ace_bh_work);
return 0;
}

Expand Down Expand Up @@ -2301,7 +2301,7 @@ static int ace_close(struct net_device *dev)
cmd.idx = 0;
ace_issue_cmd(regs, &cmd);

tasklet_kill(&ap->ace_tasklet);
cancel_work_sync(&ap->ace_bh_work);

/*
* Make sure one CPU is not processing packets while
Expand Down
8 changes: 4 additions & 4 deletions drivers/net/ethernet/alteon/acenic.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#ifndef _ACENIC_H_
#define _ACENIC_H_
#include <linux/interrupt.h>

#include <linux/workqueue.h>

/*
* Generate TX index update each time, when TX ring is closed.
Expand Down Expand Up @@ -667,8 +667,8 @@ struct ace_private
struct rx_desc *rx_mini_ring;
struct rx_desc *rx_return_ring;

int tasklet_pending, jumbo;
struct tasklet_struct ace_tasklet;
int bh_work_pending, jumbo;
struct work_struct ace_bh_work;

struct event *evt_ring;

Expand Down Expand Up @@ -776,7 +776,7 @@ static int ace_open(struct net_device *dev);
static netdev_tx_t ace_start_xmit(struct sk_buff *skb,
struct net_device *dev);
static int ace_close(struct net_device *dev);
static void ace_tasklet(struct tasklet_struct *t);
static void ace_bh_work(struct work_struct *work);
static void ace_dump_trace(struct ace_private *ap);
static void ace_set_multicast_list(struct net_device *dev);
static int ace_change_mtu(struct net_device *dev, int new_mtu);
Expand Down

0 comments on commit 20a3bcf

Please sign in to comment.