mirror of https://github.com/hak5/openwrt-owl.git
ath9k: merge a fix for a race condition on init
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 40591owl
parent
11c23fded0
commit
5438bc68b5
|
@ -1,3 +1,18 @@
|
||||||
|
commit 8c7ae357cc5b6bd037ad2d666e9f3789cf882925
|
||||||
|
Author: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
|
||||||
|
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 <rmanohar@qti.qualcomm.com>
|
||||||
|
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||||
|
|
||||||
commit c82552c5b0cb1735dbcbad78b1ffc6d3c212dc56
|
commit c82552c5b0cb1735dbcbad78b1ffc6d3c212dc56
|
||||||
Author: Tim Harvey <tharvey@gateworks.com>
|
Author: Tim Harvey <tharvey@gateworks.com>
|
||||||
Date: Mon Apr 21 16:14:57 2014 -0700
|
Date: Mon Apr 21 16:14:57 2014 -0700
|
||||||
|
@ -308,3 +323,56 @@ Date: Sun Apr 6 23:35:28 2014 +0200
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
if (!(ah->imask & ATH9K_INT_RXEOL)) {
|
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:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
+++ b/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;
|
int error;
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,7 @@
|
||||||
void ath_fill_led_pin(struct ath_softc *sc)
|
void ath_fill_led_pin(struct ath_softc *sc)
|
||||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||||
+++ b/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
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
/* must be initialized before ieee80211_register_hw */
|
/* must be initialized before ieee80211_register_hw */
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||||
const struct ath_bus_ops *bus_ops)
|
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));
|
ARRAY_SIZE(ath9k_tpt_blink));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||||
ath9k_cmn_init_crypto(sc->sc_ah);
|
ath9k_cmn_init_crypto(sc->sc_ah);
|
||||||
ath9k_init_misc(sc);
|
ath9k_init_misc(sc);
|
||||||
ath_fill_led_pin(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;
|
int i = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue