Skip to content

Commit

Permalink
Merge branch 'ethernet-convert-tasklets-to-use-new-tasklet_setup-API'
Browse files Browse the repository at this point in the history
Allen Pais says:

====================
ethernet: convert tasklets to use new tasklet_setup API

Commit 12cc923 ("tasklet: Introduce new initialization API")'
introduced a new tasklet initialization API. This series converts
all the crypto modules to use the new tasklet_setup() API

This series is based on v5.9-rc5

v3:
  fix subject prefix
  use backpointer instead of fragile priv to netdev.

v2:
  fix kdoc reported by Jakub Kicinski.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Sep 14, 2020
2 parents e059c6f + 7961fb1 commit 26cdb8f
Show file tree
Hide file tree
Showing 41 changed files with 183 additions and 223 deletions.
9 changes: 5 additions & 4 deletions drivers/net/ethernet/alteon/acenic.c
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,7 @@ static int acenic_probe_one(struct pci_dev *pdev,
SET_NETDEV_DEV(dev, &pdev->dev);

ap = netdev_priv(dev);
ap->ndev = dev;
ap->pdev = pdev;
ap->name = pci_name(pdev);

Expand Down Expand Up @@ -1562,10 +1563,10 @@ static void ace_watchdog(struct net_device *data, unsigned int txqueue)
}


static void ace_tasklet(unsigned long arg)
static void ace_tasklet(struct tasklet_struct *t)
{
struct net_device *dev = (struct net_device *) arg;
struct ace_private *ap = netdev_priv(dev);
struct ace_private *ap = from_tasklet(ap, t, ace_tasklet);
struct net_device *dev = ap->ndev;
int cur_size;

cur_size = atomic_read(&ap->cur_rx_bufs);
Expand Down Expand Up @@ -2269,7 +2270,7 @@ static int ace_open(struct net_device *dev)
/*
* Setup the bottom half rx ring refill handler
*/
tasklet_init(&ap->ace_tasklet, ace_tasklet, (unsigned long)dev);
tasklet_setup(&ap->ace_tasklet, ace_tasklet);
return 0;
}

Expand Down
3 changes: 2 additions & 1 deletion drivers/net/ethernet/alteon/acenic.h
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,7 @@ struct ace_skb
*/
struct ace_private
{
struct net_device *ndev; /* backpointer */
struct ace_info *info;
struct ace_regs __iomem *regs; /* register base */
struct ace_skb *skb;
Expand Down Expand Up @@ -776,7 +777,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(unsigned long dev);
static void ace_tasklet(struct tasklet_struct *t);
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
19 changes: 9 additions & 10 deletions drivers/net/ethernet/amd/xgbe/xgbe-drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,9 +403,9 @@ static bool xgbe_ecc_ded(struct xgbe_prv_data *pdata, unsigned long *period,
return false;
}

static void xgbe_ecc_isr_task(unsigned long data)
static void xgbe_ecc_isr_task(struct tasklet_struct *t)
{
struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data;
struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_ecc);
unsigned int ecc_isr;
bool stop = false;

Expand Down Expand Up @@ -468,14 +468,14 @@ static irqreturn_t xgbe_ecc_isr(int irq, void *data)
if (pdata->isr_as_tasklet)
tasklet_schedule(&pdata->tasklet_ecc);
else
xgbe_ecc_isr_task((unsigned long)pdata);
xgbe_ecc_isr_task(&pdata->tasklet_ecc);

return IRQ_HANDLED;
}

static void xgbe_isr_task(unsigned long data)
static void xgbe_isr_task(struct tasklet_struct *t)
{
struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data;
struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_dev);
struct xgbe_hw_if *hw_if = &pdata->hw_if;
struct xgbe_channel *channel;
unsigned int dma_isr, dma_ch_isr;
Expand Down Expand Up @@ -582,7 +582,7 @@ static void xgbe_isr_task(unsigned long data)

/* If there is not a separate ECC irq, handle it here */
if (pdata->vdata->ecc_support && (pdata->dev_irq == pdata->ecc_irq))
xgbe_ecc_isr_task((unsigned long)pdata);
xgbe_ecc_isr_task(&pdata->tasklet_ecc);

/* If there is not a separate I2C irq, handle it here */
if (pdata->vdata->i2c_support && (pdata->dev_irq == pdata->i2c_irq))
Expand All @@ -607,7 +607,7 @@ static irqreturn_t xgbe_isr(int irq, void *data)
if (pdata->isr_as_tasklet)
tasklet_schedule(&pdata->tasklet_dev);
else
xgbe_isr_task((unsigned long)pdata);
xgbe_isr_task(&pdata->tasklet_dev);

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -991,9 +991,8 @@ static int xgbe_request_irqs(struct xgbe_prv_data *pdata)
unsigned int i;
int ret;

