28 lines
1.0 KiB
Diff
28 lines
1.0 KiB
Diff
|
Alexandre Oliva <oliva@lsd.ic.unicamp.br> sent me a patch:
|
||
|
|
||
|
"I see you ran into the same problem I did in brcmfmac. I wasn't sure a
|
||
|
build with compat-wireless would run into the same problem I did without
|
||
|
it and with Linux-libre.
|
||
|
|
||
|
It's an issue brought about by GCC 4.7's partial-inlining, that ends up
|
||
|
splitting the udelay function just at the wrong spot, in such a way that
|
||
|
some sanity checks for constants fails, and we end up calling
|
||
|
bad_udelay.
|
||
|
|
||
|
This patch fixes the problem. Feel free to push it upstream if it makes
|
||
|
sense to you."
|
||
|
|
||
|
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
|
||
|
index 5eddabe..eda1d4e 100644
|
||
|
--- a/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
|
||
|
+++ b/drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c
|
||
|
@@ -2463,7 +2463,7 @@ static s32 brcmf_init_iscan(struct brcmf_cfg80211_priv *cfg_priv)
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
-static void brcmf_delay(u32 ms)
|
||
|
+static __always_inline void brcmf_delay(u32 ms)
|
||
|
{
|
||
|
if (ms < 1000 / HZ) {
|
||
|
cond_resched();
|