Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup()
@ 2020-08-17 9:06 Allen Pais
2020-08-17 9:06 ` [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API Allen Pais
` (16 more replies)
0 siblings, 17 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais
From: Allen Pais <allen.lkml@gmail.com>
Commit 12cc923f1ccc ("tasklet: Introduce new initialization API")'
introduced a new tasklet initialization API. This series converts
all the wireless drivers to use the new tasklet_setup() API
Allen Pais (16):
wireless: ath5k: convert tasklets to use new tasklet_setup() API
wireless: ath9k: convert tasklets to use new tasklet_setup() API
wireless: ath: convert tasklets to use new tasklet_setup() API
wireless: ath11k: convert tasklets to use new tasklet_setup() API
wireless: atmel: convert tasklets to use new tasklet_setup() API
wireless: b43legacy: convert tasklets to use new tasklet_setup() API
wireless: brcm80211: convert tasklets to use new tasklet_setup() API
wireless: ipw2x00: convert tasklets to use new tasklet_setup() API
wireless: iwlegacy: convert tasklets to use new tasklet_setup() API
wireless: intersil: convert tasklets to use new tasklet_setup() API
wireless: marvell: convert tasklets to use new tasklet_setup() API
wireless: mediatek: convert tasklets to use new tasklet_setup() API
wireless: quantenna: convert tasklets to use new tasklet_setup() API
wireless: ralink: convert tasklets to use new tasklet_setup() API
wireless: realtek: convert tasklets to use new tasklet_setup() API
wireless: zydas: convert tasklets to use new tasklet_setup() API
drivers/net/wireless/ath/ath11k/ahb.c | 7 +++---
drivers/net/wireless/ath/ath5k/base.c | 24 +++++++++----------
drivers/net/wireless/ath/ath5k/rfkill.c | 7 +++---
drivers/net/wireless/ath/ath9k/ath9k.h | 4 ++--
drivers/net/wireless/ath/ath9k/beacon.c | 4 ++--
drivers/net/wireless/ath/ath9k/htc.h | 4 ++--
drivers/net/wireless/ath/ath9k/htc_drv_init.c | 6 ++---
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 8 +++----
drivers/net/wireless/ath/ath9k/init.c | 5 ++--
drivers/net/wireless/ath/ath9k/main.c | 4 ++--
drivers/net/wireless/ath/ath9k/wmi.c | 7 +++---
drivers/net/wireless/ath/ath9k/wmi.h | 2 +-
drivers/net/wireless/ath/carl9170/usb.c | 7 +++---
drivers/net/wireless/atmel/at76c50x-usb.c | 9 ++++---
.../net/wireless/broadcom/b43legacy/main.c | 8 +++----
drivers/net/wireless/broadcom/b43legacy/pio.c | 7 +++---
.../broadcom/brcm80211/brcmsmac/mac80211_if.c | 6 ++---
.../broadcom/brcm80211/brcmsmac/mac80211_if.h | 2 +-
drivers/net/wireless/intel/ipw2x00/ipw2100.c | 9 ++++---
drivers/net/wireless/intel/ipw2x00/ipw2200.c | 7 +++---
.../net/wireless/intel/iwlegacy/3945-mac.c | 8 +++----
.../net/wireless/intel/iwlegacy/4965-mac.c | 8 +++----
.../net/wireless/intersil/hostap/hostap_hw.c | 18 +++++++-------
drivers/net/wireless/intersil/orinoco/main.c | 7 +++---
drivers/net/wireless/intersil/p54/p54pci.c | 8 +++----
drivers/net/wireless/marvell/mwl8k.c | 16 ++++++-------
drivers/net/wireless/mediatek/mt76/mac80211.c | 2 +-
drivers/net/wireless/mediatek/mt76/mt76.h | 2 +-
.../wireless/mediatek/mt76/mt7603/beacon.c | 4 ++--
.../net/wireless/mediatek/mt76/mt7603/init.c | 3 +--
.../wireless/mediatek/mt76/mt7603/mt7603.h | 2 +-
.../net/wireless/mediatek/mt76/mt7615/mmio.c | 6 ++---
.../net/wireless/mediatek/mt76/mt76x02_dfs.c | 10 ++++----
.../net/wireless/mediatek/mt76/mt76x02_mmio.c | 14 +++++------
drivers/net/wireless/mediatek/mt76/tx.c | 4 ++--
drivers/net/wireless/mediatek/mt76/usb.c | 12 +++++-----
drivers/net/wireless/mediatek/mt7601u/dma.c | 12 +++++-----
.../quantenna/qtnfmac/pcie/pearl_pcie.c | 7 +++---
.../quantenna/qtnfmac/pcie/topaz_pcie.c | 7 +++---
.../net/wireless/ralink/rt2x00/rt2400pci.c | 14 ++++++-----
.../net/wireless/ralink/rt2x00/rt2500pci.c | 14 ++++++-----
.../net/wireless/ralink/rt2x00/rt2800mmio.c | 24 +++++++++++--------
.../net/wireless/ralink/rt2x00/rt2800mmio.h | 10 ++++----
drivers/net/wireless/ralink/rt2x00/rt2x00.h | 10 ++++----
.../net/wireless/ralink/rt2x00/rt2x00dev.c | 5 ++--
drivers/net/wireless/ralink/rt2x00/rt61pci.c | 20 +++++++++-------
drivers/net/wireless/realtek/rtlwifi/pci.c | 21 ++++++++--------
drivers/net/wireless/realtek/rtlwifi/usb.c | 9 ++++---
drivers/net/wireless/realtek/rtw88/main.c | 3 +--
drivers/net/wireless/realtek/rtw88/tx.c | 4 ++--
drivers/net/wireless/realtek/rtw88/tx.h | 2 +-
drivers/net/wireless/zydas/zd1211rw/zd_usb.c | 8 +++----
52 files changed, 208 insertions(+), 223 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-27 10:15 ` Kalle Valo
[not found] ` <20200827101540.6589BC433CB@smtp.codeaurora.org>
2020-08-17 9:06 ` [PATCH 02/16] wireless: ath9k: " Allen Pais
` (15 subsequent siblings)
16 siblings, 2 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/ath/ath5k/base.c | 24 ++++++++++++------------
drivers/net/wireless/ath/ath5k/rfkill.c | 7 +++----
2 files changed, 15 insertions(+), 16 deletions(-)
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c
index 65a4c142640d..2781dcd534a9 100644
--- a/drivers/net/wireless/ath/ath5k/base.c
+++ b/drivers/net/wireless/ath/ath5k/base.c
@@ -1536,12 +1536,12 @@ ath5k_set_current_imask(struct ath5k_hw *ah)
}
static void
-ath5k_tasklet_rx(unsigned long data)
+ath5k_tasklet_rx(struct tasklet_struct *t)
{
struct ath5k_rx_status rs = {};
struct sk_buff *skb, *next_skb;
dma_addr_t next_skb_addr;
- struct ath5k_hw *ah = (void *)data;
+ struct ath5k_hw *ah = from_tasklet(ah, t, rxtq);
struct ath_common *common = ath5k_hw_common(ah);
struct ath5k_buf *bf;
struct ath5k_desc *ds;
@@ -1784,10 +1784,10 @@ ath5k_tx_processq(struct ath5k_hw *ah, struct ath5k_txq *txq)
}
static void
-ath5k_tasklet_tx(unsigned long data)
+ath5k_tasklet_tx(struct tasklet_struct *t)
{
int i;
- struct ath5k_hw *ah = (void *)data;
+ struct ath5k_hw *ah = from_tasklet(ah, t, txtq);
for (i = 0; i < AR5K_NUM_TX_QUEUES; i++)
if (ah->txqs[i].setup && (ah->ah_txq_isr_txok_all & BIT(i)))
@@ -2176,9 +2176,9 @@ ath5k_beacon_config(struct ath5k_hw *ah)
spin_unlock_bh(&ah->block);
}
-static void ath5k_tasklet_beacon(unsigned long data)
+static void ath5k_tasklet_beacon(struct tasklet_struct *t)
{
- struct ath5k_hw *ah = (struct ath5k_hw *) data;
+ struct ath5k_hw *ah = from_tasklet(ah, t, beacontq);
/*
* Software beacon alert--time to send a beacon.
@@ -2447,9 +2447,9 @@ ath5k_calibrate_work(struct work_struct *work)
static void
-ath5k_tasklet_ani(unsigned long data)
+ath5k_tasklet_ani(struct tasklet_struct *t)
{
- struct ath5k_hw *ah = (void *)data;
+ struct ath5k_hw *ah = from_tasklet(ah, t, ani_tasklet);
ah->ah_cal_mask |= AR5K_CALIBRATION_ANI;
ath5k_ani_calibration(ah);
@@ -3069,10 +3069,10 @@ ath5k_init(struct ieee80211_hw *hw)
hw->queues = 1;
}
- tasklet_init(&ah->rxtq, ath5k_tasklet_rx, (unsigned long)ah);
- tasklet_init(&ah->txtq, ath5k_tasklet_tx, (unsigned long)ah);
- tasklet_init(&ah->beacontq, ath5k_tasklet_beacon, (unsigned long)ah);
- tasklet_init(&ah->ani_tasklet, ath5k_tasklet_ani, (unsigned long)ah);
+ tasklet_setup(&ah->rxtq, ath5k_tasklet_rx);
+ tasklet_setup(&ah->txtq, ath5k_tasklet_tx);
+ tasklet_setup(&ah->beacontq, ath5k_tasklet_beacon);
+ tasklet_setup(&ah->ani_tasklet, ath5k_tasklet_ani);
INIT_WORK(&ah->reset_work, ath5k_reset_work);
INIT_WORK(&ah->calib_work, ath5k_calibrate_work);
diff --git a/drivers/net/wireless/ath/ath5k/rfkill.c b/drivers/net/wireless/ath/ath5k/rfkill.c
index 270a319f3aeb..855ed7fc720d 100644
--- a/drivers/net/wireless/ath/ath5k/rfkill.c
+++ b/drivers/net/wireless/ath/ath5k/rfkill.c
@@ -73,9 +73,9 @@ ath5k_is_rfkill_set(struct ath5k_hw *ah)
}
static void
-ath5k_tasklet_rfkill_toggle(unsigned long data)
+ath5k_tasklet_rfkill_toggle(struct tasklet_struct *t)
{
- struct ath5k_hw *ah = (void *)data;
+ struct ath5k_hw *ah = from_tasklet(ah, t, rf_kill.toggleq);
bool blocked;
blocked = ath5k_is_rfkill_set(ah);
@@ -90,8 +90,7 @@ ath5k_rfkill_hw_start(struct ath5k_hw *ah)
ah->rf_kill.gpio = ah->ah_capabilities.cap_eeprom.ee_rfkill_pin;
ah->rf_kill.polarity = ah->ah_capabilities.cap_eeprom.ee_rfkill_pol;
- tasklet_init(&ah->rf_kill.toggleq, ath5k_tasklet_rfkill_toggle,
- (unsigned long)ah);
+ tasklet_setup(&ah->rf_kill.toggleq, ath5k_tasklet_rfkill_toggle);
ath5k_rfkill_disable(ah);
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 02/16] wireless: ath9k: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
2020-08-17 9:06 ` [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-27 10:16 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 03/16] wireless: ath: " Allen Pais
` (14 subsequent siblings)
16 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/ath/ath9k/ath9k.h | 4 ++--
drivers/net/wireless/ath/ath9k/beacon.c | 4 ++--
drivers/net/wireless/ath/ath9k/htc.h | 4 ++--
drivers/net/wireless/ath/ath9k/htc_drv_init.c | 6 ++----
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 8 ++++----
drivers/net/wireless/ath/ath9k/init.c | 5 ++---
drivers/net/wireless/ath/ath9k/main.c | 4 ++--
drivers/net/wireless/ath/ath9k/wmi.c | 7 +++----
drivers/net/wireless/ath/ath9k/wmi.h | 2 +-
9 files changed, 20 insertions(+), 24 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index a412b352182c..e06b74a54a69 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -713,7 +713,7 @@ struct ath_beacon {
bool tx_last;
};
-void ath9k_beacon_tasklet(unsigned long data);
+void ath9k_beacon_tasklet(struct tasklet_struct *t);
void ath9k_beacon_config(struct ath_softc *sc, struct ieee80211_vif *main_vif,
bool beacons);
void ath9k_beacon_assign_slot(struct ath_softc *sc, struct ieee80211_vif *vif);
@@ -1117,7 +1117,7 @@ static inline void ath_read_cachesize(struct ath_common *common, int *csz)
common->bus_ops->read_cachesize(common, csz);
}
-void ath9k_tasklet(unsigned long data);
+void ath9k_tasklet(struct tasklet_struct *t);
int ath_cabq_update(struct ath_softc *);
u8 ath9k_parse_mpdudensity(u8 mpdudensity);
irqreturn_t ath_isr(int irq, void *dev);
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
index e36f947e19fc..4876bff2dc2c 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -385,9 +385,9 @@ void ath9k_csa_update(struct ath_softc *sc)
ath9k_csa_update_vif, sc);
}
-void ath9k_beacon_tasklet(unsigned long data)
+void ath9k_beacon_tasklet(struct tasklet_struct *t)
{
- struct ath_softc *sc = (struct ath_softc *)data;
+ struct ath_softc *sc = from_tasklet(sc, t, bcon_tasklet);
struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
struct ath_buf *bf = NULL;
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h
index 9f64e32381f9..0a1634238e67 100644
--- a/drivers/net/wireless/ath/ath9k/htc.h
+++ b/drivers/net/wireless/ath/ath9k/htc.h
@@ -583,14 +583,14 @@ int ath9k_htc_tx_get_slot(struct ath9k_htc_priv *priv);
void ath9k_htc_tx_clear_slot(struct ath9k_htc_priv *priv, int slot);
void ath9k_htc_tx_drain(struct ath9k_htc_priv *priv);
void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event);
-void ath9k_tx_failed_tasklet(unsigned long data);
+void ath9k_tx_failed_tasklet(struct tasklet_struct *t);
void ath9k_htc_tx_cleanup_timer(struct timer_list *t);
bool ath9k_htc_csa_is_finished(struct ath9k_htc_priv *priv);
int ath9k_rx_init(struct ath9k_htc_priv *priv);
void ath9k_rx_cleanup(struct ath9k_htc_priv *priv);
void ath9k_host_rx_init(struct ath9k_htc_priv *priv);
-void ath9k_rx_tasklet(unsigned long data);
+void ath9k_rx_tasklet(struct tasklet_struct *t);
u32 ath9k_htc_calcrxfilter(struct ath9k_htc_priv *priv);
void ath9k_htc_ps_wakeup(struct ath9k_htc_priv *priv);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
index 1d6ad8d46607..8136291791d6 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c
@@ -645,10 +645,8 @@ static int ath9k_init_priv(struct ath9k_htc_priv *priv,
spin_lock_init(&priv->tx.tx_lock);
mutex_init(&priv->mutex);
mutex_init(&priv->htc_pm_lock);
- tasklet_init(&priv->rx_tasklet, ath9k_rx_tasklet,
- (unsigned long)priv);
- tasklet_init(&priv->tx_failed_tasklet, ath9k_tx_failed_tasklet,
- (unsigned long)priv);
+ tasklet_setup(&priv->rx_tasklet, ath9k_rx_tasklet);
+ tasklet_setup(&priv->tx_failed_tasklet, ath9k_tx_failed_tasklet);
INIT_DELAYED_WORK(&priv->ani_work, ath9k_htc_ani_work);
INIT_WORK(&priv->ps_work, ath9k_ps_work);
INIT_WORK(&priv->fatal_work, ath9k_fatal_work);
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index b353995bdd45..bdfa22fdc867 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -570,9 +570,9 @@ void ath9k_htc_tx_drain(struct ath9k_htc_priv *priv)
spin_unlock_bh(&priv->tx.tx_lock);
}
-void ath9k_tx_failed_tasklet(unsigned long data)
+void ath9k_tx_failed_tasklet(struct tasklet_struct *t)
{
- struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data;
+ struct ath9k_htc_priv *priv = from_tasklet(priv, t, tx_failed_tasklet);
spin_lock(&priv->tx.tx_lock);
if (priv->tx.flags & ATH9K_HTC_OP_TX_DRAIN) {
@@ -1062,9 +1062,9 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
/*
* FIXME: Handle FLUSH later on.
*/
-void ath9k_rx_tasklet(unsigned long data)
+void ath9k_rx_tasklet(struct tasklet_struct *t)
{
- struct ath9k_htc_priv *priv = (struct ath9k_htc_priv *)data;
+ struct ath9k_htc_priv *priv = from_tasklet(priv, t, rx_tasklet);
struct ath9k_htc_rxbuf *rxbuf = NULL, *tmp_buf = NULL;
struct ieee80211_rx_status rx_status;
struct sk_buff *skb;
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 4d72cd7daaa2..42eefdfc58d1 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -728,9 +728,8 @@ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
spin_lock_init(&sc->sc_pm_lock);
spin_lock_init(&sc->chan_lock);
mutex_init(&sc->mutex);
- tasklet_init(&sc->intr_tq, ath9k_tasklet, (unsigned long)sc);
- tasklet_init(&sc->bcon_tasklet, ath9k_beacon_tasklet,
- (unsigned long)sc);
+ tasklet_setup(&sc->intr_tq, ath9k_tasklet);
+ tasklet_setup(&sc->bcon_tasklet, ath9k_beacon_tasklet);
timer_setup(&sc->sleep_timer, ath_ps_full_sleep, 0);
INIT_WORK(&sc->hw_reset_work, ath_reset_work);
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index a47f6e978095..3d44552fb534 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -368,9 +368,9 @@ static void ath_node_detach(struct ath_softc *sc, struct ieee80211_sta *sta)
ath_dynack_node_deinit(sc->sc_ah, an);
}
-void ath9k_tasklet(unsigned long data)
+void ath9k_tasklet(struct tasklet_struct *t)
{
- struct ath_softc *sc = (struct ath_softc *)data;
+ struct ath_softc *sc = from_tasklet(sc, t, intr_tq);
struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
enum ath_reset_type type;
diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c
index e7a3127395be..fb82c0910d5d 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.c
+++ b/drivers/net/wireless/ath/ath9k/wmi.c
@@ -106,8 +106,7 @@ struct wmi *ath9k_init_wmi(struct ath9k_htc_priv *priv)
mutex_init(&wmi->multi_rmw_mutex);
init_completion(&wmi->cmd_wait);
INIT_LIST_HEAD(&wmi->pending_tx_events);
- tasklet_init(&wmi->wmi_event_tasklet, ath9k_wmi_event_tasklet,
- (unsigned long)wmi);
+ tasklet_setup(&wmi->wmi_event_tasklet, ath9k_wmi_event_tasklet);
return wmi;
}
@@ -136,9 +135,9 @@ void ath9k_wmi_event_drain(struct ath9k_htc_priv *priv)
spin_unlock_irqrestore(&priv->wmi->wmi_lock, flags);
}
-void ath9k_wmi_event_tasklet(unsigned long data)
+void ath9k_wmi_event_tasklet(struct tasklet_struct *t)
{
- struct wmi *wmi = (struct wmi *)data;
+ struct wmi *wmi = from_tasklet(wmi, t, wmi_event_tasklet);
struct ath9k_htc_priv *priv = wmi->drv_priv;
struct wmi_cmd_hdr *hdr;
void *wmi_event;
diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h
index d8b912206232..be1f126d0306 100644
--- a/drivers/net/wireless/ath/ath9k/wmi.h
+++ b/drivers/net/wireless/ath/ath9k/wmi.h
@@ -185,7 +185,7 @@ int ath9k_wmi_cmd(struct wmi *wmi, enum wmi_cmd_id cmd_id,
u8 *cmd_buf, u32 cmd_len,
u8 *rsp_buf, u32 rsp_len,
u32 timeout);
-void ath9k_wmi_event_tasklet(unsigned long data);
+void ath9k_wmi_event_tasklet(struct tasklet_struct *t);
void ath9k_fatal_work(struct work_struct *work);
void ath9k_wmi_event_drain(struct ath9k_htc_priv *priv);
void ath9k_stop_wmi(struct ath9k_htc_priv *priv);
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 03/16] wireless: ath: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
2020-08-17 9:06 ` [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API Allen Pais
2020-08-17 9:06 ` [PATCH 02/16] wireless: ath9k: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 19:12 ` Christian Lamparter
2020-08-27 10:21 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 04/16] wireless: ath11k: " Allen Pais
` (13 subsequent siblings)
16 siblings, 2 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/ath/carl9170/usb.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
index ead79335823a..e4eb666c6eea 100644
--- a/drivers/net/wireless/ath/carl9170/usb.c
+++ b/drivers/net/wireless/ath/carl9170/usb.c
@@ -377,9 +377,9 @@ void carl9170_usb_handle_tx_err(struct ar9170 *ar)
}
}
-static void carl9170_usb_tasklet(unsigned long data)
+static void carl9170_usb_tasklet(struct tasklet_struct *t)
{
- struct ar9170 *ar = (struct ar9170 *) data;
+ struct ar9170 *ar = from_tasklet(ar, t, usb_tasklet);
if (!IS_INITIALIZED(ar))
return;
@@ -1082,8 +1082,7 @@ static int carl9170_usb_probe(struct usb_interface *intf,
init_completion(&ar->cmd_wait);
init_completion(&ar->fw_boot_wait);
init_completion(&ar->fw_load_wait);
- tasklet_init(&ar->usb_tasklet, carl9170_usb_tasklet,
- (unsigned long)ar);
+ tasklet_setup(&ar->usb_tasklet, carl9170_usb_tasklet);
atomic_set(&ar->tx_cmd_urbs, 0);
atomic_set(&ar->tx_anch_urbs, 0);
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 04/16] wireless: ath11k: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (2 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 03/16] wireless: ath: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-31 15:14 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 05/16] wireless: atmel: " Allen Pais
` (12 subsequent siblings)
16 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais
From: Allen Pais <allen.lkml@gmail.com>
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: Allen Pais <allen.lkml@gmail.com>
---
drivers/net/wireless/ath/ath11k/ahb.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c
index 30092841ac46..28d7e833e27f 100644
--- a/drivers/net/wireless/ath/ath11k/ahb.c
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
@@ -675,9 +675,9 @@ static void ath11k_ahb_free_irq(struct ath11k_base *ab)
ath11k_ahb_free_ext_irq(ab);
}
-static void ath11k_ahb_ce_tasklet(unsigned long data)
+static void ath11k_ahb_ce_tasklet(struct tasklet_struct *t)
{
- struct ath11k_ce_pipe *ce_pipe = (struct ath11k_ce_pipe *)data;
+ struct ath11k_ce_pipe *ce_pipe = from_tasklet(ce_pipe, t, intr_tq);
ath11k_ce_per_engine_service(ce_pipe->ab, ce_pipe->pipe_num);
@@ -827,8 +827,7 @@ static int ath11k_ahb_config_irq(struct ath11k_base *ab)
irq_idx = ATH11K_IRQ_CE0_OFFSET + i;
- tasklet_init(&ce_pipe->intr_tq, ath11k_ahb_ce_tasklet,
- (unsigned long)ce_pipe);
+ tasklet_setup(&ce_pipe->intr_tq, ath11k_ahb_ce_tasklet);
irq = platform_get_irq_byname(ab->pdev, irq_name[irq_idx]);
ret = request_irq(irq, ath11k_ahb_ce_interrupt_handler,
IRQF_TRIGGER_RISING, irq_name[irq_idx],
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 05/16] wireless: atmel: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (3 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 04/16] wireless: ath11k: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-27 13:23 ` [05/16] " Kalle Valo
2020-08-17 9:06 ` [PATCH 06/16] wireless: b43legacy: " Allen Pais
` (11 subsequent siblings)
16 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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
and remove .data field.
Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
drivers/net/wireless/atmel/at76c50x-usb.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/atmel/at76c50x-usb.c b/drivers/net/wireless/atmel/at76c50x-usb.c
index a63b5c2f1e17..365c2ee19d03 100644
--- a/drivers/net/wireless/atmel/at76c50x-usb.c
+++ b/drivers/net/wireless/atmel/at76c50x-usb.c
@@ -1199,7 +1199,6 @@ static void at76_rx_callback(struct urb *urb)
{
struct at76_priv *priv = urb->context;
- priv->rx_tasklet.data = (unsigned long)urb;
tasklet_schedule(&priv->rx_tasklet);
}
@@ -1545,10 +1544,10 @@ static inline int at76_guess_freq(struct at76_priv *priv)
return ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ);
}
-static void at76_rx_tasklet(unsigned long param)
+static void at76_rx_tasklet(struct tasklet_struct *t)
{
- struct urb *urb = (struct urb *)param;
- struct at76_priv *priv = urb->context;
+ struct at76_priv *priv = from_tasklet(priv, t, rx_tasklet);
+ struct urb *urb = priv->rx_urb;
struct at76_rx_buffer *buf;
struct ieee80211_rx_status rx_status = { 0 };
@@ -2215,7 +2214,7 @@ static struct at76_priv *at76_alloc_new_device(struct usb_device *udev)
INIT_WORK(&priv->work_join_bssid, at76_work_join_bssid);
INIT_DELAYED_WORK(&priv->dwork_hw_scan, at76_dwork_hw_scan);
- tasklet_init(&priv->rx_tasklet, at76_rx_tasklet, 0);
+ tasklet_setup(&priv->rx_tasklet, at76_rx_tasklet);
priv->pm_mode = AT76_PM_OFF;
priv->pm_period = 0;
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 06/16] wireless: b43legacy: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (4 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 05/16] wireless: atmel: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 07/16] wireless: brcm80211: " Allen Pais
` (10 subsequent siblings)
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/broadcom/b43legacy/main.c | 8 +++-----
drivers/net/wireless/broadcom/b43legacy/pio.c | 7 +++----
2 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/broadcom/b43legacy/main.c b/drivers/net/wireless/broadcom/b43legacy/main.c
index 2eaf481f03f1..15d592cf056c 100644
--- a/drivers/net/wireless/broadcom/b43legacy/main.c
+++ b/drivers/net/wireless/broadcom/b43legacy/main.c
@@ -1275,9 +1275,9 @@ static void handle_irq_ucode_debug(struct b43legacy_wldev *dev)
}
/* Interrupt handler bottom-half */
-static void b43legacy_interrupt_tasklet(unsigned long data)
+static void b43legacy_interrupt_tasklet(struct tasklet_struct *t)
{
- struct b43legacy_wldev *dev = (struct b43legacy_wldev *)data;
+ struct b43legacy_wldev *dev = from_tasklet(dev, t, isr_tasklet);
u32 reason;
u32 dma_reason[ARRAY_SIZE(dev->dma_reason)];
u32 merged_dma_reason = 0;
@@ -3741,9 +3741,7 @@ static int b43legacy_one_core_attach(struct ssb_device *dev,
wldev->wl = wl;
b43legacy_set_status(wldev, B43legacy_STAT_UNINIT);
wldev->bad_frames_preempt = modparam_bad_frames_preempt;
- tasklet_init(&wldev->isr_tasklet,
- b43legacy_interrupt_tasklet,
- (unsigned long)wldev);
+ tasklet_setup(&wldev->isr_tasklet, b43legacy_interrupt_tasklet);
if (modparam_pio)
wldev->__using_pio = true;
INIT_LIST_HEAD(&wldev->list);
diff --git a/drivers/net/wireless/broadcom/b43legacy/pio.c b/drivers/net/wireless/broadcom/b43legacy/pio.c
index cbb761378619..aac413d0f629 100644
--- a/drivers/net/wireless/broadcom/b43legacy/pio.c
+++ b/drivers/net/wireless/broadcom/b43legacy/pio.c
@@ -264,9 +264,9 @@ static int pio_tx_packet(struct b43legacy_pio_txpacket *packet)
return 0;
}
-static void tx_tasklet(unsigned long d)
+static void tx_tasklet(struct tasklet_struct *t)
{
- struct b43legacy_pioqueue *queue = (struct b43legacy_pioqueue *)d;
+ struct b43legacy_pioqueue *queue = from_tasklet(queue, t, txtask);
struct b43legacy_wldev *dev = queue->dev;
unsigned long flags;
struct b43legacy_pio_txpacket *packet, *tmp_packet;
@@ -331,8 +331,7 @@ struct b43legacy_pioqueue *b43legacy_setup_pioqueue(struct b43legacy_wldev *dev,
INIT_LIST_HEAD(&queue->txfree);
INIT_LIST_HEAD(&queue->txqueue);
INIT_LIST_HEAD(&queue->txrunning);
- tasklet_init(&queue->txtask, tx_tasklet,
- (unsigned long)queue);
+ tasklet_setup(&queue->txtask, tx_tasklet);
value = b43legacy_read32(dev, B43legacy_MMIO_MACCTL);
value &= ~B43legacy_MACCTL_BE;
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 07/16] wireless: brcm80211: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (5 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 06/16] wireless: b43legacy: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 10:15 ` Arend Van Spriel
2020-08-17 9:06 ` [PATCH 08/16] wireless: ipw2x00: " Allen Pais
` (9 subsequent siblings)
16 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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>
---
.../net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c | 6 +++---
.../net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index 648efcbc819f..521abe5ce5b8 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -982,11 +982,11 @@ static const struct ieee80211_ops brcms_ops = {
.set_tim = brcms_ops_beacon_set_tim,
};
-void brcms_dpc(unsigned long data)
+void brcms_dpc(struct tasklet_struct *t)
{
struct brcms_info *wl;
- wl = (struct brcms_info *) data;
+ wl = from_tasklet(wl, t, tasklet);
spin_lock_bh(&wl->lock);
@@ -1149,7 +1149,7 @@ static struct brcms_info *brcms_attach(struct bcma_device *pdev)
init_waitqueue_head(&wl->tx_flush_wq);
/* setup the bottom half handler */
- tasklet_init(&wl->tasklet, brcms_dpc, (unsigned long) wl);
+ tasklet_setup(&wl->tasklet, brcms_dpc);
spin_lock_init(&wl->lock);
spin_lock_init(&wl->isr_lock);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h
index 198053dfc310..eaf926a96a88 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h
@@ -106,7 +106,7 @@ struct brcms_timer *brcms_init_timer(struct brcms_info *wl,
void brcms_free_timer(struct brcms_timer *timer);
void brcms_add_timer(struct brcms_timer *timer, uint ms, int periodic);
bool brcms_del_timer(struct brcms_timer *timer);
-void brcms_dpc(unsigned long data);
+void brcms_dpc(struct tasklet_struct *t);
void brcms_timer(struct brcms_timer *t);
void brcms_fatal_error(struct brcms_info *wl);
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 08/16] wireless: ipw2x00: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (6 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 07/16] wireless: brcm80211: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 09/16] wireless: iwlegacy: " Allen Pais
` (8 subsequent siblings)
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/intel/ipw2x00/ipw2100.c | 9 ++++-----
drivers/net/wireless/intel/ipw2x00/ipw2200.c | 7 +++----
2 files changed, 7 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2100.c b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
index 461e955aa259..b7fbfc77b612 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2100.c
@@ -3204,9 +3204,9 @@ static void ipw2100_tx_send_data(struct ipw2100_priv *priv)
}
}
-static void ipw2100_irq_tasklet(unsigned long data)
+static void ipw2100_irq_tasklet(struct tasklet_struct *t)
{
- struct ipw2100_priv *priv = (struct ipw2100_priv *)data;
+ struct ipw2100_priv *priv = from_tasklet(priv, t, irq_tasklet);
struct net_device *dev = priv->net_dev;
unsigned long flags;
u32 inta, tmp;
@@ -6005,7 +6005,7 @@ static void ipw2100_rf_kill(struct work_struct *work)
spin_unlock_irqrestore(&priv->low_lock, flags);
}
-static void ipw2100_irq_tasklet(unsigned long data);
+static void ipw2100_irq_tasklet(struct tasklet_struct *t);
static const struct net_device_ops ipw2100_netdev_ops = {
.ndo_open = ipw2100_open,
@@ -6135,8 +6135,7 @@ static struct net_device *ipw2100_alloc_device(struct pci_dev *pci_dev,
INIT_DELAYED_WORK(&priv->rf_kill, ipw2100_rf_kill);
INIT_DELAYED_WORK(&priv->scan_event, ipw2100_scan_event);
- tasklet_init(&priv->irq_tasklet,
- ipw2100_irq_tasklet, (unsigned long)priv);
+ tasklet_setup(&priv->irq_tasklet, ipw2100_irq_tasklet);
/* NOTE: We do not start the deferred work for status checks yet */
priv->stop_rf_kill = 1;
diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
index 129ef2f6248a..5af1c548a564 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
@@ -1945,9 +1945,9 @@ static void notify_wx_assoc_event(struct ipw_priv *priv)
wireless_send_event(priv->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-static void ipw_irq_tasklet(unsigned long data)
+static void ipw_irq_tasklet(struct tasklet_struct *t)
{
- struct ipw_priv *priv = (struct ipw_priv *)data;
+ struct ipw_priv *priv = from_tasklet(priv, t, irq_tasklet);
u32 inta, inta_mask, handled = 0;
unsigned long flags;
int rc = 0;
@@ -10673,8 +10673,7 @@ static void ipw_setup_deferred_work(struct ipw_priv *priv)
INIT_WORK(&priv->qos_activate, ipw_bg_qos_activate);
#endif /* CONFIG_IPW2200_QOS */
- tasklet_init(&priv->irq_tasklet,
- ipw_irq_tasklet, (unsigned long)priv);
+ tasklet_setup(&priv->irq_tasklet, ipw_irq_tasklet);
}
static void shim__set_security(struct net_device *dev,
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 09/16] wireless: iwlegacy: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (7 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 08/16] wireless: ipw2x00: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 10/16] wireless: intersil: " Allen Pais
` (7 subsequent siblings)
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/intel/iwlegacy/3945-mac.c | 8 +++-----
drivers/net/wireless/intel/iwlegacy/4965-mac.c | 8 +++-----
2 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/drivers/net/wireless/intel/iwlegacy/3945-mac.c b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
index 9167c3d2711d..5fe98bbefc56 100644
--- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c
@@ -1374,9 +1374,9 @@ il3945_dump_nic_error_log(struct il_priv *il)
}
static void
-il3945_irq_tasklet(unsigned long data)
+il3945_irq_tasklet(struct tasklet_struct *t)
{
- struct il_priv *il = (struct il_priv *)data;
+ struct il_priv *il = from_tasklet(il, t, irq_tasklet);
u32 inta, handled = 0;
u32 inta_fh;
unsigned long flags;
@@ -3399,9 +3399,7 @@ il3945_setup_deferred_work(struct il_priv *il)
timer_setup(&il->watchdog, il_bg_watchdog, 0);
- tasklet_init(&il->irq_tasklet,
- il3945_irq_tasklet,
- (unsigned long)il);
+ tasklet_setup(&il->irq_tasklet, il3945_irq_tasklet);
}
static void
diff --git a/drivers/net/wireless/intel/iwlegacy/4965-mac.c b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
index e73c223a7d28..afc54c63c4c6 100644
--- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c
+++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c
@@ -4344,9 +4344,9 @@ il4965_synchronize_irq(struct il_priv *il)
}
static void
-il4965_irq_tasklet(unsigned long data)
+il4965_irq_tasklet(struct tasklet_struct *t)
{
- struct il_priv *il = (struct il_priv *)data;
+ struct il_priv *il = from_tasklet(il, t, irq_tasklet);
u32 inta, handled = 0;
u32 inta_fh;
unsigned long flags;
@@ -6238,9 +6238,7 @@ il4965_setup_deferred_work(struct il_priv *il)
timer_setup(&il->watchdog, il_bg_watchdog, 0);
- tasklet_init(&il->irq_tasklet,
- il4965_irq_tasklet,
- (unsigned long)il);
+ tasklet_setup(&il->irq_tasklet, il4965_irq_tasklet);
}
static void
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 10/16] wireless: intersil: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (8 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 09/16] wireless: iwlegacy: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-09-16 13:44 ` Lee Jones
2020-08-17 9:06 ` [PATCH 11/16] wireless: marvell: " Allen Pais
` (6 subsequent siblings)
16 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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
and remove .data field.
Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
.../net/wireless/intersil/hostap/hostap_hw.c | 18 +++++++++---------
drivers/net/wireless/intersil/orinoco/main.c | 7 +++----
drivers/net/wireless/intersil/p54/p54pci.c | 8 ++++----
3 files changed, 16 insertions(+), 17 deletions(-)
diff --git a/drivers/net/wireless/intersil/hostap/hostap_hw.c b/drivers/net/wireless/intersil/hostap/hostap_hw.c
index b6c497ce12e1..ba00a4d8a26f 100644
--- a/drivers/net/wireless/intersil/hostap/hostap_hw.c
+++ b/drivers/net/wireless/intersil/hostap/hostap_hw.c
@@ -2083,9 +2083,9 @@ static void hostap_rx_skb(local_info_t *local, struct sk_buff *skb)
/* Called only as a tasklet (software IRQ) */
-static void hostap_rx_tasklet(unsigned long data)
+static void hostap_rx_tasklet(struct tasklet_struct *t)
{
- local_info_t *local = (local_info_t *) data;
+ local_info_t *local = from_tasklet(local, t, rx_tasklet);
struct sk_buff *skb;
while ((skb = skb_dequeue(&local->rx_list)) != NULL)
@@ -2288,9 +2288,9 @@ static void prism2_tx_ev(local_info_t *local)
/* Called only as a tasklet (software IRQ) */
-static void hostap_sta_tx_exc_tasklet(unsigned long data)
+static void hostap_sta_tx_exc_tasklet(struct tasklet_struct *t)
{
- local_info_t *local = (local_info_t *) data;
+ local_info_t *local = from_tasklet(local, t, sta_tx_exc_tasklet);
struct sk_buff *skb;
while ((skb = skb_dequeue(&local->sta_tx_exc_list)) != NULL) {
@@ -2390,9 +2390,9 @@ static void prism2_txexc(local_info_t *local)
/* Called only as a tasklet (software IRQ) */
-static void hostap_info_tasklet(unsigned long data)
+static void hostap_info_tasklet(struct tasklet_struct *t)
{
- local_info_t *local = (local_info_t *) data;
+ local_info_t *local = from_tasklet(local, t, info_tasklet);
struct sk_buff *skb;
while ((skb = skb_dequeue(&local->info_list)) != NULL) {
@@ -2469,9 +2469,9 @@ static void prism2_info(local_info_t *local)
/* Called only as a tasklet (software IRQ) */
-static void hostap_bap_tasklet(unsigned long data)
+static void hostap_bap_tasklet(struct tasklet_struct *t)
{
- local_info_t *local = (local_info_t *) data;
+ local_info_t *local = from_tasklet(local, t, bap_tasklet);
struct net_device *dev = local->dev;
u16 ev;
int frames = 30;
@@ -3183,7 +3183,7 @@ prism2_init_local_data(struct prism2_helper_functions *funcs, int card_idx,
/* Initialize tasklets for handling hardware IRQ related operations
* outside hw IRQ handler */
#define HOSTAP_TASKLET_INIT(q, f, d) \
-do { memset((q), 0, sizeof(*(q))); (q)->func = (f); (q)->data = (d); } \
+do { memset((q), 0, sizeof(*(q))); (q)->func = (void(*)(unsigned long))(f); } \
while (0)
HOSTAP_TASKLET_INIT(&local->bap_tasklet, hostap_bap_tasklet,
(unsigned long) local);
diff --git a/drivers/net/wireless/intersil/orinoco/main.c b/drivers/net/wireless/intersil/orinoco/main.c
index 00264a14e52c..78d3cb986c19 100644
--- a/drivers/net/wireless/intersil/orinoco/main.c
+++ b/drivers/net/wireless/intersil/orinoco/main.c
@@ -1062,9 +1062,9 @@ static void orinoco_rx(struct net_device *dev,
stats->rx_dropped++;
}
-static void orinoco_rx_isr_tasklet(unsigned long data)
+static void orinoco_rx_isr_tasklet(struct tasklet_struct *t)
{
- struct orinoco_private *priv = (struct orinoco_private *) data;
+ struct orinoco_private *priv = from_tasklet(priv, t, rx_tasklet);
struct net_device *dev = priv->ndev;
struct orinoco_rx_data *rx_data, *temp;
struct hermes_rx_descriptor *desc;
@@ -2198,8 +2198,7 @@ struct orinoco_private
INIT_WORK(&priv->wevent_work, orinoco_send_wevents);
INIT_LIST_HEAD(&priv->rx_list);
- tasklet_init(&priv->rx_tasklet, orinoco_rx_isr_tasklet,
- (unsigned long) priv);
+ tasklet_setup(&priv->rx_tasklet, orinoco_rx_isr_tasklet);
spin_lock_init(&priv->scan_lock);
INIT_LIST_HEAD(&priv->scan_list);
diff --git a/drivers/net/wireless/intersil/p54/p54pci.c b/drivers/net/wireless/intersil/p54/p54pci.c
index 9d96c8b8409d..94064d7cff52 100644
--- a/drivers/net/wireless/intersil/p54/p54pci.c
+++ b/drivers/net/wireless/intersil/p54/p54pci.c
@@ -278,10 +278,10 @@ static void p54p_check_tx_ring(struct ieee80211_hw *dev, u32 *index,
}
}
-static void p54p_tasklet(unsigned long dev_id)
+static void p54p_tasklet(struct tasklet_struct *t)
{
- struct ieee80211_hw *dev = (struct ieee80211_hw *)dev_id;
- struct p54p_priv *priv = dev->priv;
+ struct p54p_priv *priv = from_tasklet(priv, t, tasklet);
+ struct ieee80211_hw *dev = pci_get_drvdata(priv->pdev);
struct p54p_ring_control *ring_control = priv->ring_control;
p54p_check_tx_ring(dev, &priv->tx_idx_mgmt, 3, ring_control->tx_mgmt,
@@ -620,7 +620,7 @@ static int p54p_probe(struct pci_dev *pdev,
priv->common.tx = p54p_tx;
spin_lock_init(&priv->lock);
- tasklet_init(&priv->tasklet, p54p_tasklet, (unsigned long)dev);
+ tasklet_setup(&priv->tasklet, p54p_tasklet);
err = request_firmware_nowait(THIS_MODULE, 1, "isl3886pci",
&priv->pdev->dev, GFP_KERNEL,
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 11/16] wireless: marvell: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (9 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 10/16] wireless: intersil: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 12/16] wireless: mediatek: " Allen Pais
` (5 subsequent siblings)
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/marvell/mwl8k.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwl8k.c b/drivers/net/wireless/marvell/mwl8k.c
index 97f23f93f6e7..23efd7075df6 100644
--- a/drivers/net/wireless/marvell/mwl8k.c
+++ b/drivers/net/wireless/marvell/mwl8k.c
@@ -4630,10 +4630,10 @@ static irqreturn_t mwl8k_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static void mwl8k_tx_poll(unsigned long data)
+static void mwl8k_tx_poll(struct tasklet_struct *t)
{
- struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
- struct mwl8k_priv *priv = hw->priv;
+ struct mwl8k_priv *priv = from_tasklet(priv, t, poll_tx_task);
+ struct ieee80211_hw *hw = pci_get_drvdata(priv->pdev);
int limit;
int i;
@@ -4659,10 +4659,10 @@ static void mwl8k_tx_poll(unsigned long data)
}
}
-static void mwl8k_rx_poll(unsigned long data)
+static void mwl8k_rx_poll(struct tasklet_struct *t)
{
- struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
- struct mwl8k_priv *priv = hw->priv;
+ struct mwl8k_priv *priv = from_tasklet(priv, t, poll_rx_task);
+ struct ieee80211_hw *hw = pci_get_drvdata(priv->pdev);
int limit;
limit = 32;
@@ -6120,9 +6120,9 @@ static int mwl8k_firmware_load_success(struct mwl8k_priv *priv)
INIT_WORK(&priv->fw_reload, mwl8k_hw_restart_work);
/* TX reclaim and RX tasklets. */
- tasklet_init(&priv->poll_tx_task, mwl8k_tx_poll, (unsigned long)hw);
+ tasklet_setup(&priv->poll_tx_task, mwl8k_tx_poll);
tasklet_disable(&priv->poll_tx_task);
- tasklet_init(&priv->poll_rx_task, mwl8k_rx_poll, (unsigned long)hw);
+ tasklet_setup(&priv->poll_rx_task, mwl8k_rx_poll);
tasklet_disable(&priv->poll_rx_task);
/* Power management cookie */
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 12/16] wireless: mediatek: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (10 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 11/16] wireless: marvell: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-09-01 9:25 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 13/16] wireless: quantenna: " Allen Pais
` (4 subsequent siblings)
16 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/mediatek/mt76/mac80211.c | 2 +-
drivers/net/wireless/mediatek/mt76/mt76.h | 2 +-
drivers/net/wireless/mediatek/mt76/mt7603/beacon.c | 4 ++--
drivers/net/wireless/mediatek/mt76/mt7603/init.c | 3 +--
drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h | 2 +-
drivers/net/wireless/mediatek/mt76/mt7615/mmio.c | 6 +++---
drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c | 10 +++++-----
drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c | 14 ++++++--------
drivers/net/wireless/mediatek/mt76/tx.c | 4 ++--
drivers/net/wireless/mediatek/mt76/usb.c | 12 ++++++------
drivers/net/wireless/mediatek/mt7601u/dma.c | 12 ++++++------
11 files changed, 34 insertions(+), 37 deletions(-)
diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
index 3d4bf72700a5..1f62f069a0dc 100644
--- a/drivers/net/wireless/mediatek/mt76/mac80211.c
+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
@@ -439,7 +439,7 @@ mt76_alloc_device(struct device *pdev, unsigned int size,
for (i = 0; i < ARRAY_SIZE(dev->q_rx); i++)
skb_queue_head_init(&dev->rx_skb[i]);
- tasklet_init(&dev->tx_tasklet, mt76_tx_tasklet, (unsigned long)dev);
+ tasklet_setup(&dev->tx_tasklet, mt76_tx_tasklet);
dev->wq = alloc_ordered_workqueue("mt76", 0);
if (!dev->wq) {
diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h
index af35bc388ae2..1ab52fc37a1c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76.h
@@ -899,7 +899,7 @@ void mt76_stop_tx_queues(struct mt76_dev *dev, struct ieee80211_sta *sta,
bool send_bar);
void mt76_txq_schedule(struct mt76_phy *phy, enum mt76_txq_id qid);
void mt76_txq_schedule_all(struct mt76_phy *phy);
-void mt76_tx_tasklet(unsigned long data);
+void mt76_tx_tasklet(struct tasklet_struct *t);
void mt76_release_buffered_frames(struct ieee80211_hw *hw,
struct ieee80211_sta *sta,
u16 tids, int nframes,
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/beacon.c b/drivers/net/wireless/mediatek/mt76/mt7603/beacon.c
index 7a41cdf1c4ae..ab6771c6d2a6 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/beacon.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/beacon.c
@@ -64,9 +64,9 @@ mt7603_add_buffered_bc(void *priv, u8 *mac, struct ieee80211_vif *vif)
data->count[mvif->idx]++;
}
-void mt7603_pre_tbtt_tasklet(unsigned long arg)
+void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t)
{
- struct mt7603_dev *dev = (struct mt7603_dev *)arg;
+ struct mt7603_dev *dev = from_tasklet(dev, t, mt76.pre_tbtt_tasklet);
struct mt76_queue *q;
struct beacon_bc_data data = {};
struct sk_buff *skb;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/init.c b/drivers/net/wireless/mediatek/mt76/mt7603/init.c
index 94196599797e..a5aaa790692a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/init.c
@@ -533,8 +533,7 @@ int mt7603_register_device(struct mt7603_dev *dev)
spin_lock_init(&dev->ps_lock);
INIT_DELAYED_WORK(&dev->mt76.mac_work, mt7603_mac_work);
- tasklet_init(&dev->mt76.pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet,
- (unsigned long)dev);
+ tasklet_setup(&dev->mt76.pre_tbtt_tasklet, mt7603_pre_tbtt_tasklet);
/* Check for 7688, which only has 1SS */
dev->mphy.antenna_mask = 3;
diff --git a/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h b/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h
index c86305241e66..582d356382ed 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h
+++ b/drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h
@@ -255,7 +255,7 @@ void mt7603_sta_assoc(struct mt76_dev *mdev, struct ieee80211_vif *vif,
void mt7603_sta_remove(struct mt76_dev *mdev, struct ieee80211_vif *vif,
struct ieee80211_sta *sta);
-void mt7603_pre_tbtt_tasklet(unsigned long arg);
+void mt7603_pre_tbtt_tasklet(struct tasklet_struct *t);
void mt7603_update_channel(struct mt76_dev *mdev);
diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mmio.c b/drivers/net/wireless/mediatek/mt76/mt7615/mmio.c
index 133f93a6ed1b..c081a1c0449c 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mmio.c
@@ -98,9 +98,9 @@ static irqreturn_t mt7615_irq_handler(int irq, void *dev_instance)
return IRQ_HANDLED;
}
-static void mt7615_irq_tasklet(unsigned long data)
+static void mt7615_irq_tasklet(struct tasklet_struct *t)
{
- struct mt7615_dev *dev = (struct mt7615_dev *)data;
+ struct mt7615_dev *dev = from_tasklet(dev, t, irq_tasklet);
u32 intr, mask = 0;
mt76_wr(dev, MT_INT_MASK_CSR, 0);
@@ -206,7 +206,7 @@ int mt7615_mmio_probe(struct device *pdev, void __iomem *mem_base,
dev = container_of(mdev, struct mt7615_dev, mt76);
mt76_mmio_init(&dev->mt76, mem_base);
- tasklet_init(&dev->irq_tasklet, mt7615_irq_tasklet, (unsigned long)dev);
+ tasklet_setup(&dev->irq_tasklet, mt7615_irq_tasklet);
dev->reg_map = map;
dev->ops = ops;
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c b/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c
index ff6a9e4daac0..d45c5bcda72f 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_dfs.c
@@ -609,10 +609,11 @@ static void mt76x02_dfs_check_event_window(struct mt76x02_dev *dev)
}
}
-static void mt76x02_dfs_tasklet(unsigned long arg)
+static void mt76x02_dfs_tasklet(struct tasklet_struct *t)
{
- struct mt76x02_dev *dev = (struct mt76x02_dev *)arg;
- struct mt76x02_dfs_pattern_detector *dfs_pd = &dev->dfs_pd;
+ struct mt76x02_dfs_pattern_detector *dfs_pd = from_tasklet(dfs_pd, t,
+ dfs_tasklet);
+ struct mt76x02_dev *dev = container_of(dfs_pd, typeof(*dev), dfs_pd);
u32 engine_mask;
int i;
@@ -860,8 +861,7 @@ void mt76x02_dfs_init_detector(struct mt76x02_dev *dev)
INIT_LIST_HEAD(&dfs_pd->seq_pool);
dev->mt76.region = NL80211_DFS_UNSET;
dfs_pd->last_sw_check = jiffies;
- tasklet_init(&dfs_pd->dfs_tasklet, mt76x02_dfs_tasklet,
- (unsigned long)dev);
+ tasklet_setup(&dfs_pd->dfs_tasklet, mt76x02_dfs_tasklet);
}
static void
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c b/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
index bacb1f10a699..5a3db4edc265 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c
@@ -11,9 +11,9 @@
#include "mt76x02_mcu.h"
#include "trace.h"
-static void mt76x02_pre_tbtt_tasklet(unsigned long arg)
+static void mt76x02_pre_tbtt_tasklet(struct tasklet_struct *t)
{
- struct mt76x02_dev *dev = (struct mt76x02_dev *)arg;
+ struct mt76x02_dev *dev = from_tasklet(dev, t, mt76.pre_tbtt_tasklet);
struct mt76_queue *q = dev->mt76.q_tx[MT_TXQ_PSD].q;
struct beacon_bc_data data = {};
struct sk_buff *skb;
@@ -151,9 +151,9 @@ static void mt76x02_process_tx_status_fifo(struct mt76x02_dev *dev)
mt76x02_send_tx_status(dev, &stat, &update);
}
-static void mt76x02_tx_tasklet(unsigned long data)
+static void mt76x02_tx_tasklet(struct tasklet_struct *t)
{
- struct mt76x02_dev *dev = (struct mt76x02_dev *)data;
+ struct mt76x02_dev *dev = from_tasklet(dev, t, mt76.tx_tasklet);
mt76x02_mac_poll_tx_status(dev, false);
mt76x02_process_tx_status_fifo(dev);
@@ -197,10 +197,8 @@ int mt76x02_dma_init(struct mt76x02_dev *dev)
if (!status_fifo)
return -ENOMEM;
- tasklet_init(&dev->mt76.tx_tasklet, mt76x02_tx_tasklet,
- (unsigned long)dev);
- tasklet_init(&dev->mt76.pre_tbtt_tasklet, mt76x02_pre_tbtt_tasklet,
- (unsigned long)dev);
+ tasklet_setup(&dev->mt76.tx_tasklet, mt76x02_tx_tasklet);
+ tasklet_setup(&dev->mt76.pre_tbtt_tasklet, mt76x02_pre_tbtt_tasklet);
spin_lock_init(&dev->txstatus_fifo_lock);
kfifo_init(&dev->txstatus_fifo, status_fifo, fifo_size);
diff --git a/drivers/net/wireless/mediatek/mt76/tx.c b/drivers/net/wireless/mediatek/mt76/tx.c
index 3afd89ecd6c9..89d99755cf6c 100644
--- a/drivers/net/wireless/mediatek/mt76/tx.c
+++ b/drivers/net/wireless/mediatek/mt76/tx.c
@@ -585,9 +585,9 @@ void mt76_txq_schedule_all(struct mt76_phy *phy)
}
EXPORT_SYMBOL_GPL(mt76_txq_schedule_all);
-void mt76_tx_tasklet(unsigned long data)
+void mt76_tx_tasklet(struct tasklet_struct *t)
{
- struct mt76_dev *dev = (struct mt76_dev *)data;
+ struct mt76_dev *dev = from_tasklet(dev, t, tx_tasklet);
mt76_txq_schedule_all(&dev->phy);
if (dev->phy2)
diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c
index dcab5993763a..fa63753976c9 100644
--- a/drivers/net/wireless/mediatek/mt76/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/usb.c
@@ -669,9 +669,9 @@ mt76u_process_rx_queue(struct mt76_dev *dev, struct mt76_queue *q)
mt76_rx_poll_complete(dev, MT_RXQ_MAIN, NULL);
}
-static void mt76u_rx_tasklet(unsigned long data)
+static void mt76u_rx_tasklet(struct tasklet_struct *t)
{
- struct mt76_dev *dev = (struct mt76_dev *)data;
+ struct mt76_dev *dev = from_tasklet(dev, t, usb.rx_tasklet);
int i;
rcu_read_lock();
@@ -792,9 +792,9 @@ int mt76u_resume_rx(struct mt76_dev *dev)
}
EXPORT_SYMBOL_GPL(mt76u_resume_rx);
-static void mt76u_tx_tasklet(unsigned long data)
+static void mt76u_tx_tasklet(struct tasklet_struct *t)
{
- struct mt76_dev *dev = (struct mt76_dev *)data;
+ struct mt76_dev *dev = from_tasklet(dev, t, tx_tasklet);
struct mt76_queue_entry entry;
struct mt76_sw_queue *sq;
struct mt76_queue *q;
@@ -1133,8 +1133,8 @@ int mt76u_init(struct mt76_dev *dev,
mt76u_ops.rmw = ext ? mt76u_rmw_ext : mt76u_rmw;
mt76u_ops.write_copy = ext ? mt76u_copy_ext : mt76u_copy;
- tasklet_init(&usb->rx_tasklet, mt76u_rx_tasklet, (unsigned long)dev);
- tasklet_init(&dev->tx_tasklet, mt76u_tx_tasklet, (unsigned long)dev);
+ tasklet_setup(&usb->rx_tasklet, mt76u_rx_tasklet);
+ tasklet_setup(&dev->tx_tasklet, mt76u_tx_tasklet);
INIT_WORK(&usb->stat_work, mt76u_tx_status_data);
usb->data_len = usb_maxpacket(udev, usb_sndctrlpipe(udev, 0), 1);
diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.c b/drivers/net/wireless/mediatek/mt7601u/dma.c
index f6a0454abe04..abeffeb388b7 100644
--- a/drivers/net/wireless/mediatek/mt7601u/dma.c
+++ b/drivers/net/wireless/mediatek/mt7601u/dma.c
@@ -212,9 +212,9 @@ static void mt7601u_complete_rx(struct urb *urb)
spin_unlock_irqrestore(&dev->rx_lock, flags);
}
-static void mt7601u_rx_tasklet(unsigned long data)
+static void mt7601u_rx_tasklet(struct tasklet_struct *t)
{
- struct mt7601u_dev *dev = (struct mt7601u_dev *) data;
+ struct mt7601u_dev *dev = from_tasklet(dev, t, rx_tasklet);
struct mt7601u_dma_buf_rx *e;
while ((e = mt7601u_rx_get_pending_entry(dev))) {
@@ -266,9 +266,9 @@ static void mt7601u_complete_tx(struct urb *urb)
spin_unlock_irqrestore(&dev->tx_lock, flags);
}
-static void mt7601u_tx_tasklet(unsigned long data)
+static void mt7601u_tx_tasklet(struct tasklet_struct *t)
{
- struct mt7601u_dev *dev = (struct mt7601u_dev *) data;
+ struct mt7601u_dev *dev = from_tasklet(dev, t, tx_tasklet);
struct sk_buff_head skbs;
unsigned long flags;
@@ -507,8 +507,8 @@ int mt7601u_dma_init(struct mt7601u_dev *dev)
{
int ret = -ENOMEM;
- tasklet_init(&dev->tx_tasklet, mt7601u_tx_tasklet, (unsigned long) dev);
- tasklet_init(&dev->rx_tasklet, mt7601u_rx_tasklet, (unsigned long) dev);
+ tasklet_setup(&dev->tx_tasklet, mt7601u_tx_tasklet);
+ tasklet_setup(&dev->rx_tasklet, mt7601u_rx_tasklet);
ret = mt7601u_alloc_tx(dev);
if (ret)
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 13/16] wireless: quantenna: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (11 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 12/16] wireless: mediatek: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 14/16] wireless: ralink: " Allen Pais
` (3 subsequent siblings)
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c | 7 +++----
drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c | 7 +++----
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c
index eb67b66b846b..9a20c0f29078 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pcie/pearl_pcie.c
@@ -1091,9 +1091,9 @@ static void qtnf_pearl_fw_work_handler(struct work_struct *work)
put_device(&pdev->dev);
}
-static void qtnf_pearl_reclaim_tasklet_fn(unsigned long data)
+static void qtnf_pearl_reclaim_tasklet_fn(struct tasklet_struct *t)
{
- struct qtnf_pcie_pearl_state *ps = (void *)data;
+ struct qtnf_pcie_pearl_state *ps = from_tasklet(ps, t, base.reclaim_tq);
qtnf_pearl_data_tx_reclaim(ps);
qtnf_en_txdone_irq(ps);
@@ -1145,8 +1145,7 @@ static int qtnf_pcie_pearl_probe(struct qtnf_bus *bus, unsigned int tx_bd_size,
return ret;
}
- tasklet_init(&ps->base.reclaim_tq, qtnf_pearl_reclaim_tasklet_fn,
- (unsigned long)ps);
+ tasklet_setup(&ps->base.reclaim_tq, qtnf_pearl_reclaim_tasklet_fn);
netif_napi_add(&bus->mux_dev, &bus->mux_napi,
qtnf_pcie_pearl_rx_poll, 10);
diff --git a/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c
index d1b850aa4657..4b87d3151017 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/pcie/topaz_pcie.c
@@ -1105,9 +1105,9 @@ static void qtnf_topaz_fw_work_handler(struct work_struct *work)
put_device(&pdev->dev);
}
-static void qtnf_reclaim_tasklet_fn(unsigned long data)
+static void qtnf_reclaim_tasklet_fn(struct tasklet_struct *t)
{
- struct qtnf_pcie_topaz_state *ts = (void *)data;
+ struct qtnf_pcie_topaz_state *ts = from_tasklet(ts, t, base.reclaim_tq);
qtnf_topaz_data_tx_reclaim(ts);
}
@@ -1158,8 +1158,7 @@ static int qtnf_pcie_topaz_probe(struct qtnf_bus *bus,
return ret;
}
- tasklet_init(&ts->base.reclaim_tq, qtnf_reclaim_tasklet_fn,
- (unsigned long)ts);
+ tasklet_setup(&ts->base.reclaim_tq, qtnf_reclaim_tasklet_fn);
netif_napi_add(&bus->mux_dev, &bus->mux_napi,
qtnf_topaz_rx_poll, 10);
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 14/16] wireless: ralink: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (12 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 13/16] wireless: quantenna: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 15/16] wireless: realtek: " Allen Pais
` (2 subsequent siblings)
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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>
---
.../net/wireless/ralink/rt2x00/rt2400pci.c | 14 ++++++-----
.../net/wireless/ralink/rt2x00/rt2500pci.c | 14 ++++++-----
.../net/wireless/ralink/rt2x00/rt2800mmio.c | 24 +++++++++++--------
.../net/wireless/ralink/rt2x00/rt2800mmio.h | 10 ++++----
drivers/net/wireless/ralink/rt2x00/rt2x00.h | 10 ++++----
.../net/wireless/ralink/rt2x00/rt2x00dev.c | 5 ++--
drivers/net/wireless/ralink/rt2x00/rt61pci.c | 20 +++++++++-------
7 files changed, 54 insertions(+), 43 deletions(-)
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
index c1ac933349d1..687a4686f3ae 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2400pci.c
@@ -1319,9 +1319,10 @@ static inline void rt2400pci_enable_interrupt(struct rt2x00_dev *rt2x00dev,
spin_unlock_irq(&rt2x00dev->irqmask_lock);
}
-static void rt2400pci_txstatus_tasklet(unsigned long data)
+static void rt2400pci_txstatus_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ txstatus_tasklet);
u32 reg;
/*
@@ -1347,17 +1348,18 @@ static void rt2400pci_txstatus_tasklet(unsigned long data)
}
}
-static void rt2400pci_tbtt_tasklet(unsigned long data)
+static void rt2400pci_tbtt_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, tbtt_tasklet);
rt2x00lib_beacondone(rt2x00dev);
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt2400pci_enable_interrupt(rt2x00dev, CSR8_TBCN_EXPIRE);
}
-static void rt2400pci_rxdone_tasklet(unsigned long data)
+static void rt2400pci_rxdone_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ rxdone_tasklet);
if (rt2x00mmio_rxdone(rt2x00dev))
tasklet_schedule(&rt2x00dev->rxdone_tasklet);
else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
index 0859adebd860..ea06041f594a 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2500pci.c
@@ -1447,9 +1447,10 @@ static inline void rt2500pci_enable_interrupt(struct rt2x00_dev *rt2x00dev,
spin_unlock_irq(&rt2x00dev->irqmask_lock);
}
-static void rt2500pci_txstatus_tasklet(unsigned long data)
+static void rt2500pci_txstatus_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ txstatus_tasklet);
u32 reg;
/*
@@ -1475,17 +1476,18 @@ static void rt2500pci_txstatus_tasklet(unsigned long data)
}
}
-static void rt2500pci_tbtt_tasklet(unsigned long data)
+static void rt2500pci_tbtt_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, tbtt_tasklet);
rt2x00lib_beacondone(rt2x00dev);
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt2500pci_enable_interrupt(rt2x00dev, CSR8_TBCN_EXPIRE);
}
-static void rt2500pci_rxdone_tasklet(unsigned long data)
+static void rt2500pci_rxdone_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ rxdone_tasklet);
if (rt2x00mmio_rxdone(rt2x00dev))
tasklet_schedule(&rt2x00dev->rxdone_tasklet);
else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
index 110bb391c372..d4fb3cc6d6a3 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.c
@@ -210,18 +210,19 @@ static inline void rt2800mmio_enable_interrupt(struct rt2x00_dev *rt2x00dev,
spin_unlock_irq(&rt2x00dev->irqmask_lock);
}
-void rt2800mmio_pretbtt_tasklet(unsigned long data)
+void rt2800mmio_pretbtt_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ pretbtt_tasklet);
rt2x00lib_pretbtt(rt2x00dev);
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt2800mmio_enable_interrupt(rt2x00dev, INT_MASK_CSR_PRE_TBTT);
}
EXPORT_SYMBOL_GPL(rt2800mmio_pretbtt_tasklet);
-void rt2800mmio_tbtt_tasklet(unsigned long data)
+void rt2800mmio_tbtt_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, tbtt_tasklet);
struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
u32 reg;
@@ -254,9 +255,10 @@ void rt2800mmio_tbtt_tasklet(unsigned long data)
}
EXPORT_SYMBOL_GPL(rt2800mmio_tbtt_tasklet);
-void rt2800mmio_rxdone_tasklet(unsigned long data)
+void rt2800mmio_rxdone_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ rxdone_tasklet);
if (rt2x00mmio_rxdone(rt2x00dev))
tasklet_schedule(&rt2x00dev->rxdone_tasklet);
else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
@@ -264,9 +266,10 @@ void rt2800mmio_rxdone_tasklet(unsigned long data)
}
EXPORT_SYMBOL_GPL(rt2800mmio_rxdone_tasklet);
-void rt2800mmio_autowake_tasklet(unsigned long data)
+void rt2800mmio_autowake_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ autowake_tasklet);
rt2800mmio_wakeup(rt2x00dev);
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt2800mmio_enable_interrupt(rt2x00dev,
@@ -307,9 +310,10 @@ static void rt2800mmio_fetch_txstatus(struct rt2x00_dev *rt2x00dev)
spin_unlock_irqrestore(&rt2x00dev->irqmask_lock, flags);
}
-void rt2800mmio_txstatus_tasklet(unsigned long data)
+void rt2800mmio_txstatus_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ txstatus_tasklet);
rt2800_txdone(rt2x00dev, 16);
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
index adcd9d54ac1c..05708950f24d 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2800mmio.h
@@ -126,11 +126,11 @@ void rt2800mmio_fill_rxdone(struct queue_entry *entry,
struct rxdone_entry_desc *rxdesc);
/* Interrupt functions */
-void rt2800mmio_txstatus_tasklet(unsigned long data);
-void rt2800mmio_pretbtt_tasklet(unsigned long data);
-void rt2800mmio_tbtt_tasklet(unsigned long data);
-void rt2800mmio_rxdone_tasklet(unsigned long data);
-void rt2800mmio_autowake_tasklet(unsigned long data);
+void rt2800mmio_txstatus_tasklet(struct tasklet_struct *t);
+void rt2800mmio_pretbtt_tasklet(struct tasklet_struct *t);
+void rt2800mmio_tbtt_tasklet(struct tasklet_struct *t);
+void rt2800mmio_rxdone_tasklet(struct tasklet_struct *t);
+void rt2800mmio_autowake_tasklet(struct tasklet_struct *t);
irqreturn_t rt2800mmio_interrupt(int irq, void *dev_instance);
void rt2800mmio_toggle_irq(struct rt2x00_dev *rt2x00dev,
enum dev_state state);
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00.h b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
index ecc60d8cbb01..780be81863b6 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00.h
@@ -518,11 +518,11 @@ struct rt2x00lib_ops {
/*
* TX status tasklet handler.
*/
- void (*txstatus_tasklet) (unsigned long data);
- void (*pretbtt_tasklet) (unsigned long data);
- void (*tbtt_tasklet) (unsigned long data);
- void (*rxdone_tasklet) (unsigned long data);
- void (*autowake_tasklet) (unsigned long data);
+ void (*txstatus_tasklet) (struct tasklet_struct *t);
+ void (*pretbtt_tasklet) (struct tasklet_struct *t);
+ void (*tbtt_tasklet) (struct tasklet_struct *t);
+ void (*rxdone_tasklet) (struct tasklet_struct *t);
+ void (*autowake_tasklet) (struct tasklet_struct *t);
/*
* Device init handlers.
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
index 8c6d3099b19d..b04f76551ca4 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
@@ -1167,9 +1167,8 @@ static int rt2x00lib_probe_hw(struct rt2x00_dev *rt2x00dev)
*/
#define RT2X00_TASKLET_INIT(taskletname) \
if (rt2x00dev->ops->lib->taskletname) { \
- tasklet_init(&rt2x00dev->taskletname, \
- rt2x00dev->ops->lib->taskletname, \
- (unsigned long)rt2x00dev); \
+ tasklet_setup(&rt2x00dev->taskletname, \
+ rt2x00dev->ops->lib->taskletname); \
}
RT2X00_TASKLET_INIT(txstatus_tasklet);
diff --git a/drivers/net/wireless/ralink/rt2x00/rt61pci.c b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
index eefce76fc99b..146675ee34c4 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt61pci.c
@@ -2190,34 +2190,38 @@ static void rt61pci_enable_mcu_interrupt(struct rt2x00_dev *rt2x00dev,
spin_unlock_irq(&rt2x00dev->irqmask_lock);
}
-static void rt61pci_txstatus_tasklet(unsigned long data)
+static void rt61pci_txstatus_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ txstatus_tasklet);
+
rt61pci_txdone(rt2x00dev);
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt61pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_TXDONE);
}
-static void rt61pci_tbtt_tasklet(unsigned long data)
+static void rt61pci_tbtt_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t, tbtt_tasklet);
rt2x00lib_beacondone(rt2x00dev);
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt61pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_BEACON_DONE);
}
-static void rt61pci_rxdone_tasklet(unsigned long data)
+static void rt61pci_rxdone_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ rxdone_tasklet);
if (rt2x00mmio_rxdone(rt2x00dev))
tasklet_schedule(&rt2x00dev->rxdone_tasklet);
else if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt61pci_enable_interrupt(rt2x00dev, INT_MASK_CSR_RXDONE);
}
-static void rt61pci_autowake_tasklet(unsigned long data)
+static void rt61pci_autowake_tasklet(struct tasklet_struct *t)
{
- struct rt2x00_dev *rt2x00dev = (struct rt2x00_dev *)data;
+ struct rt2x00_dev *rt2x00dev = from_tasklet(rt2x00dev, t,
+ autowake_tasklet);
rt61pci_wakeup(rt2x00dev);
rt2x00mmio_register_write(rt2x00dev,
M2H_CMD_DONE_CSR, 0xffffffff);
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 15/16] wireless: realtek: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (13 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 14/16] wireless: ralink: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-17 9:06 ` [PATCH 16/16] wireless: zydas: " Allen Pais
2020-08-18 5:44 ` [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Jiri Slaby
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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
and remove .data field.
Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
drivers/net/wireless/realtek/rtlwifi/pci.c | 21 ++++++++++-----------
drivers/net/wireless/realtek/rtlwifi/usb.c | 9 ++++-----
drivers/net/wireless/realtek/rtw88/main.c | 3 +--
drivers/net/wireless/realtek/rtw88/tx.c | 4 ++--
drivers/net/wireless/realtek/rtw88/tx.h | 2 +-
5 files changed, 18 insertions(+), 21 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c
index 25335bd2873b..42099369fa35 100644
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
@@ -1061,16 +1061,18 @@ static irqreturn_t _rtl_pci_interrupt(int irq, void *dev_id)
return ret;
}
-static void _rtl_pci_irq_tasklet(unsigned long data)
+static void _rtl_pci_irq_tasklet(struct tasklet_struct *t)
{
- struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
+ struct rtl_priv *rtlpriv = from_tasklet(rtlpriv, t, works.irq_tasklet);
+ struct ieee80211_hw *hw = rtlpriv->hw;
_rtl_pci_tx_chk_waitq(hw);
}
-static void _rtl_pci_prepare_bcn_tasklet(unsigned long data)
+static void _rtl_pci_prepare_bcn_tasklet(struct tasklet_struct *t)
{
- struct ieee80211_hw *hw = (struct ieee80211_hw *)data;
- struct rtl_priv *rtlpriv = rtl_priv(hw);
+ struct rtl_priv *rtlpriv = from_tasklet(rtlpriv, t,
+ works.irq_prepare_bcn_tasklet);
+ struct ieee80211_hw *hw = rtlpriv->hw;
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
struct rtl8192_tx_ring *ring = NULL;
@@ -1194,12 +1196,9 @@ static void _rtl_pci_init_struct(struct ieee80211_hw *hw,
rtlpci->acm_method = EACMWAY2_SW;
/*task */
- tasklet_init(&rtlpriv->works.irq_tasklet,
- _rtl_pci_irq_tasklet,
- (unsigned long)hw);
- tasklet_init(&rtlpriv->works.irq_prepare_bcn_tasklet,
- _rtl_pci_prepare_bcn_tasklet,
- (unsigned long)hw);
+ tasklet_setup(&rtlpriv->works.irq_tasklet, _rtl_pci_irq_tasklet);
+ tasklet_setup(&rtlpriv->works.irq_prepare_bcn_tasklet,
+ _rtl_pci_prepare_bcn_tasklet);
INIT_WORK(&rtlpriv->works.lps_change_work,
rtl_lps_change_work_callback);
}
diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
index d05e709536ea..8740818e8d87 100644
--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
@@ -289,7 +289,7 @@ static int _rtl_usb_init_tx(struct ieee80211_hw *hw)
return 0;
}
-static void _rtl_rx_work(unsigned long param);
+static void _rtl_rx_work(struct tasklet_struct *t);
static int _rtl_usb_init_rx(struct ieee80211_hw *hw)
{
@@ -310,8 +310,7 @@ static int _rtl_usb_init_rx(struct ieee80211_hw *hw)
init_usb_anchor(&rtlusb->rx_cleanup_urbs);
skb_queue_head_init(&rtlusb->rx_queue);
- rtlusb->rx_work_tasklet.func = _rtl_rx_work;
- rtlusb->rx_work_tasklet.data = (unsigned long)rtlusb;
+ rtlusb->rx_work_tasklet.func = (void(*)(unsigned long))_rtl_rx_work;
return 0;
}
@@ -528,9 +527,9 @@ static void _rtl_rx_pre_process(struct ieee80211_hw *hw, struct sk_buff *skb)
#define __RX_SKB_MAX_QUEUED 64
-static void _rtl_rx_work(unsigned long param)
+static void _rtl_rx_work(struct tasklet_struct *t)
{
- struct rtl_usb *rtlusb = (struct rtl_usb *)param;
+ struct rtl_usb *rtlusb = from_tasklet(rtlusb, t, rx_work_tasklet);
struct ieee80211_hw *hw = usb_get_intfdata(rtlusb->intf);
struct sk_buff *skb;
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index 54044abf30d7..6719c687a322 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -1422,8 +1422,7 @@ int rtw_core_init(struct rtw_dev *rtwdev)
timer_setup(&rtwdev->tx_report.purge_timer,
rtw_tx_report_purge_timer, 0);
- tasklet_init(&rtwdev->tx_tasklet, rtw_tx_tasklet,
- (unsigned long)rtwdev);
+ tasklet_setup(&rtwdev->tx_tasklet, rtw_tx_tasklet);
INIT_DELAYED_WORK(&rtwdev->watch_dog_work, rtw_watch_dog_work);
INIT_DELAYED_WORK(&coex->bt_relink_work, rtw_coex_bt_relink_work);
diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c
index 7fcc992b01a8..ca8072177ae3 100644
--- a/drivers/net/wireless/realtek/rtw88/tx.c
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
@@ -587,9 +587,9 @@ static void rtw_txq_push(struct rtw_dev *rtwdev,
rcu_read_unlock();
}
-void rtw_tx_tasklet(unsigned long data)
+void rtw_tx_tasklet(struct tasklet_struct *t)
{
- struct rtw_dev *rtwdev = (void *)data;
+ struct rtw_dev *rtwdev = from_tasklet(rtwdev, t, tx_tasklet);
struct rtw_txq *rtwtxq, *tmp;
spin_lock_bh(&rtwdev->txq_lock);
diff --git a/drivers/net/wireless/realtek/rtw88/tx.h b/drivers/net/wireless/realtek/rtw88/tx.h
index cfe84eef5923..6673dbcaa21c 100644
--- a/drivers/net/wireless/realtek/rtw88/tx.h
+++ b/drivers/net/wireless/realtek/rtw88/tx.h
@@ -94,7 +94,7 @@ void rtw_tx(struct rtw_dev *rtwdev,
struct sk_buff *skb);
void rtw_txq_init(struct rtw_dev *rtwdev, struct ieee80211_txq *txq);
void rtw_txq_cleanup(struct rtw_dev *rtwdev, struct ieee80211_txq *txq);
-void rtw_tx_tasklet(unsigned long data);
+void rtw_tx_tasklet(struct tasklet_struct *t);
void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev,
struct rtw_tx_pkt_info *pkt_info,
struct ieee80211_sta *sta,
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH 16/16] wireless: zydas: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (14 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 15/16] wireless: realtek: " Allen Pais
@ 2020-08-17 9:06 ` Allen Pais
2020-08-18 5:44 ` [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Jiri Slaby
16 siblings, 0 replies; 31+ messages in thread
From: Allen Pais @ 2020-08-17 9:06 UTC (permalink / raw)
To: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
From: Allen Pais <allen.lkml@gmail.com>
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
and remove .data fieldd
Signed-off-by: Romain Perier <romain.perier@gmail.com>
Signed-off-by: Allen Pais <allen.lkml@gmail.com>
---
drivers/net/wireless/zydas/zd1211rw/zd_usb.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
index 65b5985ad402..8b3d248bac6e 100644
--- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
+++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
@@ -1140,9 +1140,9 @@ static void zd_rx_idle_timer_handler(struct work_struct *work)
zd_usb_reset_rx(usb);
}
-static void zd_usb_reset_rx_idle_timer_tasklet(unsigned long param)
+static void zd_usb_reset_rx_idle_timer_tasklet(struct tasklet_struct *t)
{
- struct zd_usb *usb = (struct zd_usb *)param;
+ struct zd_usb *usb = from_tasklet(usb, t, rx.reset_timer_tasklet);
zd_usb_reset_rx_idle_timer(usb);
}
@@ -1178,8 +1178,8 @@ static inline void init_usb_rx(struct zd_usb *usb)
}
ZD_ASSERT(rx->fragment_length == 0);
INIT_DELAYED_WORK(&rx->idle_work, zd_rx_idle_timer_handler);
- rx->reset_timer_tasklet.func = zd_usb_reset_rx_idle_timer_tasklet;
- rx->reset_timer_tasklet.data = (unsigned long)usb;
+ rx->reset_timer_tasklet.func = (void (*)(unsigned long))
+ zd_usb_reset_rx_idle_timer_tasklet;
}
static inline void init_usb_tx(struct zd_usb *usb)
--
2.17.1
^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH 07/16] wireless: brcm80211: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 07/16] wireless: brcm80211: " Allen Pais
@ 2020-08-17 10:15 ` Arend Van Spriel
0 siblings, 0 replies; 31+ messages in thread
From: Arend Van Spriel @ 2020-08-17 10:15 UTC (permalink / raw)
To: Allen Pais, kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
On 8/17/2020 11:06 AM, Allen Pais wrote:
> From: Allen Pais <allen.lkml@gmail.com>
>
> 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.
Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
> Signed-off-by: Romain Perier <romain.perier@gmail.com>
> Signed-off-by: Allen Pais <allen.lkml@gmail.com>
> ---
> .../net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c | 6 +++---
> .../net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.h | 2 +-
> 2 files changed, 4 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 03/16] wireless: ath: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 03/16] wireless: ath: " Allen Pais
@ 2020-08-17 19:12 ` Christian Lamparter
2020-08-27 10:21 ` Kalle Valo
1 sibling, 0 replies; 31+ messages in thread
From: Christian Lamparter @ 2020-08-17 19:12 UTC (permalink / raw)
To: Allen Pais, kvalo, kuba; +Cc: linux-wireless, netdev, Allen Pais, Romain Perier
Hello,
looking at the other patches in this series, I think this patch's
subject "ath:" tag was supposed to be "carl9170:"?
(so the full subject is:
"wireless: carl9170: convert tasklets to use new tasklet_setup() API")
On 2020-08-17 11:06, Allen Pais wrote:
> From: Allen Pais <allen.lkml@gmail.com>
>
> 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>
Seems to work.
Acked-by: Christian Lamparter <chunkeey@gmail.com>
> ---
> drivers/net/wireless/ath/carl9170/usb.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/carl9170/usb.c b/drivers/net/wireless/ath/carl9170/usb.c
> index ead79335823a..e4eb666c6eea 100644
> --- a/drivers/net/wireless/ath/carl9170/usb.c
> +++ b/drivers/net/wireless/ath/carl9170/usb.c
> @@ -377,9 +377,9 @@ void carl9170_usb_handle_tx_err(struct ar9170 *ar)
> }
> }
>
> -static void carl9170_usb_tasklet(unsigned long data)
> +static void carl9170_usb_tasklet(struct tasklet_struct *t)
> {
> - struct ar9170 *ar = (struct ar9170 *) data;
> + struct ar9170 *ar = from_tasklet(ar, t, usb_tasklet);
>
> if (!IS_INITIALIZED(ar))
> return;
> @@ -1082,8 +1082,7 @@ static int carl9170_usb_probe(struct usb_interface *intf,
> init_completion(&ar->cmd_wait);
> init_completion(&ar->fw_boot_wait);
> init_completion(&ar->fw_load_wait);
> - tasklet_init(&ar->usb_tasklet, carl9170_usb_tasklet,
> - (unsigned long)ar);
> + tasklet_setup(&ar->usb_tasklet, carl9170_usb_tasklet);
>
> atomic_set(&ar->tx_cmd_urbs, 0);
> atomic_set(&ar->tx_anch_urbs, 0);
>
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup()
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
` (15 preceding siblings ...)
2020-08-17 9:06 ` [PATCH 16/16] wireless: zydas: " Allen Pais
@ 2020-08-18 5:44 ` Jiri Slaby
2020-08-18 9:14 ` Allen
16 siblings, 1 reply; 31+ messages in thread
From: Jiri Slaby @ 2020-08-18 5:44 UTC (permalink / raw)
To: Allen Pais, kvalo, kuba, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune
Cc: keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais
On 17. 08. 20, 11:06, Allen Pais wrote:
> From: Allen Pais <allen.lkml@gmail.com>
>
> Commit 12cc923f1ccc ("tasklet: Introduce new initialization API")'
> introduced a new tasklet initialization API. This series converts
> all the wireless drivers to use the new tasklet_setup() API
General question for the whole series: have you considered the long-term
aim instead? That is: convert away from tasklets completely? I.e. use
threaded irqs or workqueues?
thanks,
--
js
suse labs
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup()
2020-08-18 5:44 ` [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Jiri Slaby
@ 2020-08-18 9:14 ` Allen
0 siblings, 0 replies; 31+ messages in thread
From: Allen @ 2020-08-18 9:14 UTC (permalink / raw)
To: Jiri Slaby
Cc: Allen Pais, Kalle Valo, kuba, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune, Kees Cook, ath11k, linux-kernel, linux-wireless, netdev,
b43-dev, brcm80211-dev-list.pdl, brcm80211-dev-list
>
> General question for the whole series: have you considered the long-term
> aim instead? That is: convert away from tasklets completely? I.e. use
> threaded irqs or workqueues?
>
Yes, since changing tasklets to workqueues or threaded irqs
becomes a little trivial when it comes to tree-wide change, this
approach was considered. I am open to both.
--
- Allen
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API Allen Pais
@ 2020-08-27 10:15 ` Kalle Valo
[not found] ` <20200827101540.6589BC433CB@smtp.codeaurora.org>
1 sibling, 0 replies; 31+ messages in thread
From: Kalle Valo @ 2020-08-27 10:15 UTC (permalink / raw)
To: Allen Pais
Cc: kuba, jirislaby, mickflemm, mcgrof, chunkeey, Larry.Finger,
stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd, kune,
keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
Allen Pais <allen.cryptic@gmail.com> 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>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Patch applied to ath-next branch of ath.git, thanks.
c068a9ec3c94 ath5k: convert tasklets to use new tasklet_setup() API
--
https://patchwork.kernel.org/patch/11717393/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 02/16] wireless: ath9k: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 02/16] wireless: ath9k: " Allen Pais
@ 2020-08-27 10:16 ` Kalle Valo
0 siblings, 0 replies; 31+ messages in thread
From: Kalle Valo @ 2020-08-27 10:16 UTC (permalink / raw)
To: Allen Pais
Cc: kuba, jirislaby, mickflemm, mcgrof, chunkeey, Larry.Finger,
stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd, kune,
keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
Allen Pais <allen.cryptic@gmail.com> 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>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Patch applied to ath-next branch of ath.git, thanks.
f91a35b46af0 ath9k: convert tasklets to use new tasklet_setup() API
--
https://patchwork.kernel.org/patch/11717397/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 03/16] wireless: ath: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 03/16] wireless: ath: " Allen Pais
2020-08-17 19:12 ` Christian Lamparter
@ 2020-08-27 10:21 ` Kalle Valo
1 sibling, 0 replies; 31+ messages in thread
From: Kalle Valo @ 2020-08-27 10:21 UTC (permalink / raw)
To: Allen Pais
Cc: kuba, jirislaby, mickflemm, mcgrof, chunkeey, Larry.Finger,
stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd, kune,
keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
Allen Pais <allen.cryptic@gmail.com> 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>
> Acked-by: Christian Lamparter <chunkeey@gmail.com>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Patch applied to ath-next branch of ath.git, thanks.
de7dbc2dbef7 carl9170: convert tasklets to use new tasklet_setup() API
--
https://patchwork.kernel.org/patch/11717455/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API
[not found] ` <20200827101540.6589BC433CB@smtp.codeaurora.org>
@ 2020-08-27 10:44 ` Allen Pais
2020-09-07 16:32 ` Kalle Valo
0 siblings, 1 reply; 31+ messages in thread
From: Allen Pais @ 2020-08-27 10:44 UTC (permalink / raw)
To: Kalle Valo
Cc: Jakub Kicinski, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune, Kees Cook, ath11k, linux-kernel, linux-wireless, netdev,
b43-dev, brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
Hi,
>
> Allen Pais <allen.cryptic@gmail.com> 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>
> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>
> Patch applied to ath-next branch of ath.git, thanks.
>
> c068a9ec3c94 ath5k: convert tasklets to use new tasklet_setup() API
>
> --
> https://patchwork.kernel.org/patch/11717393/
>
> https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Could you please drop these and wait for V2. A change was proposed
for from_tasklet() api. The new API should be picked shortly. I will send out
the updated version early next week.
Thanks,
- Allen
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [05/16] atmel: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 05/16] wireless: atmel: " Allen Pais
@ 2020-08-27 13:23 ` Kalle Valo
2020-08-27 18:17 ` Kees Cook
0 siblings, 1 reply; 31+ messages in thread
From: Kalle Valo @ 2020-08-27 13:23 UTC (permalink / raw)
To: Allen Pais
Cc: kuba, jirislaby, mickflemm, mcgrof, chunkeey, Larry.Finger,
stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd, kune,
keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
Allen Pais <allen.cryptic@gmail.com> wrote:
> From: Allen Pais <allen.lkml@gmail.com>
>
> 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
> and remove .data field.
>
> Signed-off-by: Romain Perier <romain.perier@gmail.com>
> Signed-off-by: Allen Pais <allen.lkml@gmail.com>
11 patches applied to wireless-drivers-next.git, thanks.
a36f50e5b937 atmel: convert tasklets to use new tasklet_setup() API
fc6722301428 b43legacy: convert tasklets to use new tasklet_setup() API
427a06beb072 brcmsmac: convert tasklets to use new tasklet_setup() API
ae6cf59f80f7 ipw2x00: convert tasklets to use new tasklet_setup() API
b81b9d372ac8 iwlegacy: convert tasklets to use new tasklet_setup() API
7433c9690318 intersil: convert tasklets to use new tasklet_setup() API
51c41aa93ef5 mwl8k: convert tasklets to use new tasklet_setup() API
aff8e8d02ec2 qtnfmac: convert tasklets to use new tasklet_setup() API
a0d6ea9b6e1c rt2x00: convert tasklets to use new tasklet_setup() API
d3ccc14dfe95 rtlwifi/rtw88: convert tasklets to use new tasklet_setup() API
26721b02466e zd1211rw: convert tasklets to use new tasklet_setup() API
--
https://patchwork.kernel.org/patch/11717451/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [05/16] atmel: convert tasklets to use new tasklet_setup() API
2020-08-27 13:23 ` [05/16] " Kalle Valo
@ 2020-08-27 18:17 ` Kees Cook
0 siblings, 0 replies; 31+ messages in thread
From: Kees Cook @ 2020-08-27 18:17 UTC (permalink / raw)
To: Kalle Valo
Cc: Allen Pais, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
On Thu, Aug 27, 2020 at 01:23:20PM +0000, Kalle Valo wrote:
> Allen Pais <allen.cryptic@gmail.com> wrote:
>
> > From: Allen Pais <allen.lkml@gmail.com>
> >
> > 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
> > and remove .data field.
> >
> > Signed-off-by: Romain Perier <romain.perier@gmail.com>
> > Signed-off-by: Allen Pais <allen.lkml@gmail.com>
>
> 11 patches applied to wireless-drivers-next.git, thanks.
>
> a36f50e5b937 atmel: convert tasklets to use new tasklet_setup() API
> fc6722301428 b43legacy: convert tasklets to use new tasklet_setup() API
> 427a06beb072 brcmsmac: convert tasklets to use new tasklet_setup() API
> ae6cf59f80f7 ipw2x00: convert tasklets to use new tasklet_setup() API
> b81b9d372ac8 iwlegacy: convert tasklets to use new tasklet_setup() API
> 7433c9690318 intersil: convert tasklets to use new tasklet_setup() API
> 51c41aa93ef5 mwl8k: convert tasklets to use new tasklet_setup() API
> aff8e8d02ec2 qtnfmac: convert tasklets to use new tasklet_setup() API
> a0d6ea9b6e1c rt2x00: convert tasklets to use new tasklet_setup() API
> d3ccc14dfe95 rtlwifi/rtw88: convert tasklets to use new tasklet_setup() API
> 26721b02466e zd1211rw: convert tasklets to use new tasklet_setup() API
>
> --
> https://patchwork.kernel.org/patch/11717451/
>
> https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
FWIW, I don't think a revert is needed here to wait for the from_tasket()
-> container_from() API to land since from_tasklet() is already being
used by other trees. Let's just get this done so we can get closer to
ripping out the old tasklet API. We'll have to do a treewide
from_timer(), from_tasklet() -> container_from() anyway...
--
Kees Cook
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 04/16] wireless: ath11k: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 04/16] wireless: ath11k: " Allen Pais
@ 2020-08-31 15:14 ` Kalle Valo
0 siblings, 0 replies; 31+ messages in thread
From: Kalle Valo @ 2020-08-31 15:14 UTC (permalink / raw)
To: Allen Pais
Cc: kuba, jirislaby, mickflemm, mcgrof, chunkeey, Larry.Finger,
stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd, kune,
keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais
Allen Pais <allen.cryptic@gmail.com> 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: Allen Pais <allen.lkml@gmail.com>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Patch applied to ath-next branch of ath.git, thanks.
c08279a93191 ath11k: convert tasklets to use new tasklet_setup() API
--
https://patchwork.kernel.org/patch/11717399/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 12/16] wireless: mediatek: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 12/16] wireless: mediatek: " Allen Pais
@ 2020-09-01 9:25 ` Kalle Valo
0 siblings, 0 replies; 31+ messages in thread
From: Kalle Valo @ 2020-09-01 9:25 UTC (permalink / raw)
To: Allen Pais
Cc: kuba, jirislaby, mickflemm, mcgrof, chunkeey, Larry.Finger,
stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd, kune,
keescook, ath11k, linux-kernel, linux-wireless, netdev, b43-dev,
brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
Allen Pais <allen.cryptic@gmail.com> wrote:
> From: Allen Pais <allen.lkml@gmail.com>
>
> 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>
Please split this patch into two, mt76 and mt7601u patches go into
separate trees.
Patch set to Changes Requested.
--
https://patchwork.kernel.org/patch/11717429/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API
2020-08-27 10:44 ` Allen Pais
@ 2020-09-07 16:32 ` Kalle Valo
0 siblings, 0 replies; 31+ messages in thread
From: Kalle Valo @ 2020-09-07 16:32 UTC (permalink / raw)
To: Allen Pais
Cc: Allen Pais, chunkeey, jirislaby, brcm80211-dev-list, pkshih,
b43-dev, dsd, ath11k, kune, mickflemm, Kees Cook, Jakub Kicinski,
brcm80211-dev-list.pdl, yhchuang, netdev, helmut.schaa,
linux-wireless, linux-kernel, mcgrof, stas.yakovlev,
Romain Perier, Larry.Finger
Allen Pais <allen.cryptic@gmail.com> writes:
> Hi,
>>
>> Allen Pais <allen.cryptic@gmail.com> 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>
>> > Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
>>
>> Patch applied to ath-next branch of ath.git, thanks.
>>
>> c068a9ec3c94 ath5k: convert tasklets to use new tasklet_setup() API
>>
>> --
>> https://patchwork.kernel.org/patch/11717393/
>>
>> https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
>
> Could you please drop these and wait for V2. A change was proposed
> for from_tasklet() api. The new API should be picked shortly. I will send out
> the updated version early next week.
Too late, I don't normally rebase my trees as it's just too much of a
hassle. Please don't submit patches which are not ready to be applied!
--
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH 10/16] wireless: intersil: convert tasklets to use new tasklet_setup() API
2020-08-17 9:06 ` [PATCH 10/16] wireless: intersil: " Allen Pais
@ 2020-09-16 13:44 ` Lee Jones
0 siblings, 0 replies; 31+ messages in thread
From: Lee Jones @ 2020-09-16 13:44 UTC (permalink / raw)
To: Allen Pais
Cc: kvalo, kuba, jirislaby, mickflemm, mcgrof, chunkeey,
Larry.Finger, stas.yakovlev, helmut.schaa, pkshih, yhchuang, dsd,
kune, keescook, ath11k, linux-kernel, linux-wireless, netdev,
b43-dev, brcm80211-dev-list.pdl, brcm80211-dev-list, Allen Pais,
Romain Perier
On Mon, 17 Aug 2020, Allen Pais wrote:
> From: Allen Pais <allen.lkml@gmail.com>
>
> 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
> and remove .data field.
>
> Signed-off-by: Romain Perier <romain.perier@gmail.com>
> Signed-off-by: Allen Pais <allen.lkml@gmail.com>
> ---
> .../net/wireless/intersil/hostap/hostap_hw.c | 18 +++++++++---------
> drivers/net/wireless/intersil/orinoco/main.c | 7 +++----
> drivers/net/wireless/intersil/p54/p54pci.c | 8 ++++----
> 3 files changed, 16 insertions(+), 17 deletions(-)
This patch seems to cause several warnings along the lines of:
drivers/net/wireless/intersil/hostap/hostap_hw.c: In function ‘prism2_init_local_data’:
drivers/net/wireless/intersil/hostap/hostap_hw.c:3185:48: warning: cast between incompatible function types from ‘void (*)(struct tasklet_struct *)’ to ‘void (*)(long unsigned int)’ [-Wcast-function-type]
3185 | do { memset((q), 0, sizeof(*(q))); (q)->func = (void(*)(unsigned long))(f); } | ^
drivers/net/wireless/intersil/hostap/hostap_hw.c:3187:2: note: in expansion of macro ‘HOSTAP_TASKLET_INIT’
3187 | HOSTAP_TASKLET_INIT(&local->bap_tasklet, hostap_bap_tasklet,
| ^~~~~~~~~~~~~~~~~~~
drivers/net/wireless/intersil/hostap/hostap_hw.c:3185:48: warning: cast between incompatible function types from ‘void (*)(struct tasklet_struct *)’ to ‘void (*)(long unsigned int)’ [-Wcast-function-type]
--
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2020-09-16 19:02 UTC | newest]
Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-17 9:06 [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Allen Pais
2020-08-17 9:06 ` [PATCH 01/16] wireless: ath5k: convert tasklets to use new tasklet_setup() API Allen Pais
2020-08-27 10:15 ` Kalle Valo
[not found] ` <20200827101540.6589BC433CB@smtp.codeaurora.org>
2020-08-27 10:44 ` Allen Pais
2020-09-07 16:32 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 02/16] wireless: ath9k: " Allen Pais
2020-08-27 10:16 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 03/16] wireless: ath: " Allen Pais
2020-08-17 19:12 ` Christian Lamparter
2020-08-27 10:21 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 04/16] wireless: ath11k: " Allen Pais
2020-08-31 15:14 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 05/16] wireless: atmel: " Allen Pais
2020-08-27 13:23 ` [05/16] " Kalle Valo
2020-08-27 18:17 ` Kees Cook
2020-08-17 9:06 ` [PATCH 06/16] wireless: b43legacy: " Allen Pais
2020-08-17 9:06 ` [PATCH 07/16] wireless: brcm80211: " Allen Pais
2020-08-17 10:15 ` Arend Van Spriel
2020-08-17 9:06 ` [PATCH 08/16] wireless: ipw2x00: " Allen Pais
2020-08-17 9:06 ` [PATCH 09/16] wireless: iwlegacy: " Allen Pais
2020-08-17 9:06 ` [PATCH 10/16] wireless: intersil: " Allen Pais
2020-09-16 13:44 ` Lee Jones
2020-08-17 9:06 ` [PATCH 11/16] wireless: marvell: " Allen Pais
2020-08-17 9:06 ` [PATCH 12/16] wireless: mediatek: " Allen Pais
2020-09-01 9:25 ` Kalle Valo
2020-08-17 9:06 ` [PATCH 13/16] wireless: quantenna: " Allen Pais
2020-08-17 9:06 ` [PATCH 14/16] wireless: ralink: " Allen Pais
2020-08-17 9:06 ` [PATCH 15/16] wireless: realtek: " Allen Pais
2020-08-17 9:06 ` [PATCH 16/16] wireless: zydas: " Allen Pais
2020-08-18 5:44 ` [PATCH 00/16] wirless: convert tasklets to use new tasklet_setup() Jiri Slaby
2020-08-18 9:14 ` Allen
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).