tasklet_init(&pdata->tasklet_dev, xgbe_isr_task, (unsigned long)pdata);
tasklet_init(&pdata->tasklet_ecc, xgbe_ecc_isr_task,
(unsigned long)pdata);
tasklet_setup(&pdata->tasklet_dev, xgbe_isr_task);
tasklet_setup(&pdata->tasklet_ecc, xgbe_ecc_isr_task);

ret = devm_request_irq(pdata->dev, pdata->dev_irq, xgbe_isr, 0,
netdev_name(netdev), pdata);
Expand Down
11 changes: 5 additions & 6 deletions drivers/net/ethernet/amd/xgbe/xgbe-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -274,9 +274,9 @@ static void xgbe_i2c_clear_isr_interrupts(struct xgbe_prv_data *pdata,
XI2C_IOREAD(pdata, IC_CLR_STOP_DET);
}

static void xgbe_i2c_isr_task(unsigned long data)
static void xgbe_i2c_isr_task(struct tasklet_struct *t)
{
struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data;
struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_i2c);
struct xgbe_i2c_op_state *state = &pdata->i2c.op_state;
unsigned int isr;

Expand Down Expand Up @@ -324,7 +324,7 @@ static irqreturn_t xgbe_i2c_isr(int irq, void *data)
if (pdata->isr_as_tasklet)
tasklet_schedule(&pdata->tasklet_i2c);
else
xgbe_i2c_isr_task((unsigned long)pdata);
xgbe_i2c_isr_task(&pdata->tasklet_i2c);

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -369,7 +369,7 @@ static void xgbe_i2c_set_target(struct xgbe_prv_data *pdata, unsigned int addr)

static irqreturn_t xgbe_i2c_combined_isr(struct xgbe_prv_data *pdata)
{
xgbe_i2c_isr_task((unsigned long)pdata);
xgbe_i2c_isr_task(&pdata->tasklet_i2c);

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -462,8 +462,7 @@ static int xgbe_i2c_start(struct xgbe_prv_data *pdata)

/* If we have a separate I2C irq, enable it */
if (pdata->dev_irq != pdata->i2c_irq) {
tasklet_init(&pdata->tasklet_i2c, xgbe_i2c_isr_task,
(unsigned long)pdata);
tasklet_setup(&pdata->tasklet_i2c, xgbe_i2c_isr_task);

ret = devm_request_irq(pdata->dev, pdata->i2c_irq,
xgbe_i2c_isr, 0, pdata->i2c_name,
Expand Down
11 changes: 5 additions & 6 deletions drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -688,9 +688,9 @@ static void xgbe_an73_isr(struct xgbe_prv_data *pdata)
}
}

static void xgbe_an_isr_task(unsigned long data)
static void xgbe_an_isr_task(struct tasklet_struct *t)
{
struct xgbe_prv_data *pdata = (struct xgbe_prv_data *)data;
struct xgbe_prv_data *pdata = from_tasklet(pdata, t, tasklet_an);

netif_dbg(pdata, intr, pdata->netdev, "AN interrupt received\n");

Expand All @@ -715,14 +715,14 @@ static irqreturn_t xgbe_an_isr(int irq, void *data)
if (pdata->isr_as_tasklet)
tasklet_schedule(&pdata->tasklet_an);
else
xgbe_an_isr_task((unsigned long)pdata);
xgbe_an_isr_task(&pdata->tasklet_an);

return IRQ_HANDLED;
}

static irqreturn_t xgbe_an_combined_isr(struct xgbe_prv_data *pdata)
{
xgbe_an_isr_task((unsigned long)pdata);
xgbe_an_isr_task(&pdata->tasklet_an);

return IRQ_HANDLED;
}
Expand Down Expand Up @@ -1414,8 +1414,7 @@ static int xgbe_phy_start(struct xgbe_prv_data *pdata)

/* If we have a separate AN irq, enable it */
if (pdata->dev_irq != pdata->an_irq) {
tasklet_init(&pdata->tasklet_an, xgbe_an_isr_task,
(unsigned long)pdata);
tasklet_setup(&pdata->tasklet_an, xgbe_an_isr_task);

ret = devm_request_irq(pdata->dev, pdata->an_irq,
xgbe_an_isr, 0, pdata->an_name,
Expand Down
18 changes: 8 additions & 10 deletions drivers/net/ethernet/broadcom/cnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -3009,10 +3009,10 @@ static int cnic_service_bnx2(void *data, void *status_blk)
return cnic_service_bnx2_queues(dev);
}

static void cnic_service_bnx2_msix(unsigned long data)
static void cnic_service_bnx2_msix(struct tasklet_struct *t)
{
struct cnic_dev *dev = (struct cnic_dev *) data;
struct cnic_local *cp = dev->cnic_priv;
struct cnic_local *cp = from_tasklet(cp, t, cnic_irq_task);
struct cnic_dev *dev = cp->dev;

cp->last_status_idx = cnic_service_bnx2_queues(dev);

Expand Down Expand Up @@ -3134,10 +3134,10 @@ static u32 cnic_service_bnx2x_kcq(struct cnic_dev *dev, struct kcq_info *info)
return last_status;
}

static void cnic_service_bnx2x_bh(unsigned long data)
static void cnic_service_bnx2x_bh(struct tasklet_struct *t)
{
struct cnic_dev *dev = (struct cnic_dev *) data;
struct cnic_local *cp = dev->cnic_priv;
struct cnic_local *cp = from_tasklet(cp, t, cnic_irq_task);
struct cnic_dev *dev = cp->dev;
struct bnx2x *bp = netdev_priv(dev->netdev);
u32 status_idx, new_status_idx;

Expand Down Expand Up @@ -4458,8 +4458,7 @@ static int cnic_init_bnx2_irq(struct cnic_dev *dev)
CNIC_WR(dev, base + BNX2_HC_CMD_TICKS_OFF, (64 << 16) | 220);

cp->last_status_idx = cp->status_blk.bnx2->status_idx;
tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2_msix,
(unsigned long) dev);
tasklet_setup(&cp->cnic_irq_task, cnic_service_bnx2_msix);
err = cnic_request_irq(dev);
if (err)
return err;
Expand Down Expand Up @@ -4868,8 +4867,7 @@ static int cnic_init_bnx2x_irq(struct cnic_dev *dev)
struct cnic_eth_dev *ethdev = cp->ethdev;
int err = 0;

tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2x_bh,
(unsigned long) dev);
tasklet_setup(&cp->cnic_irq_task, cnic_service_bnx2x_bh);
if (ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX)
err = cnic_request_irq(dev);

Expand Down
7 changes: 3 additions & 4 deletions drivers/net/ethernet/cadence/macb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1466,9 +1466,9 @@ static int macb_poll(struct napi_struct *napi, int budget)
return work_done;
}

