Add two patches from Seth Forshee to fix brcmsmac backtrace
This commit is contained in:
parent
99c4e998b3
commit
7eb10928fe
54
brcmsmac-use-channel-flags-to-restrict-OFDM.patch
Normal file
54
brcmsmac-use-channel-flags-to-restrict-OFDM.patch
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
brcmsmac cannot call freq_reg_info() during channel changes as it does
|
||||||
|
not hold cfg80211_lock, and as a result it generates a lockdep warning.
|
||||||
|
freq_reg_info() is being used to determine whether OFDM is allowed on
|
||||||
|
the current channel, so we can avoid the errant call by using the new
|
||||||
|
IEEE80211_CHAN_NO_OFDM for this purpose instead.
|
||||||
|
|
||||||
|
Reported-by: Josh Boyer <jwboyer@redhat.com>
|
||||||
|
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
|
||||||
|
---
|
||||||
|
drivers/net/wireless/brcm80211/brcmsmac/channel.c | 5 +----
|
||||||
|
.../net/wireless/brcm80211/brcmsmac/mac80211_if.c | 3 ++-
|
||||||
|
2 files changed, 3 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/channel.c b/drivers/net/wireless/brcm80211/brcmsmac/channel.c
|
||||||
|
index 9a4c63f..7ed7d75 100644
|
||||||
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/channel.c
|
||||||
|
+++ b/drivers/net/wireless/brcm80211/brcmsmac/channel.c
|
||||||
|
@@ -382,9 +382,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec,
|
||||||
|
{
|
||||||
|
struct brcms_c_info *wlc = wlc_cm->wlc;
|
||||||
|
struct ieee80211_channel *ch = wlc->pub->ieee_hw->conf.channel;
|
||||||
|
- const struct ieee80211_reg_rule *reg_rule;
|
||||||
|
struct txpwr_limits txpwr;
|
||||||
|
- int ret;
|
||||||
|
|
||||||
|
brcms_c_channel_reg_limits(wlc_cm, chanspec, &txpwr);
|
||||||
|
|
||||||
|
@@ -393,8 +391,7 @@ brcms_c_channel_set_chanspec(struct brcms_cm_info *wlc_cm, u16 chanspec,
|
||||||
|
);
|
||||||
|
|
||||||
|
/* set or restore gmode as required by regulatory */
|
||||||
|
- ret = freq_reg_info(wlc->wiphy, ch->center_freq, 0, ®_rule);
|
||||||
|
- if (!ret && (reg_rule->flags & NL80211_RRF_NO_OFDM))
|
||||||
|
+ if (ch->flags & IEEE80211_CHAN_NO_OFDM)
|
||||||
|
brcms_c_set_gmode(wlc, GMODE_LEGACY_B, false);
|
||||||
|
else
|
||||||
|
brcms_c_set_gmode(wlc, wlc->protection->gmode_user, false);
|
||||||
|
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||||
|
index 9e79d47..192ad5c 100644
|
||||||
|
--- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||||
|
+++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
|
||||||
|
@@ -121,7 +121,8 @@ static struct ieee80211_channel brcms_2ghz_chantable[] = {
|
||||||
|
IEEE80211_CHAN_NO_HT40PLUS),
|
||||||
|
CHAN2GHZ(14, 2484,
|
||||||
|
IEEE80211_CHAN_PASSIVE_SCAN | IEEE80211_CHAN_NO_IBSS |
|
||||||
|
- IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS)
|
||||||
|
+ IEEE80211_CHAN_NO_HT40PLUS | IEEE80211_CHAN_NO_HT40MINUS |
|
||||||
|
+ IEEE80211_CHAN_NO_OFDM)
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct ieee80211_channel brcms_5ghz_nphy_chantable[] = {
|
||||||
|
--
|
||||||
|
1.7.9.5
|
||||||
|
|
53
cfg80211-add-channel-flag-to-prohibit-OFDM-operation.patch
Normal file
53
cfg80211-add-channel-flag-to-prohibit-OFDM-operation.patch
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
Currently the only way for wireless drivers to tell whether or not OFDM
|
||||||
|
is allowed on the current channel is to check the regulatory
|
||||||
|
information. However, this requires hodling cfg80211_mutex, which is not
|
||||||
|
visible to the drivers.
|
||||||
|
|
||||||
|
Other regulatory restrictions are provided as flags in the channel
|
||||||
|
definition, so let's do similarly with OFDM. This patch adds a new flag,
|
||||||
|
IEEE80211_CHAN_NO_OFDM, to tell drivers that OFDM on a channel is not
|
||||||
|
allowed. This flag is set on any channels for which regulatory indicates
|
||||||
|
that OFDM is prohibited.
|
||||||
|
|
||||||
|
Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
|
||||||
|
---
|
||||||
|
include/net/cfg80211.h | 2 ++
|
||||||
|
net/wireless/reg.c | 2 ++
|
||||||
|
2 files changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
|
||||||
|
index 493fa0c..3d254e1 100644
|
||||||
|
--- a/include/net/cfg80211.h
|
||||||
|
+++ b/include/net/cfg80211.h
|
||||||
|
@@ -96,6 +96,7 @@ enum ieee80211_band {
|
||||||
|
* is not permitted.
|
||||||
|
* @IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel
|
||||||
|
* is not permitted.
|
||||||
|
+ * @IEEE80211_CHAN_NO_OFDM: OFDM is not allowed on this channel.
|
||||||
|
*/
|
||||||
|
enum ieee80211_channel_flags {
|
||||||
|
IEEE80211_CHAN_DISABLED = 1<<0,
|
||||||
|
@@ -104,6 +105,7 @@ enum ieee80211_channel_flags {
|
||||||
|
IEEE80211_CHAN_RADAR = 1<<3,
|
||||||
|
IEEE80211_CHAN_NO_HT40PLUS = 1<<4,
|
||||||
|
IEEE80211_CHAN_NO_HT40MINUS = 1<<5,
|
||||||
|
+ IEEE80211_CHAN_NO_OFDM = 1<<6,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IEEE80211_CHAN_NO_HT40 \
|
||||||
|
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
|
||||||
|
index 2303ee7..0f3a8a1 100644
|
||||||
|
--- a/net/wireless/reg.c
|
||||||
|
+++ b/net/wireless/reg.c
|
||||||
|
@@ -680,6 +680,8 @@ static u32 map_regdom_flags(u32 rd_flags)
|
||||||
|
channel_flags |= IEEE80211_CHAN_NO_IBSS;
|
||||||
|
if (rd_flags & NL80211_RRF_DFS)
|
||||||
|
channel_flags |= IEEE80211_CHAN_RADAR;
|
||||||
|
+ if (rd_flags & NL80211_RRF_NO_OFDM)
|
||||||
|
+ channel_flags |= IEEE80211_CHAN_NO_OFDM;
|
||||||
|
return channel_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.9.5
|
||||||
|
|
11
kernel.spec
11
kernel.spec
@ -62,7 +62,7 @@ Summary: The Linux kernel
|
|||||||
# For non-released -rc kernels, this will be appended after the rcX and
|
# For non-released -rc kernels, this will be appended after the rcX and
|
||||||
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
|
||||||
#
|
#
|
||||||
%global baserelease 1
|
%global baserelease 2
|
||||||
%global fedora_build %{baserelease}
|
%global fedora_build %{baserelease}
|
||||||
|
|
||||||
# base_sublevel is the kernel version we're starting with and patching
|
# base_sublevel is the kernel version we're starting with and patching
|
||||||
@ -743,6 +743,9 @@ Patch22001: selinux-apply-different-permission-to-ptrace-child.patch
|
|||||||
#rhbz 836742
|
#rhbz 836742
|
||||||
Patch22059: uvcvideo-Reset-bytesused-field-when-recycling-erroneous-buffer.patch
|
Patch22059: uvcvideo-Reset-bytesused-field-when-recycling-erroneous-buffer.patch
|
||||||
|
|
||||||
|
Patch22062: cfg80211-add-channel-flag-to-prohibit-OFDM-operation.patch
|
||||||
|
Patch22063: brcmsmac-use-channel-flags-to-restrict-OFDM.patch
|
||||||
|
|
||||||
# END OF PATCH DEFINITIONS
|
# END OF PATCH DEFINITIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -1431,6 +1434,9 @@ ApplyPatch selinux-apply-different-permission-to-ptrace-child.patch
|
|||||||
#rhbz 836742
|
#rhbz 836742
|
||||||
ApplyPatch uvcvideo-Reset-bytesused-field-when-recycling-erroneous-buffer.patch
|
ApplyPatch uvcvideo-Reset-bytesused-field-when-recycling-erroneous-buffer.patch
|
||||||
|
|
||||||
|
ApplyPatch cfg80211-add-channel-flag-to-prohibit-OFDM-operation.patch
|
||||||
|
ApplyPatch brcmsmac-use-channel-flags-to-restrict-OFDM.patch
|
||||||
|
|
||||||
# END OF PATCH APPLICATIONS
|
# END OF PATCH APPLICATIONS
|
||||||
|
|
||||||
%endif
|
%endif
|
||||||
@ -2288,6 +2294,9 @@ fi
|
|||||||
# ||----w |
|
# ||----w |
|
||||||
# || ||
|
# || ||
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 02 2012 Josh Boyer <jwboyer@redhat.com>
|
||||||
|
- Add two patches from Seth Forshee to fix brcmsmac backtrace
|
||||||
|
|
||||||
* Thu Aug 02 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc0.git9.1
|
* Thu Aug 02 2012 Josh Boyer <jwboyer@redhat.com> - 3.6.0-0.rc0.git9.1
|
||||||
- Linux v3.5-9139-g1a9b499
|
- Linux v3.5-9139-g1a9b499
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user