summaryrefslogtreecommitdiffstats
path: root/freed-ora/current/f15
diff options
context:
space:
mode:
authorAlexandre Oliva <lxoliva@fsfla.org>2011-12-12 12:37:29 +0000
committerAlexandre Oliva <lxoliva@fsfla.org>2011-12-12 12:37:29 +0000
commit7a91eba8d3dc52e17d6dde65fd3b0056951007ee (patch)
tree30f2f5dfa39487f8104cccd2d1db92ee586ebcb5 /freed-ora/current/f15
parentb2ade11d23e52d5a48a71aafc5158f0e25f25ecf (diff)
downloadlinux-libre-raptor-7a91eba8d3dc52e17d6dde65fd3b0056951007ee.tar.gz
linux-libre-raptor-7a91eba8d3dc52e17d6dde65fd3b0056951007ee.zip
2.6.41.5-1.fc15
Diffstat (limited to 'freed-ora/current/f15')
-rw-r--r--freed-ora/current/f15/brcm80211.patch247
-rw-r--r--freed-ora/current/f15/config-arm-omap-generic1
-rw-r--r--freed-ora/current/f15/config-arm-tegra1
-rw-r--r--freed-ora/current/f15/config-generic5
-rw-r--r--freed-ora/current/f15/drm-intel-make-lvds-work.patch18
-rw-r--r--freed-ora/current/f15/elantech.patch64
-rw-r--r--freed-ora/current/f15/kernel.spec71
-rw-r--r--freed-ora/current/f15/mac80211_offchannel_rework_revert.patch594
-rw-r--r--freed-ora/current/f15/net-sky2-88e8059-fix-link-speed.patch42
-rw-r--r--freed-ora/current/f15/patch-libre-3.1.4.bz2.sign7
-rw-r--r--freed-ora/current/f15/patch-libre-3.1.5.bz2.sign7
-rw-r--r--freed-ora/current/f15/pci-Rework-ASPM-disable-code.patch287
-rw-r--r--freed-ora/current/f15/quite-apm.patch2
-rw-r--r--freed-ora/current/f15/rtlwifi-fix-lps_lock-deadlock.patch224
-rw-r--r--freed-ora/current/f15/sources2
15 files changed, 1538 insertions, 34 deletions
diff --git a/freed-ora/current/f15/brcm80211.patch b/freed-ora/current/f15/brcm80211.patch
index e9b206b10..2d11112d3 100644
--- a/freed-ora/current/f15/brcm80211.patch
+++ b/freed-ora/current/f15/brcm80211.patch
@@ -96995,3 +96995,250 @@ diff -up linux-3.1.x86_64/drivers/net/wireless/Makefile.orig linux-3.1.x86_64/dr
+
+obj-$(CONFIG_BRCMFMAC) += brcm80211/
+obj-$(CONFIG_BRCMSMAC) += brcm80211/
+diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
+index 06c9081..e2c3532 100644
+--- a/drivers/staging/Kconfig
++++ b/drivers/staging/Kconfig
+@@ -44,8 +44,6 @@ source "drivers/staging/wlan-ng/Kconfig"
+
+ source "drivers/staging/echo/Kconfig"
+
+-source "drivers/staging/brcm80211/Kconfig"
+-
+ source "drivers/staging/comedi/Kconfig"
+
+ source "drivers/staging/olpc_dcon/Kconfig"
+diff --git a/drivers/staging/brcm80211/Kconfig b/drivers/staging/brcm80211/Kconfig
+deleted file mode 100644
+index 379cf16..0000000
+--- a/drivers/staging/brcm80211/Kconfig
++++ /dev/null
+@@ -1,40 +0,0 @@
+-config BRCMUTIL
+- tristate
+- default n
+-
+-config BRCMSMAC
+- tristate "Broadcom IEEE802.11n PCIe SoftMAC WLAN driver"
+- default n
+- depends on PCI
+- depends on WLAN && MAC80211
+- depends on X86 || MIPS
+- select BRCMUTIL
+- select FW_LOADER
+- select CRC_CCITT
+- ---help---
+- This module adds support for PCIe wireless adapters based on Broadcom
+- IEEE802.11n SoftMAC chipsets. If you choose to build a module, it'll
+- be called brcmsmac.ko.
+-
+-config BRCMFMAC
+- tristate "Broadcom IEEE802.11n embedded FullMAC WLAN driver"
+- default n
+- depends on MMC
+- depends on WLAN && CFG80211
+- depends on X86 || MIPS
+- select BRCMUTIL
+- select FW_LOADER
+- select WIRELESS_EXT
+- select WEXT_PRIV
+- ---help---
+- This module adds support for embedded wireless adapters based on
+- Broadcom IEEE802.11n FullMAC chipsets. This driver uses the kernel's
+- wireless extensions subsystem. If you choose to build a module,
+- it'll be called brcmfmac.ko.
+-
+-config BRCMDBG
+- bool "Broadcom driver debug functions"
+- default n
+- depends on BRCMSMAC || BRCMFMAC
+- ---help---
+- Selecting this enables additional code for debug purposes.
+diff --git a/drivers/staging/brcm80211/Makefile b/drivers/staging/brcm80211/Makefile
+deleted file mode 100644
+index 8b01f5e..0000000
+--- a/drivers/staging/brcm80211/Makefile
++++ /dev/null
+@@ -1,24 +0,0 @@
+-#
+-# Makefile fragment for Broadcom 802.11n Networking Device Driver
+-#
+-# Copyright (c) 2010 Broadcom Corporation
+-#
+-# Permission to use, copy, modify, and/or distribute this software for any
+-# purpose with or without fee is hereby granted, provided that the above
+-# copyright notice and this permission notice appear in all copies.
+-#
+-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+-# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+-# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+-# common flags
+-subdir-ccflags-y := -DBCMDMA32
+-subdir-ccflags-$(CONFIG_BRCMDBG) += -DBCMDBG
+-
+-obj-$(CONFIG_BRCMUTIL) += brcmutil/
+-obj-$(CONFIG_BRCMFMAC) += brcmfmac/
+-obj-$(CONFIG_BRCMSMAC) += brcmsmac/
+diff --git a/drivers/staging/brcm80211/brcmfmac/Makefile b/drivers/staging/brcm80211/brcmfmac/Makefile
+deleted file mode 100644
+index da3c805..0000000
+--- a/drivers/staging/brcm80211/brcmfmac/Makefile
++++ /dev/null
+@@ -1,39 +0,0 @@
+-#
+-# Makefile fragment for Broadcom 802.11n Networking Device Driver
+-#
+-# Copyright (c) 2010 Broadcom Corporation
+-#
+-# Permission to use, copy, modify, and/or distribute this software for any
+-# purpose with or without fee is hereby granted, provided that the above
+-# copyright notice and this permission notice appear in all copies.
+-#
+-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+-# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+-# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+-ccflags-y := \
+- -DBRCMF_FIRSTREAD=64 \
+- -DBRCMF_SDALIGN=64 \
+- -DMAX_HDR_READ=64
+-
+-ccflags-$(CONFIG_BRCMDBG) += -DSHOW_EVENTS
+-
+-ccflags-y += \
+- -Idrivers/staging/brcm80211/brcmfmac \
+- -Idrivers/staging/brcm80211/include
+-
+-DHDOFILES = \
+- wl_cfg80211.o \
+- dhd_cdc.o \
+- dhd_common.o \
+- dhd_sdio.o \
+- dhd_linux.o \
+- bcmsdh.o \
+- bcmsdh_sdmmc.o
+-
+-obj-$(CONFIG_BRCMFMAC) += brcmfmac.o
+-brcmfmac-objs += $(DHDOFILES)
+diff --git a/drivers/staging/brcm80211/brcmsmac/Makefile b/drivers/staging/brcm80211/brcmsmac/Makefile
+deleted file mode 100644
+index 1ea3e0c..0000000
+--- a/drivers/staging/brcm80211/brcmsmac/Makefile
++++ /dev/null
+@@ -1,58 +0,0 @@
+-#
+-# Makefile fragment for Broadcom 802.11n Networking Device Driver
+-#
+-# Copyright (c) 2010 Broadcom Corporation
+-#
+-# Permission to use, copy, modify, and/or distribute this software for any
+-# purpose with or without fee is hereby granted, provided that the above
+-# copyright notice and this permission notice appear in all copies.
+-#
+-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+-# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+-# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+-ccflags-y := \
+- -DWLC_HIGH \
+- -DWLC_LOW \
+- -DSTA \
+- -DWME \
+- -DWL11N \
+- -DDBAND \
+- -DBCMNVRAMR \
+- -Idrivers/staging/brcm80211/brcmsmac \
+- -Idrivers/staging/brcm80211/brcmsmac/phy \
+- -Idrivers/staging/brcm80211/include
+-
+-BRCMSMAC_OFILES := \
+- mac80211_if.o \
+- ucode_loader.o \
+- alloc.o \
+- ampdu.o \
+- antsel.o \
+- bmac.o \
+- channel.o \
+- main.o \
+- phy_shim.o \
+- pmu.o \
+- rate.o \
+- stf.o \
+- aiutils.o \
+- phy/phy_cmn.o \
+- phy/phy_lcn.o \
+- phy/phy_n.o \
+- phy/phytbl_lcn.o \
+- phy/phytbl_n.o \
+- phy/phy_qmath.o \
+- otp.o \
+- srom.o \
+- dma.o \
+- nicpci.o
+-
+-MODULEPFX := brcmsmac
+-
+-obj-$(CONFIG_BRCMSMAC) += $(MODULEPFX).o
+-$(MODULEPFX)-objs = $(BRCMSMAC_OFILES)
+diff --git a/drivers/staging/brcm80211/brcmutil/Makefile b/drivers/staging/brcm80211/brcmutil/Makefile
+deleted file mode 100644
+index 6403423..0000000
+--- a/drivers/staging/brcm80211/brcmutil/Makefile
++++ /dev/null
+@@ -1,29 +0,0 @@
+-#
+-# Makefile fragment for Broadcom 802.11n Networking Device Driver Utilities
+-#
+-# Copyright (c) 2011 Broadcom Corporation
+-#
+-# Permission to use, copy, modify, and/or distribute this software for any
+-# purpose with or without fee is hereby granted, provided that the above
+-# copyright notice and this permission notice appear in all copies.
+-#
+-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+-# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+-# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+-ccflags-y := \
+- -Idrivers/staging/brcm80211/brcmutil \
+- -Idrivers/staging/brcm80211/include
+-
+-BRCMUTIL_OFILES := \
+- utils.o \
+- wifi.o
+-
+-MODULEPFX := brcmutil
+-
+-obj-$(CONFIG_BRCMUTIL) += $(MODULEPFX).o
+-$(MODULEPFX)-objs = $(BRCMUTIL_OFILES)
+--
+diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
+index f3c5e33..f2c2209 100644
+--- a/drivers/staging/Makefile
++++ b/drivers/staging/Makefile
+@@ -14,8 +14,6 @@ obj-$(CONFIG_USBIP_CORE) += usbip/
+ obj-$(CONFIG_W35UND) += winbond/
+ obj-$(CONFIG_PRISM2_USB) += wlan-ng/
+ obj-$(CONFIG_ECHO) += echo/
+-obj-$(CONFIG_BRCMSMAC) += brcm80211/
+-obj-$(CONFIG_BRCMFMAC) += brcm80211/
+ obj-$(CONFIG_COMEDI) += comedi/
+ obj-$(CONFIG_FB_OLPC_DCON) += olpc_dcon/
+ obj-$(CONFIG_ASUS_OLED) += asus_oled/
diff --git a/freed-ora/current/f15/config-arm-omap-generic b/freed-ora/current/f15/config-arm-omap-generic
index 16e665329..657f548a2 100644
--- a/freed-ora/current/f15/config-arm-omap-generic
+++ b/freed-ora/current/f15/config-arm-omap-generic
@@ -121,6 +121,7 @@ CONFIG_ARM_ERRATA_430973=y
# CONFIG_ARM_ERRATA_742230 is not set
# CONFIG_ARM_ERRATA_742231 is not set
CONFIG_PL310_ERRATA_588369=y
+CONFIG_PL310_ERRATA_769419=y
CONFIG_ARM_ERRATA_720789=y
# CONFIG_ARM_ERRATA_743622 is not set
# CONFIG_ARM_ERRATA_751472 is not set
diff --git a/freed-ora/current/f15/config-arm-tegra b/freed-ora/current/f15/config-arm-tegra
index 910b39f81..b131978d2 100644
--- a/freed-ora/current/f15/config-arm-tegra
+++ b/freed-ora/current/f15/config-arm-tegra
@@ -34,6 +34,7 @@ CONFIG_ARM_ERRATA_430973=y
CONFIG_ARM_ERRATA_742230=y
# CONFIG_ARM_ERRATA_742231 is not set
CONFIG_PL310_ERRATA_588369=y
+CONFIG_PL310_ERRATA_769419=y
CONFIG_ARM_ERRATA_720789=y
# CONFIG_PL310_ERRATA_727915 is not set
# CONFIG_ARM_ERRATA_743622 is not set
diff --git a/freed-ora/current/f15/config-generic b/freed-ora/current/f15/config-generic
index 5b4f10997..a1feb6e3b 100644
--- a/freed-ora/current/f15/config-generic
+++ b/freed-ora/current/f15/config-generic
@@ -3110,7 +3110,8 @@ CONFIG_USB_STORAGE_REALTEK=m
CONFIG_REALTEK_AUTOPM=y
CONFIG_USB_STORAGE_ENE_UB6250=m
# CONFIG_USB_LIBUSUAL is not set
-CONFIG_USB_UAS=m
+# uas is broken (#717633, #744099)
+# CONFIG_USB_UAS is not set
#
@@ -3779,7 +3780,7 @@ CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_INFO=y
CONFIG_FRAME_POINTER=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
# CONFIG_DEBUG_DRIVER is not set
CONFIG_HEADERS_CHECK=y
# CONFIG_RCU_TORTURE_TEST is not set
diff --git a/freed-ora/current/f15/drm-intel-make-lvds-work.patch b/freed-ora/current/f15/drm-intel-make-lvds-work.patch
deleted file mode 100644
index 89f4e2d48..000000000
--- a/freed-ora/current/f15/drm-intel-make-lvds-work.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -5821,7 +5821,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
- struct intel_load_detect_pipe *old)
- {
- struct drm_encoder *encoder = &intel_encoder->base;
-- struct drm_device *dev = encoder->dev;
- struct drm_crtc *crtc = encoder->crtc;
- struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
-@@ -5832,7 +5831,6 @@ void intel_release_load_detect_pipe(struct intel_encoder *intel_encoder,
-
- if (old->load_detect_temp) {
- connector->encoder = NULL;
-- drm_helper_disable_unused_functions(dev);
-
- if (old->release_fb)
- old->release_fb->funcs->destroy(old->release_fb);
diff --git a/freed-ora/current/f15/elantech.patch b/freed-ora/current/f15/elantech.patch
index 255efd2b6..fa7c67fec 100644
--- a/freed-ora/current/f15/elantech.patch
+++ b/freed-ora/current/f15/elantech.patch
@@ -2114,3 +2114,67 @@ index c2d91eb..25290b3 100644
--
1.7.6.4
+From 3940d6185a982a970ff562e085caccbdd62f40bb Mon Sep 17 00:00:00 2001
+From: JJ Ding <jj_ding@emc.com.tw>
+Date: Tue, 8 Nov 2011 22:13:14 -0800
+Subject: [PATCH] Input: elantech - adjust hw_version detection logic
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch fixes some v3 hardware (fw_version: 0x150500) wrongly detected
+as v2 hardware.
+
+Reported-by: Marc Dietrich <marvin24@gmx.de>
+Signed-off-by: JJ Ding <jj_ding@emc.com.tw>
+Tested-By: Marc Dietrich <marvin24@gmx.de>
+Acked-by: Éric Piel <eric.piel@tremplin-utc.net>
+Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
+---
+ drivers/input/mouse/elantech.c | 26 ++++++++++++++++++--------
+ 1 files changed, 18 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
+index 09b93b1..e2a9867 100644
+--- a/drivers/input/mouse/elantech.c
++++ b/drivers/input/mouse/elantech.c
+@@ -1210,18 +1210,28 @@ static int elantech_reconnect(struct psmouse *psmouse)
+ */
+ static int elantech_set_properties(struct elantech_data *etd)
+ {
++ /* This represents the version of IC body. */
+ int ver = (etd->fw_version & 0x0f0000) >> 16;
+
++ /* Early version of Elan touchpads doesn't obey the rule. */
+ if (etd->fw_version < 0x020030 || etd->fw_version == 0x020600)
+ etd->hw_version = 1;
+- else if (etd->fw_version < 0x150600)
+- etd->hw_version = 2;
+- else if (ver == 5)
+- etd->hw_version = 3;
+- else if (ver == 6)
+- etd->hw_version = 4;
+- else
+- return -1;
++ else {
++ switch (ver) {
++ case 2:
++ case 4:
++ etd->hw_version = 2;
++ break;
++ case 5:
++ etd->hw_version = 3;
++ break;
++ case 6:
++ etd->hw_version = 4;
++ break;
++ default:
++ return -1;
++ }
++ }
+
+ /*
+ * Turn on packet checking by default.
+--
+1.7.7.3
+
diff --git a/freed-ora/current/f15/kernel.spec b/freed-ora/current/f15/kernel.spec
index 4d35aab2b..eed6133c3 100644
--- a/freed-ora/current/f15/kernel.spec
+++ b/freed-ora/current/f15/kernel.spec
@@ -65,7 +65,7 @@ Summary: The Linux kernel
#define libres .
# Do we have a -stable update to apply?
-%define stable_update 4
+%define stable_update 5
# Is it a -stable RC?
%define stable_rc 0
# Set rpm version accordingly
@@ -626,8 +626,6 @@ Patch1500: fix_xen_guest_on_old_EC2.patch
Patch1810: drm-nouveau-updates.patch
# intel drm is all merged upstream
Patch1824: drm-intel-next.patch
-# make sure the lvds comes back on lid open
-Patch1825: drm-intel-make-lvds-work.patch
# hush the i915 fbc noise
Patch1826: drm-i915-fbc-stfu.patch
# rhbz#729882, https://bugs.freedesktop.org/attachment.cgi?id=49069
@@ -713,6 +711,17 @@ Patch21091: bcma-brcmsmac-compat.patch
Patch21100: cciss-fix-irqf-shared.patch
Patch21101: hpsa-add-irqf-shared.patch
+#rhbz 755154
+Patch21200: rtlwifi-fix-lps_lock-deadlock.patch
+
+#rhbz 731365
+Patch21220: mac80211_offchannel_rework_revert.patch
+
+Patch21225: pci-Rework-ASPM-disable-code.patch
+
+#rhbz #757839
+Patch21230: net-sky2-88e8059-fix-link-speed.patch
+
%endif
BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
@@ -1162,7 +1171,7 @@ ApplyPatch linux-2.6-i386-nx-emulation.patch
ApplyPatch jbd-jbd2-validate-sb-s_first-in-journal_get_superblo.patch
# xfs
-ApplyPatch xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
+#ApplyPatch xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
# btrfs
@@ -1246,7 +1255,6 @@ ApplyOptionalPatch drm-nouveau-updates.patch
# Intel DRM
ApplyOptionalPatch drm-intel-next.patch
-ApplyPatch drm-intel-make-lvds-work.patch
ApplyPatch drm-i915-fbc-stfu.patch
ApplyPatch drm-i915-sdvo-lvds-is-digital.patch
@@ -1320,6 +1328,17 @@ ApplyPatch bcma-brcmsmac-compat.patch
ApplyPatch cciss-fix-irqf-shared.patch
ApplyPatch hpsa-add-irqf-shared.patch
+#rhbz 755154
+#ApplyPatch rtlwifi-fix-lps_lock-deadlock.patch
+
+#rhbz 731365
+ApplyPatch mac80211_offchannel_rework_revert.patch
+
+ApplyPatch pci-Rework-ASPM-disable-code.patch
+
+#rhbz #757839
+ApplyPatch net-sky2-88e8059-fix-link-speed.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -1937,12 +1956,54 @@ fi
# and build.
%changelog
+* Sun Dec 11 2011 Alexandre Oliva <lxoliva@fsfla.org> -libre
+- Use patch-3.1-libre-3.1.5-libre as patch-libre-3.1.5.
+
+* Fri Dec 09 2011 Josh Boyer <jwboyer@redhat.com> 2.6.41.5-1
+- Linux 3.1.5 (Fedora 2.6.41.5)
+
+* Thu Dec 08 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.41.5-0.rc2.1
+- Linux 3.1.5-rc2 (Fedora 2.6.41.5-rc2)
+- Fix wrong link speed on some sky2 network adapters (rhbz #757839)
+
+* Wed Dec 07 2011 Chuck Ebbert <cebbert@redhat.com>
+- Linux 3.1.5-rc1 (Fedora 2.6.41.5-rc1)
+- Comment out merged patches:
+ xfs-Fix-possible-memory-corruption-in-xfs_readlink.patch
+ rtlwifi-fix-lps_lock-deadlock.patch
+
+* Tue Dec 06 2011 Chuck Ebbert <cebbert@redhat.com>
+- Disable uas until someone can fix it (rhbz #717633)
+
+* Tue Dec 06 2011 Josh Boyer <jwboyer@redhat.com>
+- Add reworked pci ASPM patch from Matthew Garrett
+
+* Mon Dec 05 2011 Josh Boyer <jwboyer@redhat.com>
+- Only print the apm_cpu_idle message once (rhbz #760341)
+
+* Mon Dec 05 2011 Dave Jones <davej@redhat.com>
+- Switch from -Os to -O2
+
+* Thu Dec 01 2011 Josh Boyer <jwboyer@redhat.com>
+- Apply patch to revert mac80211 scan optimizations (rhbz #731365)
+- Disable the existing brcm80211 staging drivers (rhbz #759109)
+
+* Wed Nov 30 2011 Josh Boyer <jwboyer@redhat.com>
+- Include commit 3940d6185 from JJ Ding in elantech.patch
+
+* Tue Nov 29 2011 Josh Boyer <jwboyer@redhat.com>
+- Add patch to fix deadlock in rtlwifi (rhbz #755154)
+- Drop drm-intel-make-lvds-work.patch (rhbz #731296)
+
* Tue Nov 29 2011 Alexandre Oliva <lxoliva@fsfla.org> -libre
- Use patch-3.1-libre-3.1.4-libre as patch-libre-3.1.4.
* Mon Nov 28 2011 Chuck Ebbert <cebbert@redhat.com> 2.6.41.4-1
- Linux 3.1.4 (Fedora 2.6.41.4)
+* Mon Nov 28 2011 Chuck Ebbert <cebbert@redhat.com> 3.1.4-1
+- Linux 3.1.4
+
* Mon Nov 28 2011 Chuck Ebbert <cebbert@redhat.com>
- Fix IRQ error preventing load of cciss module (rhbz#754907)
diff --git a/freed-ora/current/f15/mac80211_offchannel_rework_revert.patch b/freed-ora/current/f15/mac80211_offchannel_rework_revert.patch
new file mode 100644
index 000000000..859799714
--- /dev/null
+++ b/freed-ora/current/f15/mac80211_offchannel_rework_revert.patch
@@ -0,0 +1,594 @@
+diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
+index 9fab144..4f8cf7f 100644
+--- a/net/mac80211/ieee80211_i.h
++++ b/net/mac80211/ieee80211_i.h
+@@ -694,6 +694,8 @@ struct tpt_led_trigger {
+ * well be on the operating channel
+ * @SCAN_HW_SCANNING: The hardware is scanning for us, we have no way to
+ * determine if we are on the operating channel or not
++ * @SCAN_OFF_CHANNEL: We're off our operating channel for scanning,
++ * gets only set in conjunction with SCAN_SW_SCANNING
+ * @SCAN_COMPLETED: Set for our scan work function when the driver reported
+ * that the scan completed.
+ * @SCAN_ABORTED: Set for our scan work function when the driver reported
+@@ -702,6 +704,7 @@ struct tpt_led_trigger {
+ enum {
+ SCAN_SW_SCANNING,
+ SCAN_HW_SCANNING,
++ SCAN_OFF_CHANNEL,
+ SCAN_COMPLETED,
+ SCAN_ABORTED,
+ };
+@@ -1197,14 +1200,10 @@ int ieee80211_request_sched_scan_stop(struct ieee80211_sub_if_data *sdata);
+ void ieee80211_sched_scan_stopped_work(struct work_struct *work);
+
+ /* off-channel helpers */
+-bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local);
+-void ieee80211_offchannel_enable_all_ps(struct ieee80211_local *local,
+- bool tell_ap);
+-void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
+- bool offchannel_ps_enable);
++void ieee80211_offchannel_stop_beaconing(struct ieee80211_local *local);
++void ieee80211_offchannel_stop_station(struct ieee80211_local *local);
+ void ieee80211_offchannel_return(struct ieee80211_local *local,
+- bool enable_beaconing,
+- bool offchannel_ps_disable);
++ bool enable_beaconing);
+ void ieee80211_hw_roc_setup(struct ieee80211_local *local);
+
+ /* interface handling */
+diff --git a/net/mac80211/main.c b/net/mac80211/main.c
+index acb4423..2d607e5 100644
+--- a/net/mac80211/main.c
++++ b/net/mac80211/main.c
+@@ -92,47 +92,6 @@ static void ieee80211_reconfig_filter(struct work_struct *work)
+ ieee80211_configure_filter(local);
+ }
+
+-/*
+- * Returns true if we are logically configured to be on
+- * the operating channel AND the hardware-conf is currently
+- * configured on the operating channel. Compares channel-type
+- * as well.
+- */
+-bool ieee80211_cfg_on_oper_channel(struct ieee80211_local *local)
+-{
+- struct ieee80211_channel *chan, *scan_chan;
+- enum nl80211_channel_type channel_type;
+-
+- /* This logic needs to match logic in ieee80211_hw_config */
+- if (local->scan_channel) {
+- chan = local->scan_channel;
+- /* If scanning on oper channel, use whatever channel-type
+- * is currently in use.
+- */
+- if (chan == local->oper_channel)
+- channel_type = local->_oper_channel_type;
+- else
+- channel_type = NL80211_CHAN_NO_HT;
+- } else if (local->tmp_channel) {
+- chan = scan_chan = local->tmp_channel;
+- channel_type = local->tmp_channel_type;
+- } else {
+- chan = local->oper_channel;
+- channel_type = local->_oper_channel_type;
+- }
+-
+- if (chan != local->oper_channel ||
+- channel_type != local->_oper_channel_type)
+- return false;
+-
+- /* Check current hardware-config against oper_channel. */
+- if ((local->oper_channel != local->hw.conf.channel) ||
+- (local->_oper_channel_type != local->hw.conf.channel_type))
+- return false;
+-
+- return true;
+-}
+-
+ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
+ {
+ struct ieee80211_channel *chan, *scan_chan;
+@@ -145,9 +104,6 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
+
+ scan_chan = local->scan_channel;
+
+- /* If this off-channel logic ever changes, ieee80211_on_oper_channel
+- * may need to change as well.
+- */
+ offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
+ if (scan_chan) {
+ chan = scan_chan;
+@@ -158,19 +114,17 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
+ channel_type = local->_oper_channel_type;
+ else
+ channel_type = NL80211_CHAN_NO_HT;
+- } else if (local->tmp_channel) {
++ local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
++ } else if (local->tmp_channel &&
++ local->oper_channel != local->tmp_channel) {
+ chan = scan_chan = local->tmp_channel;
+ channel_type = local->tmp_channel_type;
++ local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
+ } else {
+ chan = local->oper_channel;
+ channel_type = local->_oper_channel_type;
+- }
+-
+- if (chan != local->oper_channel ||
+- channel_type != local->_oper_channel_type)
+- local->hw.conf.flags |= IEEE80211_CONF_OFFCHANNEL;
+- else
+ local->hw.conf.flags &= ~IEEE80211_CONF_OFFCHANNEL;
++ }
+
+ offchannel_flag ^= local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
+
+@@ -279,7 +233,7 @@ void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
+
+ if (changed & BSS_CHANGED_BEACON_ENABLED) {
+ if (local->quiescing || !ieee80211_sdata_running(sdata) ||
+- test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) {
++ test_bit(SCAN_SW_SCANNING, &local->scanning)) {
+ sdata->vif.bss_conf.enable_beacon = false;
+ } else {
+ /*
+diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
+index 13427b1..b4e5267 100644
+--- a/net/mac80211/offchannel.c
++++ b/net/mac80211/offchannel.c
+@@ -17,14 +17,10 @@
+ #include "driver-trace.h"
+
+ /*
+- * Tell our hardware to disable PS.
+- * Optionally inform AP that we will go to sleep so that it will buffer
+- * the frames while we are doing off-channel work. This is optional
+- * because we *may* be doing work on-operating channel, and want our
+- * hardware unconditionally awake, but still let the AP send us normal frames.
++ * inform AP that we will go to sleep so that it will buffer the frames
++ * while we scan
+ */
+-static void ieee80211_offchannel_ps_enable(struct ieee80211_sub_if_data *sdata,
+- bool tell_ap)
++static void ieee80211_offchannel_ps_enable(struct ieee80211_sub_if_data *sdata)
+ {
+ struct ieee80211_local *local = sdata->local;
+ struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
+@@ -45,8 +41,8 @@ static void ieee80211_offchannel_ps_enable(struct ieee80211_sub_if_data *sdata,
+ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
+ }
+
+- if (tell_ap && (!local->offchannel_ps_enabled ||
+- !(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)))
++ if (!(local->offchannel_ps_enabled) ||
++ !(local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK))
+ /*
+ * If power save was enabled, no need to send a nullfunc
+ * frame because AP knows that we are sleeping. But if the
+@@ -81,9 +77,6 @@ static void ieee80211_offchannel_ps_disable(struct ieee80211_sub_if_data *sdata)
+ * we are sleeping, let's just enable power save mode in
+ * hardware.
+ */
+- /* TODO: Only set hardware if CONF_PS changed?
+- * TODO: Should we set offchannel_ps_enabled to false?
+- */
+ local->hw.conf.flags |= IEEE80211_CONF_PS;
+ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
+ } else if (local->hw.conf.dynamic_ps_timeout > 0) {
+@@ -102,61 +95,63 @@ static void ieee80211_offchannel_ps_disable(struct ieee80211_sub_if_data *sdata)
+ ieee80211_sta_reset_conn_monitor(sdata);
+ }
+
+-void ieee80211_offchannel_stop_vifs(struct ieee80211_local *local,
+- bool offchannel_ps_enable)
++void ieee80211_offchannel_stop_beaconing(struct ieee80211_local *local)
+ {
+ struct ieee80211_sub_if_data *sdata;
+
+- /*
+- * notify the AP about us leaving the channel and stop all
+- * STA interfaces.
+- */
+ mutex_lock(&local->iflist_mtx);
+ list_for_each_entry(sdata, &local->interfaces, list) {
+ if (!ieee80211_sdata_running(sdata))
+ continue;
+
+- if (sdata->vif.type != NL80211_IFTYPE_MONITOR)
+- set_bit(SDATA_STATE_OFFCHANNEL, &sdata->state);
+-
+- /* Check to see if we should disable beaconing. */
++ /* disable beaconing */
+ if (sdata->vif.type == NL80211_IFTYPE_AP ||
+ sdata->vif.type == NL80211_IFTYPE_ADHOC ||
+ sdata->vif.type == NL80211_IFTYPE_MESH_POINT)
+ ieee80211_bss_info_change_notify(
+ sdata, BSS_CHANGED_BEACON_ENABLED);
+
+- if (sdata->vif.type != NL80211_IFTYPE_MONITOR) {
++ /*
++ * only handle non-STA interfaces here, STA interfaces
++ * are handled in ieee80211_offchannel_stop_station(),
++ * e.g., from the background scan state machine.
++ *
++ * In addition, do not stop monitor interface to allow it to be
++ * used from user space controlled off-channel operations.
++ */
++ if (sdata->vif.type != NL80211_IFTYPE_STATION &&
++ sdata->vif.type != NL80211_IFTYPE_MONITOR) {
++ set_bit(SDATA_STATE_OFFCHANNEL, &sdata->state);
+ netif_tx_stop_all_queues(sdata->dev);
+- if (offchannel_ps_enable &&
+- (sdata->vif.type == NL80211_IFTYPE_STATION) &&
+- sdata->u.mgd.associated)
+- ieee80211_offchannel_ps_enable(sdata, true);
+ }
+ }
+ mutex_unlock(&local->iflist_mtx);
+ }
+
+-void ieee80211_offchannel_enable_all_ps(struct ieee80211_local *local,
+- bool tell_ap)
++void ieee80211_offchannel_stop_station(struct ieee80211_local *local)
+ {
+ struct ieee80211_sub_if_data *sdata;
+
++ /*
++ * notify the AP about us leaving the channel and stop all STA interfaces
++ */
+ mutex_lock(&local->iflist_mtx);
+ list_for_each_entry(sdata, &local->interfaces, list) {
+ if (!ieee80211_sdata_running(sdata))
+ continue;
+
+- if (sdata->vif.type == NL80211_IFTYPE_STATION &&
+- sdata->u.mgd.associated)
+- ieee80211_offchannel_ps_enable(sdata, tell_ap);
++ if (sdata->vif.type == NL80211_IFTYPE_STATION) {
++ set_bit(SDATA_STATE_OFFCHANNEL, &sdata->state);
++ netif_tx_stop_all_queues(sdata->dev);
++ if (sdata->u.mgd.associated)
++ ieee80211_offchannel_ps_enable(sdata);
++ }
+ }
+ mutex_unlock(&local->iflist_mtx);
+ }
+
+ void ieee80211_offchannel_return(struct ieee80211_local *local,
+- bool enable_beaconing,
+- bool offchannel_ps_disable)
++ bool enable_beaconing)
+ {
+ struct ieee80211_sub_if_data *sdata;
+
+@@ -166,8 +161,7 @@ void ieee80211_offchannel_return(struct ieee80211_local *local,
+ continue;
+
+ /* Tell AP we're back */
+- if (offchannel_ps_disable &&
+- sdata->vif.type == NL80211_IFTYPE_STATION) {
++ if (sdata->vif.type == NL80211_IFTYPE_STATION) {
+ if (sdata->u.mgd.associated)
+ ieee80211_offchannel_ps_disable(sdata);
+ }
+@@ -187,7 +181,7 @@ void ieee80211_offchannel_return(struct ieee80211_local *local,
+ netif_tx_wake_all_queues(sdata->dev);
+ }
+
+- /* Check to see if we should re-enable beaconing */
++ /* re-enable beaconing */
+ if (enable_beaconing &&
+ (sdata->vif.type == NL80211_IFTYPE_AP ||
+ sdata->vif.type == NL80211_IFTYPE_ADHOC ||
+diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
+index fe2c2a7..b46880e 100644
+--- a/net/mac80211/rx.c
++++ b/net/mac80211/rx.c
+@@ -417,10 +417,16 @@ ieee80211_rx_h_passive_scan(struct ieee80211_rx_data *rx)
+ return RX_CONTINUE;
+
+ if (test_bit(SCAN_HW_SCANNING, &local->scanning) ||
+- test_bit(SCAN_SW_SCANNING, &local->scanning) ||
+ local->sched_scanning)
+ return ieee80211_scan_rx(rx->sdata, skb);
+
++ if (test_bit(SCAN_SW_SCANNING, &local->scanning)) {
++ /* drop all the other packets during a software scan anyway */
++ if (ieee80211_scan_rx(rx->sdata, skb) != RX_QUEUED)
++ dev_kfree_skb(skb);
++ return RX_QUEUED;
++ }
++
+ /* scanning finished during invoking of handlers */
+ I802_DEBUG_INC(local->rx_handlers_drop_passive_scan);
+ return RX_DROP_UNUSABLE;
+@@ -2771,7 +2777,7 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
+ local->dot11ReceivedFragmentCount++;
+
+ if (unlikely(test_bit(SCAN_HW_SCANNING, &local->scanning) ||
+- test_bit(SCAN_SW_SCANNING, &local->scanning)))
++ test_bit(SCAN_OFF_CHANNEL, &local->scanning)))
+ status->rx_flags |= IEEE80211_RX_IN_SCAN;
+
+ if (ieee80211_is_mgmt(fc))
+diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
+index 6f09eca..2ba4977 100644
+--- a/net/mac80211/scan.c
++++ b/net/mac80211/scan.c
+@@ -212,14 +212,6 @@ ieee80211_scan_rx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb)
+ if (bss)
+ ieee80211_rx_bss_put(sdata->local, bss);
+
+- /* If we are on-operating-channel, and this packet is for the
+- * current channel, pass the pkt on up the stack so that
+- * the rest of the stack can make use of it.
+- */
+- if (ieee80211_cfg_on_oper_channel(sdata->local)
+- && (channel == sdata->local->oper_channel))
+- return RX_CONTINUE;
+-
+ dev_kfree_skb(skb);
+ return RX_QUEUED;
+ }
+@@ -262,8 +254,6 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted,
+ bool was_hw_scan)
+ {
+ struct ieee80211_local *local = hw_to_local(hw);
+- bool on_oper_chan;
+- bool enable_beacons = false;
+
+ lockdep_assert_held(&local->mtx);
+
+@@ -296,25 +286,11 @@ static void __ieee80211_scan_completed(struct ieee80211_hw *hw, bool aborted,
+ local->scanning = 0;
+ local->scan_channel = NULL;
+
+- on_oper_chan = ieee80211_cfg_on_oper_channel(local);
+-
+- if (was_hw_scan || !on_oper_chan)
+- ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
+- else
+- /* Set power back to normal operating levels. */
+- ieee80211_hw_config(local, 0);
+-
++ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
+ if (!was_hw_scan) {
+- bool on_oper_chan2;
+ ieee80211_configure_filter(local);
+ drv_sw_scan_complete(local);
+- on_oper_chan2 = ieee80211_cfg_on_oper_channel(local);
+- /* We should always be on-channel at this point. */
+- WARN_ON(!on_oper_chan2);
+- if (on_oper_chan2 && (on_oper_chan != on_oper_chan2))
+- enable_beacons = true;
+-
+- ieee80211_offchannel_return(local, enable_beacons, true);
++ ieee80211_offchannel_return(local, true);
+ }
+
+ ieee80211_recalc_idle(local);
+@@ -355,15 +331,13 @@ static int ieee80211_start_sw_scan(struct ieee80211_local *local)
+ */
+ drv_sw_scan_start(local);
+
++ ieee80211_offchannel_stop_beaconing(local);
++
+ local->leave_oper_channel_time = 0;
+ local->next_scan_state = SCAN_DECISION;
+ local->scan_channel_idx = 0;
+
+- /* We always want to use off-channel PS, even if we
+- * are not really leaving oper-channel. Don't
+- * tell the AP though, as long as we are on-channel.
+- */
+- ieee80211_offchannel_enable_all_ps(local, false);
++ drv_flush(local, false);
+
+ ieee80211_configure_filter(local);
+
+@@ -506,20 +480,7 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ }
+ mutex_unlock(&local->iflist_mtx);
+
+- next_chan = local->scan_req->channels[local->scan_channel_idx];
+-
+- if (ieee80211_cfg_on_oper_channel(local)) {
+- /* We're currently on operating channel. */
+- if (next_chan == local->oper_channel)
+- /* We don't need to move off of operating channel. */
+- local->next_scan_state = SCAN_SET_CHANNEL;
+- else
+- /*
+- * We do need to leave operating channel, as next
+- * scan is somewhere else.
+- */
+- local->next_scan_state = SCAN_LEAVE_OPER_CHANNEL;
+- } else {
++ if (local->scan_channel) {
+ /*
+ * we're currently scanning a different channel, let's
+ * see if we can scan another channel without interfering
+@@ -535,6 +496,7 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ *
+ * Otherwise switch back to the operating channel.
+ */
++ next_chan = local->scan_req->channels[local->scan_channel_idx];
+
+ bad_latency = time_after(jiffies +
+ ieee80211_scan_get_channel_time(next_chan),
+@@ -552,6 +514,12 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ local->next_scan_state = SCAN_ENTER_OPER_CHANNEL;
+ else
+ local->next_scan_state = SCAN_SET_CHANNEL;
++ } else {
++ /*
++ * we're on the operating channel currently, let's
++ * leave that channel now to scan another one
++ */
++ local->next_scan_state = SCAN_LEAVE_OPER_CHANNEL;
+ }
+
+ *next_delay = 0;
+@@ -560,10 +528,9 @@ static void ieee80211_scan_state_decision(struct ieee80211_local *local,
+ static void ieee80211_scan_state_leave_oper_channel(struct ieee80211_local *local,
+ unsigned long *next_delay)
+ {
+- /* PS will already be in off-channel mode,
+- * we do that once at the beginning of scanning.
+- */
+- ieee80211_offchannel_stop_vifs(local, false);
++ ieee80211_offchannel_stop_station(local);
++
++ __set_bit(SCAN_OFF_CHANNEL, &local->scanning);
+
+ /*
+ * What if the nullfunc frames didn't arrive?
+@@ -586,15 +553,15 @@ static void ieee80211_scan_state_enter_oper_channel(struct ieee80211_local *loca
+ {
+ /* switch back to the operating channel */
+ local->scan_channel = NULL;
+- if (!ieee80211_cfg_on_oper_channel(local))
+- ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
++ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
+
+ /*
+- * Re-enable vifs and beaconing. Leave PS
+- * in off-channel state..will put that back
+- * on-channel at the end of scanning.
++ * Only re-enable station mode interface now; beaconing will be
++ * re-enabled once the full scan has been completed.
+ */
+- ieee80211_offchannel_return(local, true, false);
++ ieee80211_offchannel_return(local, false);
++
++ __clear_bit(SCAN_OFF_CHANNEL, &local->scanning);
+
+ *next_delay = HZ / 5;
+ local->next_scan_state = SCAN_DECISION;
+diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
+index 8cb0d2d..54ea022 100644
+--- a/net/mac80211/tx.c
++++ b/net/mac80211/tx.c
+@@ -258,8 +258,7 @@ ieee80211_tx_h_check_assoc(struct ieee80211_tx_data *tx)
+ if (unlikely(info->flags & IEEE80211_TX_CTL_INJECTED))
+ return TX_CONTINUE;
+
+- if (unlikely(test_bit(SCAN_SW_SCANNING, &tx->local->scanning)) &&
+- test_bit(SDATA_STATE_OFFCHANNEL, &tx->sdata->state) &&
++ if (unlikely(test_bit(SCAN_OFF_CHANNEL, &tx->local->scanning)) &&
+ !ieee80211_is_probe_req(hdr->frame_control) &&
+ !ieee80211_is_nullfunc(hdr->frame_control))
+ /*
+diff --git a/net/mac80211/work.c b/net/mac80211/work.c
+index 7737f20..b76bf33 100644
+--- a/net/mac80211/work.c
++++ b/net/mac80211/work.c
+@@ -901,26 +901,6 @@ static bool ieee80211_work_ct_coexists(enum nl80211_channel_type wk_ct,
+ return false;
+ }
+
+-static enum nl80211_channel_type
+-ieee80211_calc_ct(enum nl80211_channel_type wk_ct,
+- enum nl80211_channel_type oper_ct)
+-{
+- switch (wk_ct) {
+- case NL80211_CHAN_NO_HT:
+- return oper_ct;
+- case NL80211_CHAN_HT20:
+- if (oper_ct != NL80211_CHAN_NO_HT)
+- return oper_ct;
+- return wk_ct;
+- case NL80211_CHAN_HT40MINUS:
+- case NL80211_CHAN_HT40PLUS:
+- return wk_ct;
+- }
+- WARN_ON(1); /* shouldn't get here */
+- return wk_ct;
+-}
+-
+-
+ static void ieee80211_work_timer(unsigned long data)
+ {
+ struct ieee80211_local *local = (void *) data;
+@@ -971,52 +951,18 @@ static void ieee80211_work_work(struct work_struct *work)
+ }
+
+ if (!started && !local->tmp_channel) {
+- bool on_oper_chan;
+- bool tmp_chan_changed = false;
+- bool on_oper_chan2;
+- enum nl80211_channel_type wk_ct;
+- on_oper_chan = ieee80211_cfg_on_oper_channel(local);
+-
+- /* Work with existing channel type if possible. */
+- wk_ct = wk->chan_type;
+- if (wk->chan == local->hw.conf.channel)
+- wk_ct = ieee80211_calc_ct(wk->chan_type,
+- local->hw.conf.channel_type);
+-
+- if (local->tmp_channel)
+- if ((local->tmp_channel != wk->chan) ||
+- (local->tmp_channel_type != wk_ct))
+- tmp_chan_changed = true;
+-
+- local->tmp_channel = wk->chan;
+- local->tmp_channel_type = wk_ct;
+ /*
+- * Leave the station vifs in awake mode if they
+- * happen to be on the same channel as
+- * the requested channel.
++ * TODO: could optimize this by leaving the
++ * station vifs in awake mode if they
++ * happen to be on the same channel as
++ * the requested channel
+ */
+- on_oper_chan2 = ieee80211_cfg_on_oper_channel(local);
+- if (on_oper_chan != on_oper_chan2) {
+- if (on_oper_chan2) {
+- /* going off oper channel, PS too */
+- ieee80211_offchannel_stop_vifs(local,
+- true);
+- ieee80211_hw_config(local, 0);
+- } else {
+- /* going on channel, but leave PS
+- * off-channel. */
+- ieee80211_hw_config(local, 0);
+- ieee80211_offchannel_return(local,
+- true,
+- false);
+- }
+- } else if (tmp_chan_changed)
+- /* Still off-channel, but on some other
+- * channel, so update hardware.
+- * PS should already be off-channel.
+- */
+- ieee80211_hw_config(local, 0);
++ ieee80211_offchannel_stop_beaconing(local);
++ ieee80211_offchannel_stop_station(local);
+
++ local->tmp_channel = wk->chan;
++ local->tmp_channel_type = wk->chan_type;
++ ieee80211_hw_config(local, 0);
+ started = true;
+ wk->timeout = jiffies;
+ }
+@@ -1102,8 +1048,7 @@ static void ieee80211_work_work(struct work_struct *work)
+ * we still need to do a hardware config. Currently,
+ * we cannot be here while scanning, however.
+ */
+- if (!ieee80211_cfg_on_oper_channel(local))
+- ieee80211_hw_config(local, 0);
++ ieee80211_hw_config(local, 0);
+
+ /* At the least, we need to disable offchannel_ps,
+ * so just go ahead and run the entire offchannel
+@@ -1111,7 +1056,7 @@ static void ieee80211_work_work(struct work_struct *work)
+ * beaconing if we were already on-oper-channel
+ * as a future optimization.
+ */
+- ieee80211_offchannel_return(local, true, true);
++ ieee80211_offchannel_return(local, true);
+
+ /* give connection some time to breathe */
+ run_again(local, jiffies + HZ/2);
diff --git a/freed-ora/current/f15/net-sky2-88e8059-fix-link-speed.patch b/freed-ora/current/f15/net-sky2-88e8059-fix-link-speed.patch
new file mode 100644
index 000000000..61e1c75df
--- /dev/null
+++ b/freed-ora/current/f15/net-sky2-88e8059-fix-link-speed.patch
@@ -0,0 +1,42 @@
+commit 27d240fdae2808d727ad9ce48ec029731a457524
+Author: stephen hemminger <shemminger@vyatta.com>
+Date: Fri Nov 4 12:17:17 2011 +0000
+
+ sky2: fix regression on Yukon Optima
+
+ [ backport to 3.1 ]
+
+ Changes to support other Optima types, introduced an accidental
+ regression that caused 88E8059 to come up in 10Mbit/sec.
+
+ The Yukon Optima supports a reverse auto-negotiation feature that
+ was incorrectly setup, and not needed. The feature could be used to
+ allow wake-on-lan at higher speeds. But doing it correctly would require
+ other changes to initialization.
+
+ Reported-by: Pavel Mateja <pavel@netsafe.cz>
+ Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+ Signed-off-by: David S. Miller <davem@davemloft.net>
+
+diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
+index cbd026f..fdc6c39 100644
+--- a/drivers/net/sky2.c
++++ b/drivers/net/sky2.c
+@@ -366,17 +366,6 @@ static void sky2_phy_init(struct sky2_hw *hw, unsigned port)
+ gm_phy_write(hw, port, PHY_MARV_FE_SPEC_2, spec);
+ }
+ } else {
+- if (hw->chip_id >= CHIP_ID_YUKON_OPT) {
+- u16 ctrl2 = gm_phy_read(hw, port, PHY_MARV_EXT_CTRL_2);
+-
+- /* enable PHY Reverse Auto-Negotiation */
+- ctrl2 |= 1u << 13;
+-
+- /* Write PHY changes (SW-reset must follow) */
+- gm_phy_write(hw, port, PHY_MARV_EXT_CTRL_2, ctrl2);
+- }
+-
+-
+ /* disable energy detect */
+ ctrl &= ~PHY_M_PC_EN_DET_MSK;
+
diff --git a/freed-ora/current/f15/patch-libre-3.1.4.bz2.sign b/freed-ora/current/f15/patch-libre-3.1.4.bz2.sign
deleted file mode 100644
index 77fb583dc..000000000
--- a/freed-ora/current/f15/patch-libre-3.1.4.bz2.sign
+++ /dev/null
@@ -1,7 +0,0 @@
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v2.0.18 (GNU/Linux)
-
-iEYEABECAAYFAk7U6/kACgkQvLfPh359R6fvbQCeIjhSr3QarBiTDWsD+asZEaSC
-E6oAmwWGup3ipr9OJkXvrUjsqga+MeFj
-=FiaC
------END PGP SIGNATURE-----
diff --git a/freed-ora/current/f15/patch-libre-3.1.5.bz2.sign b/freed-ora/current/f15/patch-libre-3.1.5.bz2.sign
new file mode 100644
index 000000000..b86351899
--- /dev/null
+++ b/freed-ora/current/f15/patch-libre-3.1.5.bz2.sign
@@ -0,0 +1,7 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.18 (GNU/Linux)
+
+iEYEABECAAYFAk7kJgYACgkQvLfPh359R6fkAwCdGZ7xVl9tkpVrjipjY9EmMN3B
+CEcAninnMJYDZsToMAJ65lBhNqUlXhDT
+=bi/i
+-----END PGP SIGNATURE-----
diff --git a/freed-ora/current/f15/pci-Rework-ASPM-disable-code.patch b/freed-ora/current/f15/pci-Rework-ASPM-disable-code.patch
new file mode 100644
index 000000000..d6fb24320
--- /dev/null
+++ b/freed-ora/current/f15/pci-Rework-ASPM-disable-code.patch
@@ -0,0 +1,287 @@
+Path: news.gmane.org!not-for-mail
+From: Matthew Garrett <mjg@redhat.com>
+Newsgroups: gmane.linux.acpi.devel,gmane.linux.kernel.pci,gmane.linux.kernel
+Subject: [PATCH] pci: Rework ASPM disable code
+Date: Thu, 10 Nov 2011 16:38:33 -0500
+Lines: 232
+Approved: news@gmane.org
+Message-ID: <1320961113-5050-1-git-send-email-mjg@redhat.com>
+NNTP-Posting-Host: lo.gmane.org
+X-Trace: dough.gmane.org 1320961145 13112 80.91.229.12 (10 Nov 2011 21:39:05 GMT)
+X-Complaints-To: usenet@dough.gmane.org
+NNTP-Posting-Date: Thu, 10 Nov 2011 21:39:05 +0000 (UTC)
+Cc: linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org,
+ linux-kernel@vger.kernel.org, Matthew Garrett <mjg@redhat.com>
+To: jbarnes@virtuousgeek.org
+Original-X-From: linux-acpi-owner@vger.kernel.org Thu Nov 10 22:38:57 2011
+Return-path: <linux-acpi-owner@vger.kernel.org>
+Envelope-to: glad-acpi-devel@lo.gmane.org
+Original-Received: from vger.kernel.org ([209.132.180.67])
+ by lo.gmane.org with esmtp (Exim 4.69)
+ (envelope-from <linux-acpi-owner@vger.kernel.org>)
+ id 1ROcKm-0003jN-CL
+ for glad-acpi-devel@lo.gmane.org; Thu, 10 Nov 2011 22:38:56 +0100
+Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
+ id S1751342Ab1KJViu (ORCPT <rfc822;glad-acpi-devel@m.gmane.org>);
+ Thu, 10 Nov 2011 16:38:50 -0500
+Original-Received: from mx1.redhat.com ([209.132.183.28]:32030 "EHLO mx1.redhat.com"
+ rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
+ id S1750805Ab1KJVit (ORCPT <rfc822;linux-acpi@vger.kernel.org>);
+ Thu, 10 Nov 2011 16:38:49 -0500
+Original-Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22])
+ by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pAALcmdw013333
+ (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
+ Thu, 10 Nov 2011 16:38:49 -0500
+Original-Received: from cavan.codon.org.uk (ovpn-113-157.phx2.redhat.com [10.3.113.157])
+ by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id pAALclkW022022
+ (version=TLSv1/SSLv3 cipher=AES256-SHA bits=256 verify=NO);
+ Thu, 10 Nov 2011 16:38:48 -0500
+Original-Received: from 209-6-41-104.c3-0.smr-ubr1.sbo-smr.ma.cable.rcn.com ([209.6.41.104] helo=localhost.localdomain)
+ by cavan.codon.org.uk with esmtpsa (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)
+ (Exim 4.72)
+ (envelope-from <mjg@redhat.com>)
+ id 1ROcKa-0000F4-E4; Thu, 10 Nov 2011 21:38:44 +0000
+X-SA-Do-Not-Run: Yes
+X-SA-Exim-Connect-IP: 209.6.41.104
+X-SA-Exim-Mail-From: mjg@redhat.com
+X-SA-Exim-Scanned: No (on cavan.codon.org.uk); SAEximRunCond expanded to false
+X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22
+Original-Sender: linux-acpi-owner@vger.kernel.org
+Precedence: bulk
+List-ID: <linux-acpi.vger.kernel.org>
+X-Mailing-List: linux-acpi@vger.kernel.org
+Xref: news.gmane.org gmane.linux.acpi.devel:51182 gmane.linux.kernel.pci:12503 gmane.linux.kernel:1214427
+Archived-At: <http://permalink.gmane.org/gmane.linux.acpi.devel/51182>
+
+Right now we forcibly clear ASPM state on all devices if the BIOS indicates
+that the feature isn't supported. Based on the Microsoft presentation
+"PCI Express In Depth for Windows Vista and Beyond", I'm starting to think
+that this may be an error. The implication is that unless the platform
+grants full control via _OSC, Windows will not touch any PCIe features -
+including ASPM. In that case clearing ASPM state would be an error unless
+the platform has granted us that control.
+
+This patch reworks the ASPM disabling code such that the actual clearing
+of state is triggered by a successful handoff of PCIe control to the OS.
+The general ASPM code undergoes some changes in order to ensure that the
+ability to clear the bits isn't overridden by ASPM having already been
+disabled. Further, this theoretically now allows for situations where
+only a subset of PCIe roots hand over control, leaving the others in the
+BIOS state.
+
+It's difficult to know for sure that this is the right thing to do -
+there's zero public documentation on the interaction between all of these
+components. But enough vendors enable ASPM on platforms and then set this
+bit that it seems likely that they're expecting the OS to leave them alone.
+
+Measured to save around 5W on an idle Thinkpad X220.
+
+Signed-off-by: Matthew Garrett <mjg@redhat.com>
+---
+ drivers/acpi/pci_root.c | 7 +++++
+ drivers/pci/pci-acpi.c | 1 -
+ drivers/pci/pcie/aspm.c | 58 +++++++++++++++++++++++++++++----------------
+ include/linux/pci-aspm.h | 4 +-
+ 4 files changed, 46 insertions(+), 24 deletions(-)
+
+diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c
+index 2672c79..7aff631 100644
+--- a/drivers/acpi/pci_root.c
++++ b/drivers/acpi/pci_root.c
+@@ -596,6 +596,13 @@ static int __devinit acpi_pci_root_add(struct acpi_device *device)
+ if (ACPI_SUCCESS(status)) {
+ dev_info(root->bus->bridge,
+ "ACPI _OSC control (0x%02x) granted\n", flags);
++ if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
++ /*
++ * We have ASPM control, but the FADT indicates
++ * that it's unsupported. Clear it.
++ */
++ pcie_clear_aspm(root->bus);
++ }
+ } else {
+ dev_info(root->bus->bridge,
+ "ACPI _OSC request failed (%s), "
+diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c
+index 4ecb640..c8e7585 100644
+--- a/drivers/pci/pci-acpi.c
++++ b/drivers/pci/pci-acpi.c
+@@ -395,7 +395,6 @@ static int __init acpi_pci_init(void)
+
+ if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) {
+ printk(KERN_INFO"ACPI FADT declares the system doesn't support PCIe ASPM, so disable it\n");
+- pcie_clear_aspm();
+ pcie_no_aspm();
+ }
+
+diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
+index cbfbab1..1cfbf22 100644
+--- a/drivers/pci/pcie/aspm.c
++++ b/drivers/pci/pcie/aspm.c
+@@ -68,7 +68,7 @@ struct pcie_link_state {
+ struct aspm_latency acceptable[8];
+ };
+
+-static int aspm_disabled, aspm_force, aspm_clear_state;
++static int aspm_disabled, aspm_force;
+ static bool aspm_support_enabled = true;
+ static DEFINE_MUTEX(aspm_lock);
+ static LIST_HEAD(link_list);
+@@ -500,9 +500,6 @@ static int pcie_aspm_sanity_check(struct pci_dev *pdev)
+ int pos;
+ u32 reg32;
+
+- if (aspm_clear_state)
+- return -EINVAL;
+-
+ /*
+ * Some functions in a slot might not all be PCIe functions,
+ * very strange. Disable ASPM for the whole slot
+@@ -574,9 +571,6 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
+ pdev->pcie_type != PCI_EXP_TYPE_DOWNSTREAM)
+ return;
+
+- if (aspm_disabled && !aspm_clear_state)
+- return;
+-
+ /* VIA has a strange chipset, root port is under a bridge */
+ if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT &&
+ pdev->bus->self)
+@@ -608,7 +602,7 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev)
+ * the BIOS's expectation, we'll do so once pci_enable_device() is
+ * called.
+ */
+- if (aspm_policy != POLICY_POWERSAVE || aspm_clear_state) {
++ if (aspm_policy != POLICY_POWERSAVE) {
+ pcie_config_aspm_path(link);
+ pcie_set_clkpm(link, policy_to_clkpm_state(link));
+ }
+@@ -649,8 +643,7 @@ void pcie_aspm_exit_link_state(struct pci_dev *pdev)
+ struct pci_dev *parent = pdev->bus->self;
+ struct pcie_link_state *link, *root, *parent_link;
+
+- if ((aspm_disabled && !aspm_clear_state) || !pci_is_pcie(pdev) ||
+- !parent || !parent->link_state)
++ if (!pci_is_pcie(pdev) || !parent || !parent->link_state)
+ return;
+ if ((parent->pcie_type != PCI_EXP_TYPE_ROOT_PORT) &&
+ (parent->pcie_type != PCI_EXP_TYPE_DOWNSTREAM))
+@@ -734,13 +727,18 @@ void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
+ * pci_disable_link_state - disable pci device's link state, so the link will
+ * never enter specific states
+ */
+-static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem)
++static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem,
++ bool force)
+ {
+ struct pci_dev *parent = pdev->bus->self;
+ struct pcie_link_state *link;
+
+- if (aspm_disabled || !pci_is_pcie(pdev))
++ if (aspm_disabled && !force)
++ return;
++
++ if (!pci_is_pcie(pdev))
+ return;
++
+ if (pdev->pcie_type == PCI_EXP_TYPE_ROOT_PORT ||
+ pdev->pcie_type == PCI_EXP_TYPE_DOWNSTREAM)
+ parent = pdev;
+@@ -768,16 +766,31 @@ static void __pci_disable_link_state(struct pci_dev *pdev, int state, bool sem)
+
+ void pci_disable_link_state_locked(struct pci_dev *pdev, int state)
+ {
+- __pci_disable_link_state(pdev, state, false);
++ __pci_disable_link_state(pdev, state, false, false);
+ }
+ EXPORT_SYMBOL(pci_disable_link_state_locked);
+
+ void pci_disable_link_state(struct pci_dev *pdev, int state)
+ {
+- __pci_disable_link_state(pdev, state, true);
++ __pci_disable_link_state(pdev, state, true, false);
+ }
+ EXPORT_SYMBOL(pci_disable_link_state);
+
++void pcie_clear_aspm(struct pci_bus *bus)
++{
++ struct pci_dev *child;
++
++ /*
++ * Clear any ASPM setup that the firmware has carried out on this bus
++ */
++ list_for_each_entry(child, &bus->devices, bus_list) {
++ __pci_disable_link_state(child, PCIE_LINK_STATE_L0S |
++ PCIE_LINK_STATE_L1 |
++ PCIE_LINK_STATE_CLKPM,
++ false, true);
++ }
++}
++
+ static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp)
+ {
+ int i;
+@@ -935,6 +948,7 @@ void pcie_aspm_remove_sysfs_dev_files(struct pci_dev *pdev)
+ static int __init pcie_aspm_disable(char *str)
+ {
+ if (!strcmp(str, "off")) {
++ aspm_policy = POLICY_DEFAULT;
+ aspm_disabled = 1;
+ aspm_support_enabled = false;
+ printk(KERN_INFO "PCIe ASPM is disabled\n");
+@@ -947,16 +961,18 @@ static int __init pcie_aspm_disable(char *str)
+
+ __setup("pcie_aspm=", pcie_aspm_disable);
+
+-void pcie_clear_aspm(void)
+-{
+- if (!aspm_force)
+- aspm_clear_state = 1;
+-}
+-
+ void pcie_no_aspm(void)
+ {
+- if (!aspm_force)
++ /*
++ * Disabling ASPM is intended to prevent the kernel from modifying
++ * existing hardware state, not to clear existing state. To that end:
++ * (a) set policy to POLICY_DEFAULT in order to avoid changing state
++ * (b) prevent userspace from changing policy
++ */
++ if (!aspm_force) {
++ aspm_policy = POLICY_DEFAULT;
+ aspm_disabled = 1;
++ }
+ }
+
+ /**
+diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h
+index 7cea7b6..c832014 100644
+--- a/include/linux/pci-aspm.h
++++ b/include/linux/pci-aspm.h
+@@ -29,7 +29,7 @@ extern void pcie_aspm_pm_state_change(struct pci_dev *pdev);
+ extern void pcie_aspm_powersave_config_link(struct pci_dev *pdev);
+ extern void pci_disable_link_state(struct pci_dev *pdev, int state);
+ extern void pci_disable_link_state_locked(struct pci_dev *pdev, int state);
+-extern void pcie_clear_aspm(void);
++extern void pcie_clear_aspm(struct pci_bus *bus);
+ extern void pcie_no_aspm(void);
+ #else
+ static inline void pcie_aspm_init_link_state(struct pci_dev *pdev)
+@@ -47,7 +47,7 @@ static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev)
+ static inline void pci_disable_link_state(struct pci_dev *pdev, int state)
+ {
+ }
+-static inline void pcie_clear_aspm(void)
++static inline void pcie_clear_aspm(struct pci_bus *bus)
+ {
+ }
+ static inline void pcie_no_aspm(void)
+--
+1.7.7.1
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+
diff --git a/freed-ora/current/f15/quite-apm.patch b/freed-ora/current/f15/quite-apm.patch
index 9325ae55b..c38511c41 100644
--- a/freed-ora/current/f15/quite-apm.patch
+++ b/freed-ora/current/f15/quite-apm.patch
@@ -7,7 +7,7 @@ index a46bd38..416dd12 100644
unsigned int bucket;
- WARN_ONCE(1, "deprecated apm_cpu_idle will be deleted in 2012");
-+ printk(KERN_INFO "deprecated apm_cpu_idle will be deleted in 2012");
++ printk_once(KERN_INFO "deprecated apm_cpu_idle will be deleted in 2012");
recalc:
if (jiffies_since_last_check > IDLE_CALC_LIMIT) {
use_apm_idle = 0;
diff --git a/freed-ora/current/f15/rtlwifi-fix-lps_lock-deadlock.patch b/freed-ora/current/f15/rtlwifi-fix-lps_lock-deadlock.patch
new file mode 100644
index 000000000..4e31ee9b7
--- /dev/null
+++ b/freed-ora/current/f15/rtlwifi-fix-lps_lock-deadlock.patch
@@ -0,0 +1,224 @@
+Path: news.gmane.org!not-for-mail
+From: Stanislaw Gruszka <sgruszka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
+Newsgroups: gmane.linux.kernel.wireless.general
+Subject: [PATCH v2] rtlwifi: fix lps_lock deadlock
+Date: Mon, 28 Nov 2011 10:33:40 +0100
+Lines: 169
+Approved: news@gmane.org
+Message-ID: <20111128093339.GC2372@redhat.com>
+References: <1322219327-23148-1-git-send-email-sgruszka@redhat.com>
+ <4ECFD1BF.4070503@lwfinger.net>
+ <20111128092308.GB2372@redhat.com>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: text/plain; charset=us-ascii
+X-Trace: dough.gmane.org 1322472712 10173 80.91.229.12 (28 Nov 2011 09:31:52 GMT)
+X-Complaints-To: usenet@dough.gmane.org
+NNTP-Posting-Date: Mon, 28 Nov 2011 09:31:52 +0000 (UTC)
+Cc: linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
+ Chaoming Li <chaoming_li-kXabqFNEczNtrwSWzY7KCg@public.gmane.org>
+To: Larry Finger <Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org>,
+ "John W. Linville" <linville-2XuSBdqkA4R54TAoqtyWWQ@public.gmane.org>
+Original-X-From: linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Mon Nov 28 10:31:45 2011
+Return-path: <linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
+Envelope-to: glkwg-linux-wireless-1dZseelyfdZg9hUCZPvPmw@public.gmane.org
+Original-Received: from vger.kernel.org ([209.132.180.67])
+ by lo.gmane.org with esmtp (Exim 4.69)
+ (envelope-from <linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>)
+ id 1RUxYu-0002H1-AY
+ for glkwg-linux-wireless-1dZseelyfdZg9hUCZPvPmw@public.gmane.org; Mon, 28 Nov 2011 10:31:44 +0100
+Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org) by vger.kernel.org via listexpand
+ id S1751698Ab1K1Jbm (ORCPT
+ <rfc822;glkwg-linux-wireless@m.gmane.org>);
+ Mon, 28 Nov 2011 04:31:42 -0500
+Original-Received: from mx1.redhat.com ([209.132.183.28]:62078 "EHLO mx1.redhat.com"
+ rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
+ id S1751434Ab1K1Jbl (ORCPT <rfc822;linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>);
+ Mon, 28 Nov 2011 04:31:41 -0500
+Original-Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22])
+ by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id pAS9VSak003418
+ (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK);
+ Mon, 28 Nov 2011 04:31:28 -0500
+Original-Received: from localhost (vpn1-4-194.ams2.redhat.com [10.36.4.194])
+ by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id pAS9VQNG013260;
+ Mon, 28 Nov 2011 04:31:27 -0500
+Content-Disposition: inline
+In-Reply-To: <20111128092308.GB2372-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
+User-Agent: Mutt/1.5.20 (2009-12-10)
+X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22
+Original-Sender: linux-wireless-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
+Precedence: bulk
+List-ID: <linux-wireless.vger.kernel.org>
+X-Mailing-List: linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
+Xref: news.gmane.org gmane.linux.kernel.wireless.general:81657
+Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.wireless.general/81657>
+
+rtl_lps_leave can be called from interrupt context, so we have to
+disable interrupts when taking lps_lock.
+
+Below is full lockdep info about deadlock:
+
+[ 93.815269] =================================
+[ 93.815390] [ INFO: inconsistent lock state ]
+[ 93.815472] 2.6.41.1-3.offch.fc15.x86_64.debug #1
+[ 93.815556] ---------------------------------
+[ 93.815635] inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
+[ 93.815743] swapper/0 [HC0[0]:SC1[1]:HE1:SE0] takes:
+[ 93.815832] (&(&rtlpriv->locks.lps_lock)->rlock){+.?...}, at: [<ffffffffa025dad6>] rtl_lps_leave+0x26/0x103 [rtlwifi]
+[ 93.815947] {SOFTIRQ-ON-W} state was registered at:
+[ 93.815947] [<ffffffff8108e10d>] __lock_acquire+0x369/0xd0c
+[ 93.815947] [<ffffffff8108efb3>] lock_acquire+0xf3/0x13e
+[ 93.815947] [<ffffffff814e981d>] _raw_spin_lock+0x45/0x79
+[ 93.815947] [<ffffffffa025de34>] rtl_swlps_rf_awake+0x5a/0x76 [rtlwifi]
+[ 93.815947] [<ffffffffa025aec0>] rtl_op_config+0x12a/0x32a [rtlwifi]
+[ 93.815947] [<ffffffffa01d614b>] ieee80211_hw_config+0x124/0x129 [mac80211]
+[ 93.815947] [<ffffffffa01e0af3>] ieee80211_dynamic_ps_disable_work+0x32/0x47 [mac80211]
+[ 93.815947] [<ffffffff81075aa5>] process_one_work+0x205/0x3e7
+[ 93.815947] [<ffffffff81076753>] worker_thread+0xda/0x15d
+[ 93.815947] [<ffffffff8107a119>] kthread+0xa8/0xb0
+[ 93.815947] [<ffffffff814f3184>] kernel_thread_helper+0x4/0x10
+[ 93.815947] irq event stamp: 547822
+[ 93.815947] hardirqs last enabled at (547822): [<ffffffff814ea1a7>] _raw_spin_unlock_irqrestore+0x45/0x61
+[ 93.815947] hardirqs last disabled at (547821): [<ffffffff814e9987>] _raw_spin_lock_irqsave+0x22/0x8e
+[ 93.815947] softirqs last enabled at (547790): [<ffffffff810623ed>] _local_bh_enable+0x13/0x15
+[ 93.815947] softirqs last disabled at (547791): [<ffffffff814f327c>] call_softirq+0x1c/0x30
+[ 93.815947]
+[ 93.815947] other info that might help us debug this:
+[ 93.815947] Possible unsafe locking scenario:
+[ 93.815947]
+[ 93.815947] CPU0
+[ 93.815947] ----
+[ 93.815947] lock(&(&rtlpriv->locks.lps_lock)->rlock);
+[ 93.815947] <Interrupt>
+[ 93.815947] lock(&(&rtlpriv->locks.lps_lock)->rlock);
+[ 93.815947]
+[ 93.815947] *** DEADLOCK ***
+[ 93.815947]
+[ 93.815947] no locks held by swapper/0.
+[ 93.815947]
+[ 93.815947] stack backtrace:
+[ 93.815947] Pid: 0, comm: swapper Not tainted 2.6.41.1-3.offch.fc15.x86_64.debug #1
+[ 93.815947] Call Trace:
+[ 93.815947] <IRQ> [<ffffffff814dfd00>] print_usage_bug+0x1e7/0x1f8
+[ 93.815947] [<ffffffff8101a849>] ? save_stack_trace+0x2c/0x49
+[ 93.815947] [<ffffffff8108d55c>] ? print_irq_inversion_bug.part.18+0x1a0/0x1a0
+[ 93.815947] [<ffffffff8108dc8a>] mark_lock+0x106/0x220
+[ 93.815947] [<ffffffff8108e099>] __lock_acquire+0x2f5/0xd0c
+[ 93.815947] [<ffffffff810152af>] ? native_sched_clock+0x34/0x36
+[ 93.830125] [<ffffffff810152ba>] ? sched_clock+0x9/0xd
+[ 93.830125] [<ffffffff81080181>] ? sched_clock_local+0x12/0x75
+[ 93.830125] [<ffffffffa025dad6>] ? rtl_lps_leave+0x26/0x103 [rtlwifi]
+[ 93.830125] [<ffffffff8108efb3>] lock_acquire+0xf3/0x13e
+[ 93.830125] [<ffffffffa025dad6>] ? rtl_lps_leave+0x26/0x103 [rtlwifi]
+[ 93.830125] [<ffffffff814e981d>] _raw_spin_lock+0x45/0x79
+[ 93.830125] [<ffffffffa025dad6>] ? rtl_lps_leave+0x26/0x103 [rtlwifi]
+[ 93.830125] [<ffffffff81422467>] ? skb_dequeue+0x62/0x6d
+[ 93.830125] [<ffffffffa025dad6>] rtl_lps_leave+0x26/0x103 [rtlwifi]
+[ 93.830125] [<ffffffffa025f677>] _rtl_pci_ips_leave_tasklet+0xe/0x10 [rtlwifi]
+[ 93.830125] [<ffffffff8106281f>] tasklet_action+0x8d/0xee
+[ 93.830125] [<ffffffff810629ce>] __do_softirq+0x112/0x25a
+[ 93.830125] [<ffffffff814f327c>] call_softirq+0x1c/0x30
+[ 93.830125] [<ffffffff81010bf6>] do_softirq+0x4b/0xa1
+[ 93.830125] [<ffffffff81062d7d>] irq_exit+0x5d/0xcf
+[ 93.830125] [<ffffffff814f3b7e>] do_IRQ+0x8e/0xa5
+[ 93.830125] [<ffffffff814ea533>] common_interrupt+0x73/0x73
+[ 93.830125] <EOI> [<ffffffff8108b825>] ? trace_hardirqs_off+0xd/0xf
+[ 93.830125] [<ffffffff812bb6d5>] ? intel_idle+0xe5/0x10c
+[ 93.830125] [<ffffffff812bb6d1>] ? intel_idle+0xe1/0x10c
+[ 93.830125] [<ffffffff813f8d5e>] cpuidle_idle_call+0x11c/0x1fe
+[ 93.830125] [<ffffffff8100e2ef>] cpu_idle+0xab/0x101
+[ 93.830125] [<ffffffff814c6373>] rest_init+0xd7/0xde
+[ 93.830125] [<ffffffff814c629c>] ? csum_partial_copy_generic+0x16c/0x16c
+[ 93.830125] [<ffffffff81d4bbb0>] start_kernel+0x3dd/0x3ea
+[ 93.830125] [<ffffffff81d4b2c4>] x86_64_start_reservations+0xaf/0xb3
+[ 93.830125] [<ffffffff81d4b140>] ? early_idt_handlers+0x140/0x140
+[ 93.830125] [<ffffffff81d4b3ca>] x86_64_start_kernel+0x102/0x111
+
+Resolves:
+https://bugzilla.redhat.com/show_bug.cgi?id=755154
+
+Reported-by: vjain02-9geRo0GdX4mblYp+tMVdN4dd74u8MsAO@public.gmane.org
+Reported-and-tested-by: Oliver Paukstadt <pstadt-J4iCZ0GWXu6s5+MaFmuW5Q@public.gmane.org>
+Cc: stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
+Acked-by: Larry Finger <Larry.Finger-tQ5ms3gMjBLk1uMJSBkQmQ@public.gmane.org>
+Signed-off-by: Stanislaw Gruszka <sgruszka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
+---
+v1 -> v2: add bug report reference
+
+ drivers/net/wireless/rtlwifi/ps.c | 17 +++++++++--------
+ 1 files changed, 9 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/net/wireless/rtlwifi/ps.c b/drivers/net/wireless/rtlwifi/ps.c
+index db52628..55c8e50 100644
+--- a/drivers/net/wireless/rtlwifi/ps.c
++++ b/drivers/net/wireless/rtlwifi/ps.c
+@@ -395,7 +395,7 @@ void rtl_lps_enter(struct ieee80211_hw *hw)
+ if (mac->link_state != MAC80211_LINKED)
+ return;
+
+- spin_lock(&rtlpriv->locks.lps_lock);
++ spin_lock_irq(&rtlpriv->locks.lps_lock);
+
+ /* Idle for a while if we connect to AP a while ago. */
+ if (mac->cnt_after_linked >= 2) {
+@@ -407,7 +407,7 @@ void rtl_lps_enter(struct ieee80211_hw *hw)
+ }
+ }
+
+- spin_unlock(&rtlpriv->locks.lps_lock);
++ spin_unlock_irq(&rtlpriv->locks.lps_lock);
+ }
+
+ /*Leave the leisure power save mode.*/
+@@ -416,8 +416,9 @@ void rtl_lps_leave(struct ieee80211_hw *hw)
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
+ struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+ struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
++ unsigned long flags;
+
+- spin_lock(&rtlpriv->locks.lps_lock);
++ spin_lock_irqsave(&rtlpriv->locks.lps_lock, flags);
+
+ if (ppsc->fwctrl_lps) {
+ if (ppsc->dot11_psmode != EACTIVE) {
+@@ -438,7 +439,7 @@ void rtl_lps_leave(struct ieee80211_hw *hw)
+ rtl_lps_set_psmode(hw, EACTIVE);
+ }
+ }
+- spin_unlock(&rtlpriv->locks.lps_lock);
++ spin_unlock_irqrestore(&rtlpriv->locks.lps_lock, flags);
+ }
+
+ /* For sw LPS*/
+@@ -539,9 +540,9 @@ void rtl_swlps_rf_awake(struct ieee80211_hw *hw)
+ RT_CLEAR_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM);
+ }
+
+- spin_lock(&rtlpriv->locks.lps_lock);
++ spin_lock_irq(&rtlpriv->locks.lps_lock);
+ rtl_ps_set_rf_state(hw, ERFON, RF_CHANGE_BY_PS);
+- spin_unlock(&rtlpriv->locks.lps_lock);
++ spin_unlock_irq(&rtlpriv->locks.lps_lock);
+ }
+
+ void rtl_swlps_rfon_wq_callback(void *data)
+@@ -574,9 +575,9 @@ void rtl_swlps_rf_sleep(struct ieee80211_hw *hw)
+ if (rtlpriv->link_info.busytraffic)
+ return;
+
+- spin_lock(&rtlpriv->locks.lps_lock);
++ spin_lock_irq(&rtlpriv->locks.lps_lock);
+ rtl_ps_set_rf_state(hw, ERFSLEEP, RF_CHANGE_BY_PS);
+- spin_unlock(&rtlpriv->locks.lps_lock);
++ spin_unlock_irq(&rtlpriv->locks.lps_lock);
+
+ if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_ASPM &&
+ !RT_IN_PS_LEVEL(ppsc, RT_PS_LEVEL_ASPM)) {
+--
+1.7.1
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
+the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+
diff --git a/freed-ora/current/f15/sources b/freed-ora/current/f15/sources
index 73ace2844..4281626e4 100644
--- a/freed-ora/current/f15/sources
+++ b/freed-ora/current/f15/sources
@@ -1,2 +1,2 @@
08a17f7b2ba0cf99944672d773ad5a46 linux-3.1-libre.tar.bz2
-7687deb3b0868ffaeecce80bb092145c patch-libre-3.1.4.bz2
+e035fb82dac7849769461f16589475f5 patch-libre-3.1.5.bz2
OpenPOWER on IntegriCloud