static void macb_hresp_error_task(unsigned long data)
static void macb_hresp_error_task(struct tasklet_struct *t)
{
struct macb *bp = (struct macb *)data;
struct macb *bp = from_tasklet(bp, t, hresp_err_tasklet);
struct net_device *dev = bp->dev;
struct macb_queue *queue;
unsigned int q;
Expand Down Expand Up @@ -4560,8 +4560,7 @@ static int macb_probe(struct platform_device *pdev)
goto err_out_unregister_mdio;
}

tasklet_init(&bp->hresp_err_tasklet, macb_hresp_error_task,
(unsigned long)bp);
tasklet_setup(&bp->hresp_err_tasklet, macb_hresp_error_task);

netdev_info(dev, "Cadence %s rev 0x%08x at 0x%08lx irq %d (%pM)\n",
macb_is_gem(bp) ? "GEM" : "MACB", macb_readl(bp, MID),
Expand Down
12 changes: 6 additions & 6 deletions drivers/net/ethernet/cavium/liquidio/lio_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,13 +161,13 @@ 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(unsigned long pdev)
static void octeon_droq_bh(struct tasklet_struct *t)
{
int q_no;
int reschedule = 0;
struct octeon_device *oct = (struct octeon_device *)pdev;
struct octeon_device_priv *oct_priv =
(struct octeon_device_priv *)oct->priv;
struct octeon_device_priv *oct_priv = from_tasklet(oct_priv, t,
droq_tasklet);
struct octeon_device *oct = oct_priv->dev;

for (q_no = 0; q_no < MAX_OCTEON_OUTPUT_QUEUES(oct); q_no++) {
if (!(oct->io_qmask.oq & BIT_ULL(q_no)))
Expand Down Expand Up @@ -4193,8 +4193,7 @@ 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_init(&oct_priv->droq_tasklet, octeon_droq_bh,
(unsigned long)octeon_dev);
tasklet_setup(&oct_priv->droq_tasklet, octeon_droq_bh);

/* Setup the interrupt handler and record the INT SUM register address
*/
Expand Down Expand Up @@ -4298,6 +4297,7 @@ static int octeon_device_init(struct octeon_device *octeon_dev)
complete(&handshake[octeon_dev->octeon_id].init);

atomic_set(&octeon_dev->status, OCT_DEV_HOST_OK);
oct_priv->dev = octeon_dev;

return 0;
}
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ethernet/cavium/liquidio/octeon_main.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ struct octeon_device_priv {
/** Tasklet structures for this device. */
struct tasklet_struct droq_tasklet;
unsigned long napi_mask;
struct octeon_device *dev;
};

/** This structure is used by NIC driver to store information required
Expand Down
8 changes: 4 additions & 4 deletions drivers/net/ethernet/cavium/octeon/octeon_mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,9 +315,9 @@ static void octeon_mgmt_clean_tx_buffers(struct octeon_mgmt *p)
netif_wake_queue(p->netdev);
}

static void octeon_mgmt_clean_tx_tasklet(unsigned long arg)
static void octeon_mgmt_clean_tx_tasklet(struct tasklet_struct *t)
{
struct octeon_mgmt *p = (struct octeon_mgmt *)arg;
struct octeon_mgmt *p = from_tasklet(p, t, tx_clean_tasklet);
octeon_mgmt_clean_tx_buffers(p);
octeon_mgmt_enable_tx_irq(p);
}
Expand Down Expand Up @@ -1489,8 +1489,8 @@ static int octeon_mgmt_probe(struct platform_device *pdev)

skb_queue_head_init(&p->tx_list);
skb_queue_head_init(&p->rx_list);
tasklet_init(&p->tx_clean_tasklet,
octeon_mgmt_clean_tx_tasklet, (unsigned long)p);
tasklet_setup(&p->tx_clean_tasklet,
octeon_mgmt_clean_tx_tasklet);

netdev->priv_flags |= IFF_UNICAST_FLT;

Expand Down
10 changes: 4 additions & 6 deletions drivers/net/ethernet/cavium/thunder/nicvf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -985,9 +985,9 @@ static int nicvf_poll(struct napi_struct *napi, int budget)
*
* As of now only CQ errors are handled
*/
static void nicvf_handle_qs_err(unsigned long data)
static void nicvf_handle_qs_err(struct tasklet_struct *t)
{
struct nicvf *nic = (struct nicvf *)data;
struct nicvf *nic = from_tasklet(nic, t, qs_err_task);
struct queue_set *qs = nic->qs;
int qidx;
u64 status;
Expand Down Expand Up @@ -1493,12 +1493,10 @@ int nicvf_open(struct net_device *netdev)
}

/* Init tasklet for handling Qset err interrupt */
tasklet_init(&nic->qs_err_task, nicvf_handle_qs_err,
(unsigned long)nic);
tasklet_setup(&nic->qs_err_task, nicvf_handle_qs_err);

/* Init RBDR tasklet which will refill RBDR */
tasklet_init(&nic->rbdr_task, nicvf_rbdr_task,
(unsigned long)nic);
tasklet_setup(&nic->rbdr_task, nicvf_rbdr_task);
INIT_DELAYED_WORK(&nic->rbdr_work, nicvf_rbdr_work);

/* Configure CPI alorithm */
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/ethernet/cavium/thunder/nicvf_queues.c
Original file line number Diff line number Diff line change
Expand Up @@ -460,9 +460,9 @@ void nicvf_rbdr_work(struct work_struct *work)
}

/* In Softirq context, alloc rcv buffers in atomic mode */
void nicvf_rbdr_task(unsigned long data)
void nicvf_rbdr_task(struct tasklet_struct *t)
{
struct nicvf *nic = (struct nicvf *)data;
struct nicvf *nic = from_tasklet(nic, t, rbdr_task);

nicvf_refill_rbdr(nic, GFP_ATOMIC);
if (nic->rb_alloc_fail) {
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/ethernet/cavium/thunder/nicvf_queues.h
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ void nicvf_xdp_sq_doorbell(struct nicvf *nic, struct snd_queue *sq, int sq_num);

struct sk_buff *nicvf_get_rcv_skb(struct nicvf *nic,
struct cqe_rx_t *cqe_rx, bool xdp);
void nicvf_rbdr_task(unsigned long data);
void nicvf_rbdr_task(struct tasklet_struct *t);
void nicvf_rbdr_work(struct work_struct *work);

void nicvf_enable_intr(struct nicvf *nic, int int_type, int q_idx);
Expand Down
Loading

0 comments on commit 26cdb8f

Please sign in to comment.