From 53230051509973d56bee96909948c549360a42bd Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 13 Mar 2019 20:17:45 +0100 Subject: [PATCH] mt76: move tx tasklet to struct mt76_dev Allows it to be scheduled from core code Signed-off-by: Felix Fietkau --- mt76.h | 3 ++- mt7603/core.c | 2 +- mt7603/dma.c | 4 ++-- mt7603/mac.c | 6 +++--- mt7603/mt7603.h | 1 - mt76x0/usb.c | 2 +- mt76x02_mmio.c | 15 ++++++++------- mt76x2/usb.c | 2 +- usb.c | 6 +++--- 9 files changed, 21 insertions(+), 20 deletions(-) diff --git a/mt76.h b/mt76.h index 0a1efed1..ab184705 100644 --- a/mt76.h +++ b/mt76.h @@ -396,7 +396,6 @@ struct mt76_usb { u8 data[32]; struct tasklet_struct rx_tasklet; - struct tasklet_struct tx_tasklet; struct delayed_work stat_work; u8 out_ep[__MT_EP_OUT_MAX]; @@ -458,6 +457,8 @@ struct mt76_dev { const struct mt76_queue_ops *queue_ops; int tx_dma_idx[4]; + struct tasklet_struct tx_tasklet; + wait_queue_head_t tx_wait; struct sk_buff_head status_list; diff --git a/mt7603/core.c b/mt7603/core.c index e32a16f2..2004eb93 100644 --- a/mt7603/core.c +++ b/mt7603/core.c @@ -35,7 +35,7 @@ irqreturn_t mt7603_irq_handler(int irq, void *dev_instance) if (intr & MT_INT_TX_DONE_ALL) { mt7603_irq_disable(dev, MT_INT_TX_DONE_ALL); - tasklet_schedule(&dev->tx_tasklet); + tasklet_schedule(&dev->mt76.tx_tasklet); } if (intr & MT_INT_RX_DONE(0)) { diff --git a/mt7603/dma.c b/mt7603/dma.c index 37cedfce..f7e3566c 100644 --- a/mt7603/dma.c +++ b/mt7603/dma.c @@ -164,7 +164,7 @@ int mt7603_dma_init(struct mt7603_dev *dev) init_waitqueue_head(&dev->mt76.mmio.mcu.wait); skb_queue_head_init(&dev->mt76.mmio.mcu.res_q); - tasklet_init(&dev->tx_tasklet, mt7603_tx_tasklet, (unsigned long)dev); + tasklet_init(&dev->mt76.tx_tasklet, mt7603_tx_tasklet, (unsigned long)dev); mt76_clear(dev, MT_WPDMA_GLO_CFG, MT_WPDMA_GLO_CFG_TX_DMA_EN | @@ -224,6 +224,6 @@ void mt7603_dma_cleanup(struct mt7603_dev *dev) MT_WPDMA_GLO_CFG_RX_DMA_EN | MT_WPDMA_GLO_CFG_TX_WRITEBACK_DONE); - tasklet_kill(&dev->tx_tasklet); + tasklet_kill(&dev->mt76.tx_tasklet); mt76_dma_cleanup(&dev->mt76); } diff --git a/mt7603/mac.c b/mt7603/mac.c index 35935bb5..51a47422 100644 --- a/mt7603/mac.c +++ b/mt7603/mac.c @@ -1302,7 +1302,7 @@ static void mt7603_mac_watchdog_reset(struct mt7603_dev *dev) /* lock/unlock all queues to ensure that no tx is pending */ mt76_txq_schedule_all(&dev->mt76); - tasklet_disable(&dev->tx_tasklet); + tasklet_disable(&dev->mt76.tx_tasklet); tasklet_disable(&dev->pre_tbtt_tasklet); napi_disable(&dev->mt76.napi[0]); napi_disable(&dev->mt76.napi[1]); @@ -1349,8 +1349,8 @@ skip_dma_reset: clear_bit(MT76_RESET, &dev->mt76.state); mutex_unlock(&dev->mt76.mutex); - tasklet_enable(&dev->tx_tasklet); - tasklet_schedule(&dev->tx_tasklet); + tasklet_enable(&dev->mt76.tx_tasklet); + tasklet_schedule(&dev->mt76.tx_tasklet); tasklet_enable(&dev->pre_tbtt_tasklet); mt7603_beacon_set_timer(dev, -1, beacon_int); diff --git a/mt7603/mt7603.h b/mt7603/mt7603.h index 333b2097..90818043 100644 --- a/mt7603/mt7603.h +++ b/mt7603/mt7603.h @@ -146,7 +146,6 @@ struct mt7603_dev { unsigned int reset_cause[__RESET_CAUSE_MAX]; struct delayed_work mac_work; - struct tasklet_struct tx_tasklet; struct tasklet_struct pre_tbtt_tasklet; }; diff --git a/mt76x0/usb.c b/mt76x0/usb.c index 91718647..ff887454 100644 --- a/mt76x0/usb.c +++ b/mt76x0/usb.c @@ -326,7 +326,7 @@ static int __maybe_unused mt76x0_resume(struct usb_interface *usb_intf) goto err; tasklet_enable(&usb->rx_tasklet); - tasklet_enable(&usb->tx_tasklet); + tasklet_enable(&dev->mt76.tx_tasklet); ret = mt76x0u_init_hardware(dev); if (ret) diff --git a/mt76x02_mmio.c b/mt76x02_mmio.c index 6fc7a486..6cc307d9 100644 --- a/mt76x02_mmio.c +++ b/mt76x02_mmio.c @@ -229,7 +229,8 @@ int mt76x02_dma_init(struct mt76x02_dev *dev) if (!status_fifo) return -ENOMEM; - tasklet_init(&dev->tx_tasklet, mt76x02_tx_tasklet, (unsigned long) dev); + tasklet_init(&dev->mt76.tx_tasklet, mt76x02_tx_tasklet, + (unsigned long) dev); tasklet_init(&dev->pre_tbtt_tasklet, mt76x02_pre_tbtt_tasklet, (unsigned long)dev); @@ -300,7 +301,7 @@ irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance) if (intr & MT_INT_TX_DONE_ALL) { mt76x02_irq_disable(dev, MT_INT_TX_DONE_ALL); - tasklet_schedule(&dev->tx_tasklet); + tasklet_schedule(&dev->mt76.tx_tasklet); } if (intr & MT_INT_RX_DONE(0)) { @@ -326,7 +327,7 @@ irqreturn_t mt76x02_irq_handler(int irq, void *dev_instance) if (intr & MT_INT_TX_STAT) { mt76x02_mac_poll_tx_status(dev, true); - tasklet_schedule(&dev->tx_tasklet); + tasklet_schedule(&dev->mt76.tx_tasklet); } if (intr & MT_INT_GPTIMER) { @@ -356,7 +357,7 @@ static void mt76x02_dma_enable(struct mt76x02_dev *dev) void mt76x02_dma_cleanup(struct mt76x02_dev *dev) { - tasklet_kill(&dev->tx_tasklet); + tasklet_kill(&dev->mt76.tx_tasklet); mt76_dma_cleanup(&dev->mt76); } EXPORT_SYMBOL_GPL(mt76x02_dma_cleanup); @@ -478,7 +479,7 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev) set_bit(MT76_RESET, &dev->mt76.state); tasklet_disable(&dev->pre_tbtt_tasklet); - tasklet_disable(&dev->tx_tasklet); + tasklet_disable(&dev->mt76.tx_tasklet); for (i = 0; i < ARRAY_SIZE(dev->mt76.napi); i++) napi_disable(&dev->mt76.napi[i]); @@ -531,8 +532,8 @@ static void mt76x02_watchdog_reset(struct mt76x02_dev *dev) clear_bit(MT76_RESET, &dev->mt76.state); - tasklet_enable(&dev->tx_tasklet); - tasklet_schedule(&dev->tx_tasklet); + tasklet_enable(&dev->mt76.tx_tasklet); + tasklet_schedule(&dev->mt76.tx_tasklet); tasklet_enable(&dev->pre_tbtt_tasklet); diff --git a/mt76x2/usb.c b/mt76x2/usb.c index ddb6b2c4..76df7e56 100644 --- a/mt76x2/usb.c +++ b/mt76x2/usb.c @@ -118,7 +118,7 @@ static int __maybe_unused mt76x2u_resume(struct usb_interface *intf) goto err; tasklet_enable(&usb->rx_tasklet); - tasklet_enable(&usb->tx_tasklet); + tasklet_enable(&dev->mt76.tx_tasklet); err = mt76x2u_init_hardware(dev); if (err < 0) diff --git a/usb.c b/usb.c index 1d1f8ba9..72101b7e 100644 --- a/usb.c +++ b/usb.c @@ -713,7 +713,7 @@ static void mt76u_complete_tx(struct urb *urb) dev_err(dev->dev, "tx urb failed: %d\n", urb->status); buf->done = true; - tasklet_schedule(&dev->usb.tx_tasklet); + tasklet_schedule(&dev->tx_tasklet); } static int @@ -860,7 +860,7 @@ static void mt76u_stop_tx(struct mt76_dev *dev) void mt76u_stop_queues(struct mt76_dev *dev) { tasklet_disable(&dev->usb.rx_tasklet); - tasklet_disable(&dev->usb.tx_tasklet); + tasklet_disable(&dev->tx_tasklet); mt76u_stop_rx(dev); mt76u_stop_tx(dev); @@ -915,7 +915,7 @@ int mt76u_init(struct mt76_dev *dev, struct mt76_usb *usb = &dev->usb; tasklet_init(&usb->rx_tasklet, mt76u_rx_tasklet, (unsigned long)dev); - tasklet_init(&usb->tx_tasklet, mt76u_tx_tasklet, (unsigned long)dev); + tasklet_init(&dev->tx_tasklet, mt76u_tx_tasklet, (unsigned long)dev); INIT_DELAYED_WORK(&usb->stat_work, mt76u_tx_status_data); skb_queue_head_init(&dev->rx_skb[MT_RXQ_MAIN]);