From 5438bc68b57c3579fd79d99a1116c3bc2a412d67 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Tue, 29 Apr 2014 15:52:08 +0000 Subject: [PATCH] ath9k: merge a fix for a race condition on init Signed-off-by: Felix Fietkau SVN-Revision: 40591 --- .../mac80211/patches/300-pending_work.patch | 68 +++++++++++++++++++ .../mac80211/patches/502-ath9k_ahb_init.patch | 2 +- .../patches/530-ath9k_extra_leds.patch | 2 +- .../patches/550-ath9k_entropy_from_adc.patch | 2 +- .../patches/552-ath9k_p2p_ps_support.patch | 2 +- 5 files changed, 72 insertions(+), 4 deletions(-) diff --git a/package/kernel/mac80211/patches/300-pending_work.patch b/package/kernel/mac80211/patches/300-pending_work.patch index d6d042d460..1405cc3d72 100644 --- a/package/kernel/mac80211/patches/300-pending_work.patch +++ b/package/kernel/mac80211/patches/300-pending_work.patch @@ -1,3 +1,18 @@ +commit 8c7ae357cc5b6bd037ad2d666e9f3789cf882925 +Author: Rajkumar Manoharan +Date: Wed Apr 23 15:07:57 2014 +0530 + + ath9k: fix race in setting ATH_OP_INVALID + + The commit "ath9k: move sc_flags to ath_common" moved setting + ATH_OP_INVALID flag below ieee80211_register_hw. This is causing + the flag never being cleared randomly as the drv_start is called + prior to setting flag. Fix this by setting the flag prior to + register_hw. + + Signed-off-by: Rajkumar Manoharan + Signed-off-by: John W. Linville + commit c82552c5b0cb1735dbcbad78b1ffc6d3c212dc56 Author: Tim Harvey Date: Mon Apr 21 16:14:57 2014 -0700 @@ -308,3 +323,56 @@ Date: Sun Apr 6 23:35:28 2014 +0200 } while (1); if (!(ah->imask & ATH9K_INT_RXEOL)) { +--- a/drivers/net/wireless/ath/ath9k/ahb.c ++++ b/drivers/net/wireless/ath/ath9k/ahb.c +@@ -86,7 +86,6 @@ static int ath_ahb_probe(struct platform + int irq; + int ret = 0; + struct ath_hw *ah; +- struct ath_common *common; + char hw_name[64]; + + if (!dev_get_platdata(&pdev->dev)) { +@@ -146,9 +145,6 @@ static int ath_ahb_probe(struct platform + wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n", + hw_name, (unsigned long)mem, irq); + +- common = ath9k_hw_common(sc->sc_ah); +- /* Will be cleared in ath9k_start() */ +- set_bit(ATH_OP_INVALID, &common->op_flags); + return 0; + + err_irq: +--- a/drivers/net/wireless/ath/ath9k/init.c ++++ b/drivers/net/wireless/ath/ath9k/init.c +@@ -781,6 +781,9 @@ int ath9k_init_device(u16 devid, struct + common = ath9k_hw_common(ah); + ath9k_set_hw_capab(sc, hw); + ++ /* Will be cleared in ath9k_start() */ ++ set_bit(ATH_OP_INVALID, &common->op_flags); ++ + /* Initialize regulatory */ + error = ath_regd_init(&common->regulatory, sc->hw->wiphy, + ath9k_reg_notifier); +--- a/drivers/net/wireless/ath/ath9k/pci.c ++++ b/drivers/net/wireless/ath/ath9k/pci.c +@@ -784,7 +784,6 @@ static int ath_pci_probe(struct pci_dev + { + struct ath_softc *sc; + struct ieee80211_hw *hw; +- struct ath_common *common; + u8 csz; + u32 val; + int ret = 0; +@@ -877,10 +876,6 @@ static int ath_pci_probe(struct pci_dev + wiphy_info(hw->wiphy, "%s mem=0x%lx, irq=%d\n", + hw_name, (unsigned long)sc->mem, pdev->irq); + +- /* Will be cleared in ath9k_start() */ +- common = ath9k_hw_common(sc->sc_ah); +- set_bit(ATH_OP_INVALID, &common->op_flags); +- + return 0; + + err_init: diff --git a/package/kernel/mac80211/patches/502-ath9k_ahb_init.patch b/package/kernel/mac80211/patches/502-ath9k_ahb_init.patch index 43c3260b80..c1bdc6f925 100644 --- a/package/kernel/mac80211/patches/502-ath9k_ahb_init.patch +++ b/package/kernel/mac80211/patches/502-ath9k_ahb_init.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -892,23 +892,23 @@ static int __init ath9k_init(void) +@@ -895,23 +895,23 @@ static int __init ath9k_init(void) { int error; diff --git a/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch b/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch index fb24f03b02..1174a47092 100644 --- a/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch +++ b/package/kernel/mac80211/patches/530-ath9k_extra_leds.patch @@ -162,7 +162,7 @@ void ath_fill_led_pin(struct ath_softc *sc) --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -806,7 +806,7 @@ int ath9k_init_device(u16 devid, struct +@@ -809,7 +809,7 @@ int ath9k_init_device(u16 devid, struct #ifdef CPTCFG_MAC80211_LEDS /* must be initialized before ieee80211_register_hw */ diff --git a/package/kernel/mac80211/patches/550-ath9k_entropy_from_adc.patch b/package/kernel/mac80211/patches/550-ath9k_entropy_from_adc.patch index 54f5ced4c2..513c48d799 100644 --- a/package/kernel/mac80211/patches/550-ath9k_entropy_from_adc.patch +++ b/package/kernel/mac80211/patches/550-ath9k_entropy_from_adc.patch @@ -84,7 +84,7 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, const struct ath_bus_ops *bus_ops) { -@@ -813,6 +826,8 @@ int ath9k_init_device(u16 devid, struct +@@ -816,6 +829,8 @@ int ath9k_init_device(u16 devid, struct ARRAY_SIZE(ath9k_tpt_blink)); #endif diff --git a/package/kernel/mac80211/patches/552-ath9k_p2p_ps_support.patch b/package/kernel/mac80211/patches/552-ath9k_p2p_ps_support.patch index 1bd0a54112..e066a3808c 100644 --- a/package/kernel/mac80211/patches/552-ath9k_p2p_ps_support.patch +++ b/package/kernel/mac80211/patches/552-ath9k_p2p_ps_support.patch @@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau ath9k_cmn_init_crypto(sc->sc_ah); ath9k_init_misc(sc); ath_fill_led_pin(sc); -@@ -870,6 +873,9 @@ static void ath9k_deinit_softc(struct at +@@ -873,6 +876,9 @@ static void ath9k_deinit_softc(struct at { int i = 0;