[kernel] r19603 - in dists/trunk/linux: . debian debian/bin debian/config debian/config/amd64 debian/config/i386 debian/config/kernelarch-x86 debian/installer/modules debian/installer/powerpc/modules/powerpc-powerpc-miboot debian/patches debian/patches/bugfix/all debian/patches/bugfix/x86 debian/patches/debian debian/patches/features/all/xen debian/templates

Ben Hutchings benh at alioth.debian.org
Mon Dec 10 04:06:21 UTC 2012


Author: benh
Date: Mon Dec 10 04:06:21 2012
New Revision: 19603

Log:
Merge changes from sid up to 3.2.35-1

Exclude RT changes and ABI fudges.

Refresh firmware-remove-redundant-log-messages-from-drivers.patch
against 3.6, but don't attempt to cover anything new yet.

Added:
   dists/trunk/linux/debian/bin/stable-update.sh
      - copied unchanged from r19601, dists/sid/linux/debian/bin/stable-update.sh
   dists/trunk/linux/debian/patches/bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch
   dists/trunk/linux/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch
      - copied, changed from r19601, dists/sid/linux/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch
   dists/trunk/linux/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
      - copied, changed from r19601, dists/sid/linux/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
   dists/trunk/linux/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
      - copied, changed from r19601, dists/sid/linux/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch
   dists/trunk/linux/debian/patches/bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch
   dists/trunk/linux/debian/patches/bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch
   dists/trunk/linux/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch
   dists/trunk/linux/debian/patches/debian/radeon-no-modeset-without-firmware.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/debian/radeon-no-modeset-without-firmware.patch
   dists/trunk/linux/debian/patches/features/all/xen/microcode-amd-fam15plus.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/features/all/xen/microcode-amd-fam15plus.patch
   dists/trunk/linux/debian/patches/features/all/xen/microcode-typo.patch
      - copied unchanged from r19601, dists/sid/linux/debian/patches/features/all/xen/microcode-typo.patch
   dists/trunk/linux/debian/patches/features/all/xen/microcode.patch
      - copied, changed from r19601, dists/sid/linux/debian/patches/features/all/xen/microcode.patch
Modified:
   dists/trunk/linux/   (props changed)
   dists/trunk/linux/debian/changelog
   dists/trunk/linux/debian/config/amd64/defines
   dists/trunk/linux/debian/config/config
   dists/trunk/linux/debian/config/i386/defines
   dists/trunk/linux/debian/config/kernelarch-x86/config
   dists/trunk/linux/debian/installer/modules/nic-extra-modules
   dists/trunk/linux/debian/installer/modules/nic-modules
   dists/trunk/linux/debian/installer/modules/nic-usb-modules
   dists/trunk/linux/debian/installer/modules/nic-wireless-modules
   dists/trunk/linux/debian/installer/modules/pata-modules
   dists/trunk/linux/debian/installer/modules/scsi-common-modules
   dists/trunk/linux/debian/installer/modules/scsi-extra-modules
   dists/trunk/linux/debian/installer/powerpc/modules/powerpc-powerpc-miboot/nic-extra-modules
   dists/trunk/linux/debian/patches/series
   dists/trunk/linux/debian/templates/control.image-dbg.in

Copied: dists/trunk/linux/debian/bin/stable-update.sh (from r19601, dists/sid/linux/debian/bin/stable-update.sh)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/bin/stable-update.sh	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/bin/stable-update.sh)
@@ -0,0 +1,78 @@
+#!/bin/bash -eu
+
+if [ $# -ne 2 ]; then
+    echo >&2 "Usage: $0 REPO VERSION"
+    echo >&2 "REPO is the git repository to generate a changelog from"
+    echo >&2 "VERSION is the stable version (without leading v)"
+    exit 2
+fi
+
+# Get base version, i.e. the Linus stable release that a version is based on
+base_version() {
+    local ver
+    ver="${1%-rc*}"
+    case "$ver" in
+	2.6.*.* | [3-9].*.* | ??.*.*)
+	    ver="${ver%.*}"
+	    ;;
+    esac
+    echo "$ver"
+}
+
+add_update() {
+    local base update
+    base="$(base_version "$1")"
+    update="${1#$base.}"
+    if [ "$update" = "$1" ]; then
+	update=0
+    fi
+    update="$((update + $2))"
+    if [ $update = 0 ]; then
+	echo "$base"
+    else
+	echo "$base.$update"
+    fi
+}
+
+# Get next stable update version
+next_update() {
+    add_update "$1" 1
+}
+
+export GIT_DIR="$1/.git"
+
+new_ver="$2"
+cur_pkg_ver="$(dpkg-parsechangelog | sed -n 's/^Version: //p')"
+cur_ver="${cur_pkg_ver%-*}"
+
+if [ "$(base_version "$new_ver")" != "$(base_version "$cur_ver")" ]; then
+    echo >&2 "$new_ver is not on the same stable series as $cur_ver"
+    exit 2
+fi
+
+case "$cur_pkg_ver" in
+    *~experimental*)
+	new_pkg_ver="$new_ver-1~experimental.1"
+	;;
+    *)
+	new_pkg_ver="$new_ver-1"
+	;;
+esac
+
+# dch insists on word-wrapping everything, so just add the URLs initially
+dch -v "$new_pkg_ver" --preserve --multimaint-merge -D UNRELEASED \
+    --release-heuristic=changelog "$(
+    echo "New upstream stable update: "
+    while [ "v$cur_ver" != "v$new_ver" ]; do
+        cur_ver="$(next_update "$cur_ver")"
+        echo "http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-$cur_ver"
+    done)"
+
+# Then insert the shortlogs with sed
+while [ "v$cur_ver" != "v$new_ver" ]; do
+    next_ver="$(next_update "$cur_ver")"
+    sed -i '/ChangeLog-'"${next_ver//./\\.}"'/a\
+'"$(git log --reverse --pretty='    - %s\' "v$cur_ver..v$next_ver^")"'
+' debian/changelog
+    cur_ver="$next_ver"
+done

Modified: dists/trunk/linux/debian/changelog
==============================================================================
--- dists/trunk/linux/debian/changelog	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/changelog	Mon Dec 10 04:06:21 2012	(r19603)
@@ -261,6 +261,140 @@
 
  -- Ben Hutchings <ben at decadent.org.uk>  Sun, 04 Mar 2012 20:27:42 +0000
 
+linux (3.2.35-1) unstable; urgency=low
+
+  * New upstream stable update:
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.33
+    - samsung-laptop: don't handle backlight if handled by acpi/video
+      (Closes: #693190)
+    - e1000: fix vlan processing regression (Closes: #690956)
+    - [x86] drm/i915: no lvds quirk for Zotac ZDBOX SD ID12/ID13
+      (Closes: #691122)
+    - au0828: fix case where STREAMOFF being called on stopped stream
+      causes BUG()
+    - net: Fix skb_under_panic oops in neigh_resolve_output
+    - vlan: don't deliver frames for unknown vlans to protocols
+    - RDS: fix rds-ping spinlock recursion
+    - tcp: resets are misrouted
+    - nfsd4: fix nfs4 stateid leak
+    - [arm] vfp: fix saving d16-d31 vfp registers on v6+ kernels
+    - scsi_debug: Fix off-by-one bug when unmapping region
+    - storvsc: Account for in-transit packets in the RESET path
+    - tmpfs,ceph,gfs2,isofs,reiserfs,xfs: fix fh_len checking
+    - ext4: race-condition protection for ext4_convert_unwritten_extents_endio
+      (CVE-2012-4508)
+    - md/raid10: use correct limit variable
+    - net/wireless: ipw2200: Fix panic occurring in ipw_handle_promiscuous_tx()
+    - USB: cdc-acm: fix pipe type of write endpoint
+    - [x86] xen: don't corrupt %eip when returning from a signal handler
+    - sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat()
+    - fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check
+    - netfilter: nf_conntrack: fix racy timer handling with reliable events
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.34
+    - x86: Remove the ancient and deprecated disable_hlt() and enable_hlt()
+      facility (Closes: #667501)
+    - ALSA: PCM: Fix some races at disconnection
+    - ALSA: usb-audio: Fix races at disconnection
+    - crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent
+      data corruption
+    - mac80211: Only process mesh config header on frames that RA_MATCH
+    - mac80211: fix SSID copy on IBSS JOIN
+    - mac80211: check management frame header length
+    - mac80211: verify that skb data is present
+    - mac80211: make sure data is accessible in EAPOL check
+    - ath9k: Test for TID only in BlockAcks while checking tx status
+    - nfs: Show original device name verbatim in /proc/*/mount{s,info}
+      (Closes: #669314)
+    - target: Avoid integer overflow in se_dev_align_max_sectors()
+    - hwmon: (w83627ehf) Force initial bank selection
+    - xfs: fix reading of wrapped log data
+    - fanotify: fix missing break
+    - drm/vmwgfx: Fix a case where the code would BUG when trying to pin
+      GMR memory
+    - sctp: fix call to SCTP_CMD_PROCESS_SACK in sctp_cmd_interpreter()
+    - netlink: use kfree_rcu() in netlink_release()
+    - tcp: fix FIONREAD/SIOCINQ
+    - net: fix divide by zero in tcp algorithm illinois (CVE-2012-4565)
+    - af-packet: fix oops when socket is not present
+    - r8169: Fix WoL on RTL8168d/8111d. (Closes: #674154)
+    - sky2: Fix for interrupt handler (Closes: #681280)
+    http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.35
+    - UBIFS: fix mounting problems after power cuts
+    - [s390] gup: add missing TASK_SIZE check to get_user_pages_fast()
+    - [x86] Exclude E820_RESERVED regions and memory holes above 4 GB from
+      direct mapping.
+    - netfilter: Mark SYN/ACK packets as invalid from original direction
+    - netfilter: Validate the sequence number of dataless ACK packets as well
+    - ipv4: avoid undefined behavior in do_ip_setsockopt()
+    - Input: i8042 - also perform controller reset when suspending
+      (Closes: #693934)
+    - brcm80211: smac: only print block-ack timeout message at trace level
+      (Closes: #674430)
+    - GFS2: Test bufdata with buffer locked and gfs2_log_lock held
+    - [x86] mce, therm_throt: Don't report power limit and package level
+      thermal throttle events in mcelog (Closes: #695209)
+    - [hppa] fix virtual aliasing issue in get_shared_area()
+    - xfs: drop buffer io reference when a bad bio is built
+    - reiserfs: Protect reiserfs_quota_{on,write}() with write lock
+    - md: Reassigned the parameters if read_seqretry returned true in func
+      md_is_badblock.
+    - md: Avoid write invalid address if read_seqretry returned true.
+    - [i386] Fix invalid stack address while in softirq
+    - selinux: fix sel_netnode_insert() suspicious rcu dereference
+    - [hppa] fix user-triggerable panic on parisc
+    - block: Don't access request after it might be freed
+    - futex: avoid wake_futex() for a PI futex_q
+
+  [ Ben Hutchings ]
+  * [x86] udeb: Re-add isci to scsi-extra-modules (Closes: #690886;
+    regression of #652897 in version 3.2~rc7-1~experimental.1 due to
+    mis-merge)
+  * udeb: Add missing net drivers:
+    - Add 8021q (Closes: #689159), cxgb4, cxgb4vf, igbvf, ixgbevf, micrel,
+      mlx4_en, pch_gbe, qlge, smsc9420, tehuti, vxge to nic-extra-modules
+    - Add int51x1, smsc75xx, smsc95xx to nic-usb-modules
+    - Add adm8211, at76c50x-usb, b43legacy, iwl4965, libertas_tf_usb,
+      mwifiex_pcie, mwl8k, orinoco_usb, prism2_usb, r8187se, r8192e_pci,
+      r8712u, rtl8192ce (Closes: #686605), rtl8192cu, rtl8192de, rtl8192se
+      vt6656_stage to nic-wireless-modules
+    - Move broadcom to nic-modules, as it may be needed by tg3
+  * udeb: Add bnx2fc, fnic, pmcraid to scsi-extra-modules
+  * udeb: Move rtl8180 to nic-wireless-modules
+  * [x86] asus-laptop: Do not call HWRS on init (Closes: #692436)
+  * [x86] drm/i915: Only kick out vesafb if we takeover the fbcon with KMS
+    (Closes: #686284)
+  * [!x86] radeon: Disable DRM_RADEON_KMS, as this is still not expected to
+    work (Closes: #628972)
+  * radeon: Disable KMS earlier if firmware is not installed (Closes: #607194)
+  * [amd64] linux-image: Include VIA Nano in package description
+  * linux-image-dbg: Change package description to use the phrase
+    'debugging symbols' and correct grammar
+  * usb: Disable UAS; it is known to be broken, and the supported devices
+    can also work with usb-storage
+  * ipv6: Treat ND option 31 as userland (DNSSL support) (Closes: #694522)
+  * rt2x00: Add device IDs 5362, 5392, 539b (Closes: #694312)
+  * udeb: Add pata_piccolo to pata-modules (Closes: #695437)
+  * firmware_class: Log every success and failure against given device
+  * firmware: Remove redundant log messages from drivers
+  * [x86] ACPI / video: ignore BIOS initial backlight value for
+    HP Folio 13-2000 (Closes: #692361)
+  * [x86] KVM: x86: invalid opcode oops on SET_SREGS with OSXSAVE bit set
+    (CVE-2012-4461)
+  * kmod: make __request_module() killable (CVE-2012-4398)
+  * exec: do not leave bprm->interp on stack (CVE-2012-4530)
+  * exec: use -ELOOP for max recursion depth
+  * [rt] Update to 3.2.34-rt51:
+    - hrtimer: Raise softirq if hrtimer irq stalled
+    - rcu: Disable RCU_FAST_NO_HZ on RT
+    - net: netfilter: Serialize xt_write_recseq sections on RT
+  * megaraid_sas: fix memory leak if SGL has zero length entries
+    (Closes: #688198)
+
+  [ Ian Campbell ]
+  * [xen] add support for microcode updating. (Closes: #693053)
+
+ -- Ben Hutchings <ben at decadent.org.uk>  Mon, 10 Dec 2012 00:14:55 +0000
+
 linux (3.2.32-1) unstable; urgency=low
 
   * New upstream stable update:

Modified: dists/trunk/linux/debian/config/amd64/defines
==============================================================================
--- dists/trunk/linux/debian/config/amd64/defines	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/config/amd64/defines	Mon Dec 10 04:06:21 2012	(r19603)
@@ -14,7 +14,7 @@
 
 [amd64_description]
 hardware: 64-bit PCs
-hardware-long: PCs with AMD64 or Intel 64 processors
+hardware-long: PCs with AMD64, Intel 64 or VIA Nano processors
 parts: xen
 
 [amd64_image]

Modified: dists/trunk/linux/debian/config/config
==============================================================================
--- dists/trunk/linux/debian/config/config	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/config/config	Mon Dec 10 04:06:21 2012	(r19603)
@@ -391,7 +391,7 @@
 ##
 ## file: drivers/gpu/drm/radeon/Kconfig
 ##
-CONFIG_DRM_RADEON_KMS=y
+# CONFIG_DRM_RADEON_KMS is not set
 
 ##
 ## file: drivers/gpu/drm/vmwgfx/Kconfig
@@ -3172,7 +3172,6 @@
 CONFIG_USB_STORAGE_KARMA=m
 CONFIG_USB_STORAGE_CYPRESS_ATACB=m
 CONFIG_USB_STORAGE_ENE_UB6250=m
-CONFIG_USB_UAS=m
 # CONFIG_USB_LIBUSUAL is not set
 
 ##

Modified: dists/trunk/linux/debian/config/i386/defines
==============================================================================
--- dists/trunk/linux/debian/config/i386/defines	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/config/i386/defines	Mon Dec 10 04:06:21 2012	(r19603)
@@ -48,7 +48,7 @@
 
 [amd64_description]
 hardware: 64-bit PCs
-hardware-long: PCs with AMD64 or Intel 64 processors
+hardware-long: PCs with AMD64, Intel 64 or VIA Nano processors
 parts: xen
 
 [amd64_image]

Modified: dists/trunk/linux/debian/config/kernelarch-x86/config
==============================================================================
--- dists/trunk/linux/debian/config/kernelarch-x86/config	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/config/kernelarch-x86/config	Mon Dec 10 04:06:21 2012	(r19603)
@@ -453,6 +453,11 @@
 CONFIG_DRM_I2C_SIL164=m
 
 ##
+## file: drivers/gpu/drm/radeon/Kconfig
+##
+CONFIG_DRM_RADEON_KMS=y
+
+##
 ## file: drivers/gpu/stub/Kconfig
 ##
 # CONFIG_STUB_POULSBO is not set

Modified: dists/trunk/linux/debian/installer/modules/nic-extra-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/nic-extra-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/nic-extra-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -1,5 +1,3 @@
-# Note that this is an incomplete list that tries to be a common subset
-# that is right for most kernels. Suppliment with any others.
 82596 ?
 ac3200 ?
 amd8111e ?
@@ -97,13 +95,24 @@
 enic ?
 be2net ?
 myri10ge ?
-sc92031 ?
+# inet_lro is shared but now only used by myri10ge (and the iw_nes IB driver)
 inet_lro ?
+sc92031 ?
 qlcnic ?
 bna ?
+cxgb4 ?
+cxgb4vf ?
+igbvf ?
+ixgbevf ?
+mlx4_en ?
+vxge ?
+pch_gbe ?
+qlge ?
+smsc9420 ?
+tehuti ?
 
 # phy drivers
-broadcom ?
+# broadcom is in nic-modules
 cicada ?
 davicom ?
 et1011c ?
@@ -111,6 +120,7 @@
 lxt ?
 marvell ?
 mdio-bitbang ?
+micrel ?
 national ?
 qsemi ?
 realtek ?
@@ -120,3 +130,6 @@
 
 # VMWare
 vmxnet3 ?
+
+# VLAN
+8021q

Modified: dists/trunk/linux/debian/installer/modules/nic-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/nic-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/nic-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -1,4 +1,4 @@
-# Some very common nic modules.
+# Some historically common net drivers
 3c59x
 8139too
 e100
@@ -9,3 +9,6 @@
 winbond-840
 eth1394 ?
 xen-netfront ?
+
+# PHY driver, may be needed by tg3
+broadcom ?

Modified: dists/trunk/linux/debian/installer/modules/nic-usb-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/nic-usb-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/nic-usb-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -11,6 +11,8 @@
 dm9601 ?
 zd1211rw ?
 rndis_wlan ?
-rtl8180 ?
 rtl8187 ?
 g_ether ?
+int51x1 ?
+smsc75xx ?
+smsc95xx ?

Modified: dists/trunk/linux/debian/installer/modules/nic-wireless-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/nic-wireless-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/nic-wireless-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -19,10 +19,9 @@
 carl9170 ?
 iwlwifi ?
 iwl3945 ?
+iwl4965 ?
 b43 ?
 brcmsmac ?
-
-# rt2x00 drivers
 rt2400pci ?
 rt2500pci ?
 rt2500usb ?
@@ -30,6 +29,23 @@
 rt2800usb ?
 rt61pci ?
 rt73usb ?
+adm8211 ?
+at76c50x-usb ?
+b43legacy ?
+libertas_tf_usb ?
+mwifiex_pcie ?
+mwl8k ?
+orinoco_usb ?
+rtl8180 ?
+rtl8192ce ?
+rtl8192cu ?
+rtl8192de ?
+rtl8192se ?
+r8187se ?
+r8192e_pci ?
+r8712u ?
+vt6656_stage ?
+prism2_usb ?
 
 # lib80211 encryption algorithms
 lib80211_crypt_wep ?

Modified: dists/trunk/linux/debian/installer/modules/pata-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/pata-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/pata-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -25,6 +25,7 @@
 pata_optidma ?
 pata_pdc2027x ?
 pata_pdc202xx_old ?
+pata_piccolo ?
 pata_qdi ?
 pata_radisys ?
 pata_rz1000 ?

Modified: dists/trunk/linux/debian/installer/modules/scsi-common-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/scsi-common-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/scsi-common-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -1,3 +1,4 @@
+# Some historically common SCSI drivers
 aic79xx
 aic7xxx
 BusLogic ?

Modified: dists/trunk/linux/debian/installer/modules/scsi-extra-modules
==============================================================================
--- dists/trunk/linux/debian/installer/modules/scsi-extra-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/modules/scsi-extra-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -35,6 +35,10 @@
 qla4xxx ?
 qla2xxx ?
 pm8001 ?
+isci ?
+bnx2fc ?
+fnic ?
+pmcraid ?
 
 # VMWare
 vmw_pvscsi ?

Modified: dists/trunk/linux/debian/installer/powerpc/modules/powerpc-powerpc-miboot/nic-extra-modules
==============================================================================
--- dists/trunk/linux/debian/installer/powerpc/modules/powerpc-powerpc-miboot/nic-extra-modules	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/installer/powerpc/modules/powerpc-powerpc-miboot/nic-extra-modules	Mon Dec 10 04:06:21 2012	(r19603)
@@ -14,3 +14,4 @@
 p54pci
 p54usb
 yellowfin
+8021q

Copied: dists/trunk/linux/debian/patches/bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch (from r19601, dists/sid/linux/debian/patches/bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch)
@@ -0,0 +1,115 @@
+From: Kees Cook <keescook at chromium.org>
+Date: Thu, 6 Dec 2012 17:00:21 +1100
+Subject: [1/2] exec: do not leave bprm->interp on stack
+
+commit 1e1b8374592f5fb347625e84d8a5f2f40d858a24 upstream.
+
+If a series of scripts are executed, each triggering module loading via
+unprintable bytes in the script header, kernel stack contents can leak
+into the command line.
+
+Normally execution of binfmt_script and binfmt_misc happens recursively.
+However, when modules are enabled, and unprintable bytes exist in the
+bprm->buf, execution will restart after attempting to load matching binfmt
+modules.  Unfortunately, the logic in binfmt_script and binfmt_misc does
+not expect to get restarted.  They leave bprm->interp pointing to their
+local stack.  This means on restart bprm->interp is left pointing into
+unused stack memory which can then be copied into the userspace argv
+areas.
+
+After additional study, it seems that both recursion and restart remains
+the desirable way to handle exec with scripts, misc, and modules.  As
+such, we need to protect the changes to interp.
+
+This changes the logic to require allocation for any changes to the
+bprm->interp.  To avoid adding a new kmalloc to every exec, the default
+value is left as-is.  Only when passing through binfmt_script or
+binfmt_misc does an allocation take place.
+
+For a proof of concept, see DoTest.sh from:
+http://www.halfdog.net/Security/2012/LinuxKernelBinfmtScriptStackDataDisclosure/
+
+Signed-off-by: Kees Cook <keescook at chromium.org>
+Cc: halfdog <me at halfdog.net>
+Cc: P J P <ppandit at redhat.com>
+Cc: Alexander Viro <viro at zeniv.linux.org.uk>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ fs/binfmt_misc.c        |    5 ++++-
+ fs/binfmt_script.c      |    4 +++-
+ fs/exec.c               |   15 +++++++++++++++
+ include/linux/binfmts.h |    1 +
+ 4 files changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
+index b0b70fb..b0c1755 100644
+--- a/fs/binfmt_misc.c
++++ b/fs/binfmt_misc.c
+@@ -176,7 +176,10 @@ static int load_misc_binary(struct linux_binprm *bprm)
+ 		goto _error;
+ 	bprm->argc ++;
+ 
+-	bprm->interp = iname;	/* for binfmt_script */
++	/* Update interp in case binfmt_script needs it. */
++	retval = bprm_change_interp(iname, bprm);
++	if (retval < 0)
++		goto _error;
+ 
+ 	interp_file = open_exec (iname);
+ 	retval = PTR_ERR (interp_file);
+diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
+index 8c95499..4834f2c 100644
+--- a/fs/binfmt_script.c
++++ b/fs/binfmt_script.c
+@@ -82,7 +82,9 @@ static int load_script(struct linux_binprm *bprm)
+ 	retval = copy_strings_kernel(1, &i_name, bprm);
+ 	if (retval) return retval; 
+ 	bprm->argc++;
+-	bprm->interp = interp;
++	retval = bprm_change_interp(interp, bprm);
++	if (retval < 0)
++		return retval;
+ 
+ 	/*
+ 	 * OK, now restart the process with the interpreter's dentry.
+diff --git a/fs/exec.c b/fs/exec.c
+index b71b08c..bf50973 100644
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -1175,9 +1175,24 @@ void free_bprm(struct linux_binprm *bprm)
+ 		mutex_unlock(&current->signal->cred_guard_mutex);
+ 		abort_creds(bprm->cred);
+ 	}
++	/* If a binfmt changed the interp, free it. */
++	if (bprm->interp != bprm->filename)
++		kfree(bprm->interp);
+ 	kfree(bprm);
+ }
+ 
++int bprm_change_interp(char *interp, struct linux_binprm *bprm)
++{
++	/* If a binfmt changed the interp, free it first. */
++	if (bprm->interp != bprm->filename)
++		kfree(bprm->interp);
++	bprm->interp = kstrdup(interp, GFP_KERNEL);
++	if (!bprm->interp)
++		return -ENOMEM;
++	return 0;
++}
++EXPORT_SYMBOL(bprm_change_interp);
++
+ /*
+  * install the new credentials for this executable
+  */
+diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
+index 2630c9b..7f0e297 100644
+--- a/include/linux/binfmts.h
++++ b/include/linux/binfmts.h
+@@ -114,6 +114,7 @@ extern int setup_arg_pages(struct linux_binprm * bprm,
+ 			   unsigned long stack_top,
+ 			   int executable_stack);
+ extern int bprm_mm_init(struct linux_binprm *bprm);
++extern int bprm_change_interp(char *interp, struct linux_binprm *bprm);
+ extern int copy_strings_kernel(int argc, const char *const *argv,
+ 			       struct linux_binprm *bprm);
+ extern int prepare_bprm_creds(struct linux_binprm *bprm);

Copied and modified: dists/trunk/linux/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch (from r19601, dists/sid/linux/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch)
==============================================================================
--- dists/sid/linux/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch	Mon Dec 10 02:01:11 2012	(r19601, copy source)
+++ dists/trunk/linux/debian/patches/bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch	Mon Dec 10 04:06:21 2012	(r19603)
@@ -33,7 +33,7 @@
 Cc: P J P <ppandit at redhat.com>
 Cc: Alexander Viro <viro at zeniv.linux.org.uk>
 Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
-[bwh: Backported to 3.2: adjust context]
+[bwh: Backported to 3.6: adjust context]
 ---
  fs/binfmt_em86.c        |    1 -
  fs/binfmt_misc.c        |    6 ------
@@ -54,7 +54,7 @@
  	bprm->file = NULL;
 --- a/fs/binfmt_misc.c
 +++ b/fs/binfmt_misc.c
-@@ -116,10 +116,6 @@ static int load_misc_binary(struct linux
+@@ -117,10 +117,6 @@ static int load_misc_binary(struct linux
  	if (!enabled)
  		goto _ret;
  
@@ -65,7 +65,7 @@
  	/* to keep locking time low, we copy the interpreter string */
  	read_lock(&entries_lock);
  	fmt = check_file(bprm);
-@@ -199,8 +195,6 @@ static int load_misc_binary(struct linux
+@@ -200,8 +196,6 @@ static int load_misc_binary(struct linux
  	if (retval < 0)
  		goto _error;
  
@@ -95,9 +95,9 @@
  	bprm->file = NULL;
 --- a/fs/exec.c
 +++ b/fs/exec.c
-@@ -1384,6 +1384,10 @@ int search_binary_handler(struct linux_b
+@@ -1398,6 +1398,10 @@ int search_binary_handler(struct linux_b
  	struct linux_binfmt *fmt;
- 	pid_t old_pid;
+ 	pid_t old_pid, old_vpid;
  
 +	/* This allows 4 levels of binfmt rewrites before failing hard. */
 +	if (depth > 5)
@@ -106,7 +106,7 @@
  	retval = security_bprm_check(bprm);
  	if (retval)
  		return retval;
-@@ -1407,12 +1411,8 @@ int search_binary_handler(struct linux_b
+@@ -1422,12 +1426,8 @@ int search_binary_handler(struct linux_b
  			if (!try_module_get(fmt->module))
  				continue;
  			read_unlock(&binfmt_lock);
@@ -119,10 +119,10 @@
 -			 */
  			bprm->recursion_depth = depth;
  			if (retval >= 0) {
- 				if (depth == 0)
+ 				if (depth == 0) {
 --- a/include/linux/binfmts.h
 +++ b/include/linux/binfmts.h
-@@ -67,8 +67,6 @@ struct linux_binprm {
+@@ -68,8 +68,6 @@ struct linux_binprm {
  #define BINPRM_FLAGS_EXECFD_BIT 1
  #define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
  

Copied and modified: dists/trunk/linux/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch (from r19601, dists/sid/linux/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch)
==============================================================================
--- dists/sid/linux/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch	Mon Dec 10 02:01:11 2012	(r19601, copy source)
+++ dists/trunk/linux/debian/patches/bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch	Mon Dec 10 04:06:21 2012	(r19603)
@@ -52,7 +52,7 @@
  	/* disable MPU */
 --- a/arch/x86/kernel/microcode_amd.c
 +++ b/arch/x86/kernel/microcode_amd.c
-@@ -330,10 +330,8 @@ static enum ucode_state request_microcod
+@@ -337,10 +337,8 @@ static enum ucode_state request_microcod
  	if (c->x86 >= 0x15)
  		snprintf(fw_name, sizeof(fw_name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
  
@@ -95,7 +95,7 @@
      fw_size = firmware->size / sizeof(u32);
 --- a/drivers/bluetooth/ath3k.c
 +++ b/drivers/bluetooth/ath3k.c
-@@ -305,10 +305,8 @@ static int ath3k_load_patch(struct usb_d
+@@ -306,10 +306,8 @@ static int ath3k_load_patch(struct usb_d
  		fw_version.rom_version);
  
  	ret = request_firmware(&firmware, filename, &udev->dev);
@@ -107,7 +107,7 @@
  
  	pt_version.rom_version = *(int *)(firmware->data + firmware->size - 8);
  	pt_version.build_version = *(int *)
-@@ -367,10 +365,8 @@ static int ath3k_load_syscfg(struct usb_
+@@ -368,10 +366,8 @@ static int ath3k_load_syscfg(struct usb_
  		fw_version.rom_version, clk_value, ".dfu");
  
  	ret = request_firmware(&firmware, filename, &udev->dev);
@@ -139,7 +139,7 @@
  		kfree(data);
 --- a/drivers/bluetooth/bfusb.c
 +++ b/drivers/bluetooth/bfusb.c
-@@ -681,10 +681,8 @@ static int bfusb_probe(struct usb_interf
+@@ -672,10 +672,8 @@ static int bfusb_probe(struct usb_interf
  	skb_queue_head_init(&data->pending_q);
  	skb_queue_head_init(&data->completed_q);
  
@@ -153,7 +153,7 @@
  
 --- a/drivers/bluetooth/bt3c_cs.c
 +++ b/drivers/bluetooth/bt3c_cs.c
-@@ -594,10 +594,8 @@ static int bt3c_open(bt3c_info_t *info)
+@@ -585,10 +585,8 @@ static int bt3c_open(bt3c_info_t *info)
  
  	/* Load firmware */
  	err = request_firmware(&firmware, "BT3CPCC.bin", &info->p_dev->dev);
@@ -167,7 +167,7 @@
  
 --- a/drivers/bluetooth/btmrvl_sdio.c
 +++ b/drivers/bluetooth/btmrvl_sdio.c
-@@ -258,8 +258,6 @@ static int btmrvl_sdio_download_helper(s
+@@ -261,8 +261,6 @@ static int btmrvl_sdio_download_helper(s
  	ret = request_firmware(&fw_helper, card->helper,
  						&card->func->dev);
  	if ((ret < 0) || !fw_helper) {
@@ -176,7 +176,7 @@
  		ret = -ENOENT;
  		goto done;
  	}
-@@ -360,8 +358,6 @@ static int btmrvl_sdio_download_fw_w_hel
+@@ -361,8 +359,6 @@ static int btmrvl_sdio_download_fw_w_hel
  	ret = request_firmware(&fw_firmware, card->firmware,
  							&card->func->dev);
  	if ((ret < 0) || !fw_firmware) {
@@ -202,7 +202,7 @@
  		       fw->size, fw_name);
 --- a/drivers/dma/imx-sdma.c
 +++ b/drivers/dma/imx-sdma.c
-@@ -1152,10 +1152,8 @@ static void sdma_load_firmware(const str
+@@ -1164,10 +1164,8 @@ static void sdma_load_firmware(const str
  	const struct sdma_script_start_addrs *addr;
  	unsigned short *ram_code;
  
@@ -231,7 +231,7 @@
  	where = 0;
 --- a/drivers/gpu/drm/nouveau/nvc0_graph.c
 +++ b/drivers/gpu/drm/nouveau/nvc0_graph.c
-@@ -732,10 +732,8 @@ nvc0_graph_create_fw(struct drm_device *
+@@ -734,10 +734,8 @@ nvc0_graph_create_fw(struct drm_device *
  	if (ret) {
  		snprintf(f, sizeof(f), "nouveau/%s", fwname);
  		ret = request_firmware(&fw, f, &dev->pdev->dev);
@@ -260,7 +260,7 @@
  		printk(KERN_ERR
 --- a/drivers/gpu/drm/radeon/ni.c
 +++ b/drivers/gpu/drm/radeon/ni.c
-@@ -379,10 +379,6 @@ out:
+@@ -398,10 +398,6 @@ out:
  	platform_device_unregister(pdev);
  
  	if (err) {
@@ -273,7 +273,7 @@
  		release_firmware(rdev->me_fw);
 --- a/drivers/gpu/drm/radeon/r100.c
 +++ b/drivers/gpu/drm/radeon/r100.c
-@@ -994,10 +994,7 @@ static int r100_cp_init_microcode(struct
+@@ -1033,10 +1033,7 @@ static int r100_cp_init_microcode(struct
  
  	err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
  	platform_device_unregister(pdev);
@@ -287,7 +287,7 @@
  		       rdev->me_fw->size, fw_name);
 --- a/drivers/gpu/drm/radeon/r600.c
 +++ b/drivers/gpu/drm/radeon/r600.c
-@@ -2087,10 +2087,6 @@ out:
+@@ -2020,10 +2020,6 @@ out:
  	platform_device_unregister(pdev);
  
  	if (err) {
@@ -327,7 +327,7 @@
  		       dev_priv->me_fw->size, fw_name);
 --- a/drivers/infiniband/hw/qib/qib_sd7220.c
 +++ b/drivers/infiniband/hw/qib/qib_sd7220.c
-@@ -403,10 +403,8 @@ int qib_sd7220_init(struct qib_devdata *
+@@ -405,10 +405,8 @@ int qib_sd7220_init(struct qib_devdata *
  	}
  
  	ret = request_firmware(&fw, SD7220_FW_NAME, &dd->pcidev->dev);
@@ -341,7 +341,7 @@
  	ret = qib_ibsd_ucode_loaded(dd->pport, fw);
 --- a/drivers/input/touchscreen/atmel_mxt_ts.c
 +++ b/drivers/input/touchscreen/atmel_mxt_ts.c
-@@ -954,10 +954,8 @@ static int mxt_load_fw(struct device *de
+@@ -956,10 +956,8 @@ static int mxt_load_fw(struct device *de
  	int ret;
  
  	ret = request_firmware(&fw, fn, dev);
@@ -355,7 +355,7 @@
  	mxt_write_object(data, MXT_GEN_COMMAND_T6,
 --- a/drivers/isdn/hardware/mISDN/speedfax.c
 +++ b/drivers/isdn/hardware/mISDN/speedfax.c
-@@ -389,11 +389,8 @@ setup_instance(struct sfax_hw *card)
+@@ -392,11 +392,8 @@ setup_instance(struct sfax_hw *card)
  	card->isar.owner = THIS_MODULE;
  
  	err = request_firmware(&firmware, "isdn/ISAR.BIN", &card->pdev->dev);
@@ -367,30 +367,20 @@
 -	}
  	if (debug & DEBUG_HW)
  		pr_notice("%s: got firmware %zu bytes\n",
- 			card->name, firmware->size);
+ 			  card->name, firmware->size);
 --- a/drivers/media/common/tuners/tuner-xc2028.c
 +++ b/drivers/media/common/tuners/tuner-xc2028.c
-@@ -278,16 +278,8 @@ static int load_all_firmwares(struct dvb
- 
- 	tuner_dbg("Reading firmware %s\n", fname);
- 	rc = request_firmware(&fw, fname, priv->i2c_props.adap->dev.parent);
--	if (rc < 0) {
--		if (rc == -ENOENT)
--			tuner_err("Error: firmware %s not found.\n",
--				   fname);
--		else
--			tuner_err("Error %d while requesting firmware %s \n",
--				   rc, fname);
--
-+	if (rc)
- 		return rc;
--	}
- 	p = fw->data;
- 	endp = p + fw->size;
+@@ -1350,7 +1350,6 @@ static void load_firmware_cb(const struc
  
+ 	tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
+ 	if (!fw) {
+-		tuner_err("Could not load firmware %s.\n", priv->fname);
+ 		priv->state = XC2028_NODEV;
+ 		return;
+ 	}
 --- a/drivers/media/dvb/dvb-usb/dib0700_devices.c
 +++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c
-@@ -1852,12 +1852,9 @@ static int stk9090m_frontend_attach(stru
+@@ -2108,12 +2108,9 @@ static int stk9090m_frontend_attach(stru
  
  	dib9000_i2c_enumeration(&adap->dev->i2c_adap, 1, 0x10, 0x80);
  
@@ -405,7 +395,7 @@
  	stk9090m_config.microcode_B_fe_size = state->frontend_firmware->size;
  	stk9090m_config.microcode_B_fe_buffer = state->frontend_firmware->data;
  
-@@ -1918,12 +1915,9 @@ static int nim9090md_frontend_attach(str
+@@ -2174,12 +2171,9 @@ static int nim9090md_frontend_attach(str
  	msleep(20);
  	dib0700_set_gpio(adap->dev, GPIO0, GPIO_OUT, 1);
  
@@ -477,7 +467,7 @@
  		p = kmalloc(fw->size, GFP_KERNEL);
 --- a/drivers/media/dvb/frontends/af9013.c
 +++ b/drivers/media/dvb/frontends/af9013.c
-@@ -1346,15 +1346,8 @@ static int af9013_download_firmware(stru
+@@ -1348,15 +1348,8 @@ static int af9013_download_firmware(stru
  
  	/* request the firmware, this will block and timeout */
  	ret = request_firmware(&fw, fw_file, state->i2c->dev.parent);
@@ -487,7 +477,7 @@
 -			" on firmware-problems. (%d)",
 -			fw_file, ret);
 +	if (ret)
- 		goto error;
+ 		goto err;
 -	}
 -
 -	info("downloading firmware from file '%s'", fw_file);
@@ -496,7 +486,7 @@
  	for (i = 0; i < fw->size; i++)
 --- a/drivers/media/dvb/frontends/bcm3510.c
 +++ b/drivers/media/dvb/frontends/bcm3510.c
-@@ -619,10 +619,9 @@ static int bcm3510_download_firmware(str
+@@ -622,10 +622,9 @@ static int bcm3510_download_firmware(str
  	int ret,i;
  
  	deb_info("requesting firmware\n");
@@ -538,25 +528,23 @@
  		return -EIO;
 -	}
  
- 	state->microcode = kmalloc(fw->size, GFP_KERNEL);
+ 	state->microcode = kmemdup(fw->data, fw->size, GFP_KERNEL);
  	if (state->microcode == NULL) {
 --- a/drivers/media/dvb/frontends/drxk_hard.c
 +++ b/drivers/media/dvb/frontends/drxk_hard.c
-@@ -5968,13 +5968,8 @@ static int load_microcode(struct drxk_st
- 	dprintk(1, "\n");
+@@ -6275,12 +6275,6 @@ static void load_firmware_cb(const struc
  
- 	err = request_firmware(&fw, mc_name, state->i2c->dev.parent);
--	if (err < 0) {
+ 	dprintk(1, ": %s\n", fw ? "firmware loaded" : "firmware not loaded");
+ 	if (!fw) {
 -		printk(KERN_ERR
--		       "drxk: Could not load firmware file %s.\n", mc_name);
+-		       "drxk: Could not load firmware file %s.\n",
+-			state->microcode_name);
 -		printk(KERN_INFO
--		       "drxk: Copy %s to your hotplug directory!\n", mc_name);
-+	if (err)
- 		return err;
--	}
- 	err = DownloadMicrocode(state, fw->data, fw->size);
- 	release_firmware(fw);
- 	return err;
+-		       "drxk: Copy %s to your hotplug directory!\n",
+-			state->microcode_name);
+ 		state->microcode_name = NULL;
+ 
+ 		/*
 --- a/drivers/media/dvb/frontends/ds3000.c
 +++ b/drivers/media/dvb/frontends/ds3000.c
 @@ -403,12 +403,8 @@ static int ds3000_firmware_ondemand(stru
@@ -648,7 +636,7 @@
  		printk("sp8870: writing firmware to device failed\n");
 --- a/drivers/media/dvb/frontends/sp887x.c
 +++ b/drivers/media/dvb/frontends/sp887x.c
-@@ -514,10 +514,8 @@ static int sp887x_init(struct dvb_fronte
+@@ -527,10 +527,8 @@ static int sp887x_init(struct dvb_fronte
  		/* request the firmware, this will block until someone uploads it */
  		printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE);
  		ret = state->config->request_firmware(fe, &fw, SP887X_DEFAULT_FIRMWARE);
@@ -662,7 +650,7 @@
  		release_firmware(fw);
 --- a/drivers/media/dvb/frontends/tda10048.c
 +++ b/drivers/media/dvb/frontends/tda10048.c
-@@ -509,8 +509,6 @@ static int tda10048_firmware_upload(stru
+@@ -495,8 +495,6 @@ static int tda10048_firmware_upload(stru
  	ret = request_firmware(&fw, TDA10048_DEFAULT_FIRMWARE,
  		state->i2c->dev.parent);
  	if (ret) {
@@ -695,15 +683,16 @@
  				printk(KERN_INFO "tda1004x: please rename the firmware file to %s\n",
 --- a/drivers/media/dvb/frontends/tda10071.c
 +++ b/drivers/media/dvb/frontends/tda10071.c
-@@ -930,13 +930,8 @@ static int tda10071_init(struct dvb_fron
+@@ -939,14 +939,8 @@ static int tda10071_init(struct dvb_fron
  
  		/* request the firmware, this will block and timeout */
  		ret = request_firmware(&fw, fw_file, priv->i2c->dev.parent);
 -		if (ret) {
--			err("did not find the firmware file. (%s) "
--				"Please see linux/Documentation/dvb/ for more" \
--				" details on firmware-problems. (%d)",
--				fw_file, ret);
+-			dev_err(&priv->i2c->dev, "%s: did not find the " \
+-					"firmware file. (%s) Please see " \
+-					"linux/Documentation/dvb/ for more " \
+-					"details on firmware-problems. (%d)\n",
+-					KBUILD_MODNAME, fw_file, ret);
 +		if (ret)
  			goto error;
 -		}
@@ -738,7 +727,7 @@
  	}
 --- a/drivers/media/dvb/siano/smscoreapi.c
 +++ b/drivers/media/dvb/siano/smscoreapi.c
-@@ -642,10 +642,8 @@ static int smscore_load_firmware_from_fi
+@@ -639,10 +639,8 @@ static int smscore_load_firmware_from_fi
  		return -EINVAL;
  
  	rc = request_firmware(&fw, filename, coredev->device);
@@ -752,7 +741,7 @@
  			    GFP_KERNEL | GFP_DMA);
 --- a/drivers/media/dvb/ttpci/av7110.c
 +++ b/drivers/media/dvb/ttpci/av7110.c
-@@ -1532,16 +1532,9 @@ static int get_firmware(struct av7110* a
+@@ -1531,16 +1531,9 @@ static int get_firmware(struct av7110* a
  	/* request the av7110 firmware, this will block until someone uploads it */
  	ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
  	if (ret) {
@@ -832,7 +821,7 @@
  	packet_num = ptr[0];
 --- a/drivers/media/radio/wl128x/fmdrv_common.c
 +++ b/drivers/media/radio/wl128x/fmdrv_common.c
-@@ -1248,10 +1248,8 @@ static u32 fm_download_firmware(struct f
+@@ -1248,10 +1248,8 @@ static int fm_download_firmware(struct f
  
  	ret = request_firmware(&fw_entry, fw_name,
  				&fmdev->radio_dev->dev);
@@ -846,7 +835,7 @@
  	fw_data = (void *)fw_entry->data;
 --- a/drivers/media/video/bt8xx/bttv-cards.c
 +++ b/drivers/media/video/bt8xx/bttv-cards.c
-@@ -3766,10 +3766,8 @@ static int __devinit pvr_boot(struct btt
+@@ -3753,10 +3753,8 @@ static int __devinit pvr_boot(struct btt
  	int rc;
  
  	rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
@@ -860,7 +849,7 @@
  		btv->c.nr, (rc < 0) ? "failed" : "ok");
 --- a/drivers/media/video/cpia2/cpia2_core.c
 +++ b/drivers/media/video/cpia2/cpia2_core.c
-@@ -905,11 +905,8 @@ static int apply_vp_patch(struct camera_
+@@ -903,11 +903,8 @@ static int apply_vp_patch(struct camera_
  	struct cpia2_command cmd;
  
  	ret = request_firmware(&fw, fw_name, &cam->dev->dev);
@@ -953,7 +942,7 @@
  		printk(KERN_ERR "ERROR: Firmware size mismatch "
 --- a/drivers/media/video/cx23885/cx23885-417.c
 +++ b/drivers/media/video/cx23885/cx23885-417.c
-@@ -929,14 +929,8 @@ static int cx23885_load_firmware(struct
+@@ -930,14 +930,8 @@ static int cx23885_load_firmware(struct
  	retval = request_firmware(&firmware, CX23885_FIRM_IMAGE_NAME,
  				  &dev->pci->dev);
  
@@ -971,7 +960,7 @@
  		printk(KERN_ERR "ERROR: Firmware size mismatch "
 --- a/drivers/media/video/cx23885/cx23885-cards.c
 +++ b/drivers/media/video/cx23885/cx23885-cards.c
-@@ -1513,11 +1513,7 @@ void cx23885_card_setup(struct cx23885_d
+@@ -1664,11 +1664,7 @@ void cx23885_card_setup(struct cx23885_d
  				cinfo.rev, filename);
  
  		ret = request_firmware(&fw, filename, &dev->pci->dev);
@@ -1000,7 +989,7 @@
  
 --- a/drivers/media/video/cx88/cx88-blackbird.c
 +++ b/drivers/media/video/cx88/cx88-blackbird.c
-@@ -446,13 +446,8 @@ static int blackbird_load_firmware(struc
+@@ -447,13 +447,8 @@ static int blackbird_load_firmware(struc
  				  &dev->pci->dev);
  
  
@@ -1017,9 +1006,9 @@
  		dprintk(0, "ERROR: Firmware size mismatch (have %zd, expected %d)\n",
 --- a/drivers/media/video/gspca/vicam.c
 +++ b/drivers/media/video/gspca/vicam.c
-@@ -270,10 +270,8 @@ static int sd_init(struct gspca_dev *gsp
+@@ -245,10 +245,8 @@ static int sd_init(struct gspca_dev *gsp
  
- 	ret = request_ihex_firmware(&fw, "vicam/firmware.fw",
+ 	ret = request_ihex_firmware(&fw, VICAM_FIRMWARE,
  				    &gspca_dev->dev->dev);
 -	if (ret) {
 -		pr_err("Failed to load \"vicam/firmware.fw\": %d\n", ret);
@@ -1042,7 +1031,7 @@
  
 --- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
 +++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
-@@ -1415,29 +1415,6 @@ static int pvr2_locate_firmware(struct p
+@@ -1382,29 +1382,6 @@ static int pvr2_locate_firmware(struct p
  			   "request_firmware fatal error with code=%d",ret);
  		return ret;
  	}
@@ -1074,7 +1063,7 @@
  
 --- a/drivers/media/video/s2255drv.c
 +++ b/drivers/media/video/s2255drv.c
-@@ -2588,10 +2588,8 @@ static int s2255_probe(struct usb_interf
+@@ -2585,10 +2585,8 @@ static int s2255_probe(struct usb_interf
  	}
  	/* load the first chunk */
  	if (request_firmware(&dev->fw_data->fw,
@@ -1129,7 +1118,7 @@
  			__func__, fw->size);
 --- a/drivers/media/video/tlg2300/pd-main.c
 +++ b/drivers/media/video/tlg2300/pd-main.c
-@@ -219,10 +219,8 @@ static int firmware_download(struct usb_
+@@ -220,10 +220,8 @@ static int firmware_download(struct usb_
  	size_t max_packet_size;
  
  	ret = request_firmware(&fw, firmware_name, &udev->dev);
@@ -1141,21 +1130,6 @@
  
  	fwlength = fw->size;
  
---- a/drivers/misc/iwmc3200top/fw-download.c
-+++ b/drivers/misc/iwmc3200top/fw-download.c
-@@ -311,11 +311,8 @@ int iwmct_fw_load(struct iwmct_priv *pri
- 
- 	/* get the firmware */
- 	ret = request_firmware(&raw, fw_name, &priv->func->dev);
--	if (ret < 0) {
--		LOG_ERROR(priv, FW_DOWNLOAD, "%s request_firmware failed %d\n",
--			  fw_name, ret);
-+	if (ret)
- 		goto exit;
--	}
- 
- 	if (raw->size < sizeof(struct iwmct_fw_sec_hdr)) {
- 		LOG_ERROR(priv, FW_DOWNLOAD, "%s smaller then (%zd) (%zd)\n",
 --- a/drivers/misc/ti-st/st_kim.c
 +++ b/drivers/misc/ti-st/st_kim.c
 @@ -281,11 +281,8 @@ static long download_firmware(struct kim
@@ -1173,7 +1147,7 @@
  	/* bts_header to remove out magic number and
 --- a/drivers/net/can/softing/softing_fw.c
 +++ b/drivers/net/can/softing/softing_fw.c
-@@ -237,11 +237,8 @@ int softing_load_app_fw(const char *file
+@@ -238,11 +238,8 @@ int softing_load_app_fw(const char *file
  	int8_t type_end = 0, type_entrypoint = 0;
  
  	ret = request_firmware(&fw, file, &card->pdev->dev);
@@ -1188,7 +1162,7 @@
  	/* parse the firmware */
 --- a/drivers/net/ethernet/3com/typhoon.c
 +++ b/drivers/net/ethernet/3com/typhoon.c
-@@ -1289,11 +1289,8 @@ typhoon_request_firmware(struct typhoon
+@@ -1279,11 +1279,8 @@ typhoon_request_firmware(struct typhoon
  		return 0;
  
  	err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev);
@@ -1203,7 +1177,7 @@
  	remaining = typhoon_fw->size;
 --- a/drivers/net/ethernet/adaptec/starfire.c
 +++ b/drivers/net/ethernet/adaptec/starfire.c
-@@ -1044,11 +1044,8 @@ static int netdev_open(struct net_device
+@@ -1015,11 +1015,8 @@ static int netdev_open(struct net_device
  #endif /* VLAN_SUPPORT */
  
  	retval = request_firmware(&fw_rx, FIRMWARE_RX, &np->pci_dev->dev);
@@ -1216,7 +1190,7 @@
  	if (fw_rx->size % 4) {
  		printk(KERN_ERR "starfire: bogus length %zu in \"%s\"\n",
  		       fw_rx->size, FIRMWARE_RX);
-@@ -1056,11 +1053,8 @@ static int netdev_open(struct net_device
+@@ -1027,11 +1024,8 @@ static int netdev_open(struct net_device
  		goto out_rx;
  	}
  	retval = request_firmware(&fw_tx, FIRMWARE_TX, &np->pci_dev->dev);
@@ -1231,7 +1205,7 @@
  		       fw_tx->size, FIRMWARE_TX);
 --- a/drivers/net/ethernet/alteon/acenic.c
 +++ b/drivers/net/ethernet/alteon/acenic.c
-@@ -2906,11 +2906,8 @@ static int __devinit ace_load_firmware(s
+@@ -2902,11 +2902,8 @@ static int __devinit ace_load_firmware(s
  		fw_name = "acenic/tg1.bin";
  
  	ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
@@ -1246,7 +1220,7 @@
  
 --- a/drivers/net/ethernet/broadcom/bnx2.c
 +++ b/drivers/net/ethernet/broadcom/bnx2.c
-@@ -3681,16 +3681,13 @@ static int bnx2_request_uncached_firmwar
+@@ -3676,16 +3676,13 @@ static int bnx2_request_uncached_firmwar
  	}
  
  	rc = request_firmware(&bp->mips_firmware, mips_fw_file, &bp->pdev->dev);
@@ -1268,22 +1242,22 @@
  	if (bp->mips_firmware->size < sizeof(*mips_fw) ||
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
-@@ -10569,11 +10569,8 @@ int bnx2x_init_firmware(struct bnx2x *bp
+@@ -11642,11 +11642,8 @@ static int bnx2x_init_firmware(struct bn
+ 	BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
  
- 		rc = request_firmware(&bp->firmware, fw_file_name,
- 				      &bp->pdev->dev);
--		if (rc) {
--			BNX2X_ERR("Can't load firmware file %s\n",
--				  fw_file_name);
-+		if (rc)
- 			goto request_firmware_exit;
--		}
+ 	rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
+-	if (rc) {
+-		BNX2X_ERR("Can't load firmware file %s\n",
+-			  fw_file_name);
++	if (rc)
+ 		goto request_firmware_exit;
+-	}
  
- 		rc = bnx2x_check_firmware(bp);
- 		if (rc) {
+ 	rc = bnx2x_check_firmware(bp);
+ 	if (rc) {
 --- a/drivers/net/ethernet/broadcom/tg3.c
 +++ b/drivers/net/ethernet/broadcom/tg3.c
-@@ -9527,11 +9527,8 @@ static int tg3_request_firmware(struct t
+@@ -10105,11 +10105,8 @@ static int tg3_request_firmware(struct t
  {
  	const __be32 *fw_data;
  
@@ -1298,7 +1272,7 @@
  
 --- a/drivers/net/ethernet/brocade/bna/cna_fwimg.c
 +++ b/drivers/net/ethernet/brocade/bna/cna_fwimg.c
-@@ -29,10 +29,8 @@ cna_read_firmware(struct pci_dev *pdev,
+@@ -30,10 +30,8 @@ cna_read_firmware(struct pci_dev *pdev,
  {
  	const struct firmware *fw;
  
@@ -1354,7 +1328,7 @@
  	if (ret)
 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-@@ -830,11 +830,8 @@ static int upgrade_fw(struct adapter *ad
+@@ -834,11 +834,8 @@ static int upgrade_fw(struct adapter *ad
  	struct device *dev = adap->pdev_dev;
  
  	ret = request_firmware(&fw, FW_FNAME, dev);
@@ -1369,7 +1343,7 @@
  	vers = ntohl(hdr->fw_ver);
 --- a/drivers/net/ethernet/intel/e100.c
 +++ b/drivers/net/ethernet/intel/e100.c
-@@ -1273,9 +1273,6 @@ static const struct firmware *e100_reque
+@@ -1289,9 +1289,6 @@ static const struct firmware *e100_reque
  
  	if (err) {
  		if (required) {
@@ -1392,7 +1366,7 @@
  	}
 --- a/drivers/net/ethernet/smsc/smc91c92_cs.c
 +++ b/drivers/net/ethernet/smsc/smc91c92_cs.c
-@@ -649,10 +649,8 @@ static int osi_load_firmware(struct pcmc
+@@ -648,10 +648,8 @@ static int osi_load_firmware(struct pcmc
  	int i, err;
  
  	err = request_firmware(&fw, FIRMWARE_NAME, &link->dev);
@@ -1406,7 +1380,7 @@
  	for (i = 0; i < fw->size; i++) {
 --- a/drivers/net/ethernet/sun/cassini.c
 +++ b/drivers/net/ethernet/sun/cassini.c
-@@ -819,11 +819,8 @@ static int cas_saturn_firmware_init(stru
+@@ -818,11 +818,8 @@ static int cas_saturn_firmware_init(stru
  		return 0;
  
  	err = request_firmware(&fw, fw_name, &cp->pdev->dev);
@@ -1421,7 +1395,7 @@
  		       fw->size, fw_name);
 --- a/drivers/net/hamradio/yam.c
 +++ b/drivers/net/hamradio/yam.c
-@@ -373,11 +373,8 @@ static unsigned char *add_mcs(unsigned c
+@@ -372,11 +372,8 @@ static unsigned char *add_mcs(unsigned c
  		}
  		err = request_firmware(&fw, fw_name[predef], &pdev->dev);
  		platform_device_unregister(pdev);
@@ -1436,21 +1410,21 @@
  			       fw->size, fw_name[predef]);
 --- a/drivers/net/usb/kaweth.c
 +++ b/drivers/net/usb/kaweth.c
-@@ -399,10 +399,8 @@ static int kaweth_download_firmware(stru
+@@ -400,10 +400,8 @@ static int kaweth_download_firmware(stru
  	int ret;
  
  	ret = request_firmware(&fw, fwname, &kaweth->dev->dev);
 -	if (ret) {
--		err("Firmware request failed\n");
+-		dev_err(&kaweth->intf->dev, "Firmware request failed\n");
 +	if (ret)
  		return ret;
 -	}
  
  	if (fw->size > KAWETH_FIRMWARE_BUF_SIZE) {
- 		err("Firmware too big: %zu", fw->size);
+ 		dev_err(&kaweth->intf->dev, "Firmware too big: %zu\n",
 --- a/drivers/net/wimax/i2400m/fw.c
 +++ b/drivers/net/wimax/i2400m/fw.c
-@@ -1582,11 +1582,8 @@ int i2400m_dev_bootstrap(struct i2400m *
+@@ -1583,11 +1583,8 @@ int i2400m_dev_bootstrap(struct i2400m *
  		}
  		d_printf(1, dev, "trying firmware %s (%d)\n", fw_name, itr);
  		ret = request_firmware(&fw, fw_name, dev);
@@ -1463,7 +1437,7 @@
  		i2400m->fw_name = fw_name;
  		ret = i2400m_fw_bootstrap(i2400m, fw, flags);
  		release_firmware(fw);
-@@ -1629,8 +1626,6 @@ void i2400m_fw_cache(struct i2400m *i240
+@@ -1630,8 +1627,6 @@ void i2400m_fw_cache(struct i2400m *i240
  	kref_init(&i2400m_fw->kref);
  	result = request_firmware(&i2400m_fw->fw, i2400m->fw_name, dev);
  	if (result < 0) {
@@ -1492,19 +1466,20 @@
  	fwh = (struct at76_fw_header *)(fwe->fw->data);
 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
 +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
-@@ -1030,11 +1030,8 @@ static int ath9k_hif_usb_dev_init(struct
- 	/* Request firmware */
- 	ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
- 			       &hif_dev->udev->dev);
--	if (ret) {
+@@ -1090,12 +1090,8 @@ static void ath9k_hif_usb_firmware_cb(co
+ 	struct hif_device_usb *hif_dev = context;
+ 	int ret;
+ 
+-	if (!fw) {
 -		dev_err(&hif_dev->udev->dev,
--			"ath9k_htc: Firmware - %s not found\n", hif_dev->fw_name);
-+	if (ret)
- 		goto err_fw_req;
+-			"ath9k_htc: Failed to get firmware %s\n",
+-			hif_dev->fw_name);
++	if (!fw)
+ 		goto err_fw;
 -	}
  
- 	/* Download firmware */
- 	ret = ath9k_hif_usb_download_fw(hif_dev, drv_info);
+ 	hif_dev->htc_handle = ath9k_htc_hw_alloc(hif_dev, &hif_usb,
+ 						 &hif_dev->udev->dev);
 --- a/drivers/net/wireless/ath/carl9170/usb.c
 +++ b/drivers/net/wireless/ath/carl9170/usb.c
 @@ -1018,7 +1018,6 @@ static void carl9170_usb_firmware_step2(
@@ -1517,7 +1492,7 @@
  
 --- a/drivers/net/wireless/atmel.c
 +++ b/drivers/net/wireless/atmel.c
-@@ -3937,12 +3937,8 @@ static int reset_atmel_card(struct net_d
+@@ -3935,12 +3935,8 @@ static int reset_atmel_card(struct net_d
  					strcpy(priv->firmware_id, "atmel_at76c502.bin");
  				}
  				err = request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev);
@@ -1533,7 +1508,7 @@
  				int success = 0;
 --- a/drivers/net/wireless/b43/main.c
 +++ b/drivers/net/wireless/b43/main.c
-@@ -2138,18 +2138,8 @@ int b43_do_request_fw(struct b43_request
+@@ -2132,18 +2132,8 @@ int b43_do_request_fw(struct b43_request
  		return -ENOSYS;
  	}
  	err = request_firmware(&blob, ctx->fwname, ctx->dev->dev->dev);
@@ -1555,7 +1530,7 @@
  	hdr = (struct b43_fw_header *)(blob->data);
 --- a/drivers/net/wireless/b43legacy/main.c
 +++ b/drivers/net/wireless/b43legacy/main.c
-@@ -1527,11 +1527,8 @@ static int do_request_fw(struct b43legac
+@@ -1529,11 +1529,8 @@ static int do_request_fw(struct b43legac
  		 "b43legacy%s/%s.fw",
  		 modparam_fwpostfix, name);
  	err = request_firmware(fw, path, dev->dev->dev);
@@ -1570,9 +1545,9 @@
  	hdr = (struct b43legacy_fw_header *)((*fw)->data);
 --- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
 +++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c
-@@ -3413,10 +3413,8 @@ static int brcmf_sdbrcm_download_code_fi
- 	bus->fw_name = BCM4329_FW_NAME;
- 	ret = request_firmware(&bus->firmware, bus->fw_name,
+@@ -3480,10 +3480,8 @@ static int brcmf_sdbrcm_download_code_fi
+ 
+ 	ret = request_firmware(&bus->firmware, BRCMF_SDIO_FW_NAME,
  			       &bus->sdiodev->func[2]->dev);
 -	if (ret) {
 -		brcmf_dbg(ERROR, "Fail to request firmware %d\n", ret);
@@ -1582,21 +1557,21 @@
  	bus->fw_ptr = 0;
  
  	memptr = memblock = kmalloc(MEMBLOCK + BRCMF_SDALIGN, GFP_ATOMIC);
-@@ -3511,10 +3509,8 @@ static int brcmf_sdbrcm_download_nvram(s
- 	bus->nv_name = BCM4329_NV_NAME;
- 	ret = request_firmware(&bus->firmware, bus->nv_name,
+@@ -3599,10 +3597,8 @@ static int brcmf_sdbrcm_download_nvram(s
+ 
+ 	ret = request_firmware(&bus->firmware, BRCMF_SDIO_NV_NAME,
  			       &bus->sdiodev->func[2]->dev);
 -	if (ret) {
 -		brcmf_dbg(ERROR, "Fail to request nvram %d\n", ret);
 +	if (ret)
  		return ret;
 -	}
- 	bus->fw_ptr = 0;
  
- 	memblock = kmalloc(MEMBLOCK, GFP_ATOMIC);
+ 	ret = brcmf_process_nvram_vars(bus);
+ 
 --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
-@@ -785,19 +785,13 @@ static int brcms_request_fw(struct brcms
+@@ -777,19 +777,13 @@ static int brcms_request_fw(struct brcms
  		sprintf(fw_name, "%s-%d.fw", brcms_firmwares[i],
  			UCODE_LOADER_API_VER);
  		status = request_firmware(&wl->fw.fw_bin[i], fw_name, device);
@@ -1620,7 +1595,7 @@
  	}
 --- a/drivers/net/wireless/ipw2x00/ipw2100.c
 +++ b/drivers/net/wireless/ipw2x00/ipw2100.c
-@@ -8519,12 +8519,8 @@ static int ipw2100_get_firmware(struct i
+@@ -8476,12 +8476,8 @@ static int ipw2100_get_firmware(struct i
  
  	rc = request_firmware(&fw->fw_entry, fw_name, &priv->pci_dev->dev);
  
@@ -1636,7 +1611,7 @@
  
 --- a/drivers/net/wireless/ipw2x00/ipw2200.c
 +++ b/drivers/net/wireless/ipw2x00/ipw2200.c
-@@ -3401,10 +3401,8 @@ static int ipw_get_fw(struct ipw_priv *p
+@@ -3418,10 +3418,8 @@ static int ipw_get_fw(struct ipw_priv *p
  
  	/* ask firmware_class module to get the boot firmware off disk */
  	rc = request_firmware(raw, name, &priv->pci_dev->dev);
@@ -1648,75 +1623,36 @@
  
  	if ((*raw)->size < sizeof(*fw)) {
  		IPW_ERROR("%s is too small (%zd)\n", name, (*raw)->size);
---- a/drivers/net/wireless/iwlegacy/iwl3945-base.c
-+++ b/drivers/net/wireless/iwlegacy/iwl3945-base.c
-@@ -1870,8 +1870,6 @@ static int iwl3945_read_ucode(struct iwl
- 		sprintf(buf, "%s%u%s", name_pre, index, ".ucode");
- 		ret = request_firmware(&ucode_raw, buf, &priv->pci_dev->dev);
+--- a/drivers/net/wireless/iwlegacy/3945-mac.c
++++ b/drivers/net/wireless/iwlegacy/3945-mac.c
+@@ -1844,7 +1844,6 @@ il3945_read_ucode(struct il_priv *il)
+ 		sprintf(buf, "%s%u%s", name_pre, idx, ".ucode");
+ 		ret = request_firmware(&ucode_raw, buf, &il->pci_dev->dev);
  		if (ret < 0) {
--			IWL_ERR(priv, "%s firmware file req failed: %d\n",
--				  buf, ret);
+-			IL_ERR("%s firmware file req failed: %d\n", buf, ret);
  			if (ret == -ENOENT)
  				continue;
  			else
---- a/drivers/net/wireless/iwlwifi/iwl-agn.c
-+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
-@@ -909,13 +909,8 @@ static void iwl_ucode_callback(const str
+--- a/drivers/net/wireless/iwlwifi/iwl-drv.c
++++ b/drivers/net/wireless/iwlwifi/iwl-drv.c
+@@ -789,13 +789,8 @@ static void iwl_ucode_callback(const str
  
  	memset(&pieces, 0, sizeof(pieces));
  
 -	if (!ucode_raw) {
--		if (priv->fw_index <= api_ok)
--			IWL_ERR(priv,
+-		if (drv->fw_index <= api_ok)
+-			IWL_ERR(drv,
 -				"request for firmware file '%s' failed.\n",
--				priv->firmware_name);
+-				drv->firmware_name);
 +	if (!ucode_raw)
  		goto try_again;
 -	}
  
- 	IWL_DEBUG_INFO(priv, "Loaded firmware file '%s' (%zd bytes).\n",
- 		       priv->firmware_name, ucode_raw->size);
---- a/drivers/net/wireless/iwmc3200wifi/fw.c
-+++ b/drivers/net/wireless/iwmc3200wifi/fw.c
-@@ -168,10 +168,8 @@ static int iwm_load_img(struct iwm_priv
- 	char *build_tag;
- 
- 	ret = request_firmware(&fw, img_name, iwm_to_dev(iwm));
--	if (ret) {
--		IWM_ERR(iwm, "Request firmware failed");
-+	if (ret)
- 		return ret;
--	}
- 
- 	IWM_DBG_FW(iwm, INFO, "Start to load FW %s\n", img_name);
- 
---- a/drivers/net/wireless/libertas/main.c
-+++ b/drivers/net/wireless/libertas/main.c
-@@ -1207,19 +1207,13 @@ int lbs_get_firmware(struct device *dev,
- 	/* Try user-specified firmware first */
- 	if (user_helper) {
- 		ret = request_firmware(helper, user_helper, dev);
--		if (ret) {
--			dev_err(dev, "couldn't find helper firmware %s\n",
--				user_helper);
-+		if (ret)
- 			goto fail;
--		}
- 	}
- 	if (user_mainfw) {
- 		ret = request_firmware(mainfw, user_mainfw, dev);
--		if (ret) {
--			dev_err(dev, "couldn't find main firmware %s\n",
--				user_mainfw);
-+		if (ret)
- 			goto fail;
--		}
- 	}
- 
- 	if (*helper && *mainfw)
+ 	IWL_DEBUG_INFO(drv, "Loaded firmware file '%s' (%zd bytes).\n",
+ 		       drv->firmware_name, ucode_raw->size);
 --- a/drivers/net/wireless/libertas_tf/if_usb.c
 +++ b/drivers/net/wireless/libertas_tf/if_usb.c
-@@ -827,8 +827,6 @@ static int if_usb_prog_firmware(struct i
+@@ -825,8 +825,6 @@ static int if_usb_prog_firmware(struct i
  	kparam_block_sysfs_write(fw_name);
  	ret = request_firmware(&cardp->fw, lbtf_fw_name, &cardp->udev->dev);
  	if (ret < 0) {
@@ -1727,18 +1663,22 @@
  	}
 --- a/drivers/net/wireless/mwifiex/main.c
 +++ b/drivers/net/wireless/mwifiex/main.c
-@@ -311,8 +311,6 @@ static int mwifiex_init_hw_fw(struct mwi
- 	err = request_firmware(&adapter->firmware, adapter->fw_name,
- 			       adapter->dev);
- 	if (err < 0) {
--		dev_err(adapter->dev, "request_firmware() returned"
--				" error code %#x\n", err);
- 		ret = -1;
+@@ -316,11 +316,8 @@ static void mwifiex_fw_dpc(const struct
+ 	struct mwifiex_adapter *adapter = context;
+ 	struct mwifiex_fw_image fw;
+ 
+-	if (!firmware) {
+-		dev_err(adapter->dev,
+-			"Failed to get firmware %s\n", adapter->fw_name);
++	if (!firmware)
  		goto done;
- 	}
+-	}
+ 
+ 	memset(&fw, 0, sizeof(struct mwifiex_fw_image));
+ 	adapter->firmware = firmware;
 --- a/drivers/net/wireless/mwl8k.c
 +++ b/drivers/net/wireless/mwl8k.c
-@@ -5191,16 +5191,12 @@ static int mwl8k_firmware_load_success(s
+@@ -5297,16 +5297,12 @@ static int mwl8k_firmware_load_success(s
  static void mwl8k_fw_state_machine(const struct firmware *fw, void *context)
  {
  	struct mwl8k_priv *priv = context;
@@ -1756,7 +1696,7 @@
  		priv->fw_helper = fw;
  		rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode,
  				      true);
-@@ -5235,11 +5231,8 @@ static void mwl8k_fw_state_machine(const
+@@ -5341,11 +5337,8 @@ static void mwl8k_fw_state_machine(const
  		break;
  
  	case FW_STATE_LOADING_ALT:
@@ -1769,7 +1709,7 @@
  		priv->fw_ucode = fw;
  		rc = mwl8k_firmware_load_success(priv);
  		if (rc)
-@@ -5274,10 +5267,8 @@ static int mwl8k_init_firmware(struct ie
+@@ -5383,10 +5376,8 @@ retry:
  
  	/* Ask userland hotplug daemon for the device firmware */
  	rc = mwl8k_request_firmware(priv, fw_image, nowait);
@@ -1851,16 +1791,14 @@
  	if (ret) {
 --- a/drivers/net/wireless/p54/p54usb.c
 +++ b/drivers/net/wireless/p54/p54usb.c
-@@ -852,9 +852,6 @@ static int p54u_load_firmware(struct iee
+@@ -931,7 +931,6 @@ static void p54u_load_firmware_cb(const
+ 		err = p54u_start_ops(priv);
+ 	} else {
+ 		err = -ENOENT;
+-		dev_err(&udev->dev, "Firmware not found.\n");
+ 	}
  
- 	err = request_firmware(&priv->fw, p54u_fwlist[i].fw, &priv->udev->dev);
  	if (err) {
--		dev_err(&priv->udev->dev, "(p54usb) cannot load firmware %s "
--					  "(%d)!\n", p54u_fwlist[i].fw, err);
--
- 		err = request_firmware(&priv->fw, p54u_fwlist[i].fw_legacy,
- 				       &priv->udev->dev);
- 		if (err)
 --- a/drivers/net/wireless/prism54/islpci_dev.c
 +++ b/drivers/net/wireless/prism54/islpci_dev.c
 @@ -93,12 +93,9 @@ isl_upload_firmware(islpci_private *priv
@@ -1892,68 +1830,28 @@
  
  	if (!fw || !fw->size || !fw->data) {
  		ERROR(rt2x00dev, "Failed to read Firmware.\n");
---- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
-+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c
-@@ -174,11 +174,8 @@ int rtl92c_init_sw_vars(struct ieee80211
- 		fw_name = rtlpriv->cfg->fw_name;
+--- a/drivers/net/wireless/rtlwifi/core.c
++++ b/drivers/net/wireless/rtlwifi/core.c
+@@ -46,7 +46,6 @@ void rtl_fw_cb(const struct firmware *fi
+ 			 "Firmware callback routine entered!\n");
+ 	complete(&rtlpriv->firmware_loading_complete);
+ 	if (!firmware) {
+-		pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name);
+ 		rtlpriv->max_fw_size = 0;
+ 		return;
  	}
- 	err = request_firmware(&firmware, fw_name, rtlpriv->io.dev);
--	if (err) {
--		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
--			 ("Failed to request firmware!\n"));
-+	if (err)
- 		return 1;
--	}
- 	if (firmware->size > 0x4000) {
- 		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
- 			 ("Firmware is too big!\n"));
---- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
-+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c
-@@ -71,11 +71,8 @@ static int rtl92cu_init_sw_vars(struct i
- 	/* request fw */
- 	err = request_firmware(&firmware, rtlpriv->cfg->fw_name,
- 			rtlpriv->io.dev);
--	if (err) {
--		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
--			 ("Failed to request firmware!\n"));
-+	if (err)
- 		return 1;
--	}
- 	if (firmware->size > 0x4000) {
- 		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
- 			 ("Firmware is too big!\n"));
---- a/drivers/net/wireless/rtlwifi/rtl8192de/sw.c
-+++ b/drivers/net/wireless/rtlwifi/rtl8192de/sw.c
-@@ -186,11 +186,8 @@ static int rtl92d_init_sw_vars(struct ie
- 	/* request fw */
- 	err = request_firmware(&firmware, rtlpriv->cfg->fw_name,
- 			       rtlpriv->io.dev);
--	if (err) {
--		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
--			 ("Failed to request firmware!\n"));
-+	if (err)
- 		return 1;
--	}
- 	if (firmware->size > 0x8000) {
- 		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
- 			 ("Firmware is too big!\n"));
 --- a/drivers/net/wireless/rtlwifi/rtl8192se/sw.c
 +++ b/drivers/net/wireless/rtlwifi/rtl8192se/sw.c
-@@ -197,11 +197,8 @@ static int rtl92s_init_sw_vars(struct ie
- 	/* request fw */
- 	err = request_firmware(&firmware, rtlpriv->cfg->fw_name,
- 			rtlpriv->io.dev);
--	if (err) {
--		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
--			 ("Failed to request firmware!\n"));
-+	if (err)
- 		return 1;
--	}
- 	if (firmware->size > sizeof(struct rt_firmware)) {
- 		RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
- 			 ("Firmware is too big!\n"));
---- a/drivers/net/wireless/wl1251/main.c
-+++ b/drivers/net/wireless/wl1251/main.c
+@@ -100,7 +100,6 @@ static void rtl92se_fw_cb(const struct f
+ 			 "Firmware callback routine entered!\n");
+ 	complete(&rtlpriv->firmware_loading_complete);
+ 	if (!firmware) {
+-		pr_err("Firmware %s not available\n", rtlpriv->cfg->fw_name);
+ 		rtlpriv->max_fw_size = 0;
+ 		return;
+ 	}
+--- a/drivers/net/wireless/ti/wl1251/main.c
++++ b/drivers/net/wireless/ti/wl1251/main.c
 @@ -70,10 +70,8 @@ static int wl1251_fetch_firmware(struct
  
  	ret = request_firmware(&fw, WL1251_FW_NAME, dev);
@@ -1978,58 +1876,20 @@
  
  	if (fw->size % 4) {
  		wl1251_error("nvs size is not multiple of 32 bits: %zu",
---- a/drivers/net/wireless/wl12xx/main.c
-+++ b/drivers/net/wireless/wl12xx/main.c
-@@ -1071,10 +1071,8 @@ static int wl1271_fetch_firmware(struct
- 
- 	ret = request_firmware(&fw, fw_name, wl1271_wl_to_dev(wl));
- 
--	if (ret < 0) {
--		wl1271_error("could not get firmware: %d", ret);
-+	if (ret)
- 		return ret;
--	}
- 
- 	if (fw->size % 4) {
- 		wl1271_error("firmware size is not multiple of 32 bits: %zu",
-@@ -1109,10 +1107,8 @@ static int wl1271_fetch_nvs(struct wl127
- 
- 	ret = request_firmware(&fw, WL12XX_NVS_NAME, wl1271_wl_to_dev(wl));
- 
--	if (ret < 0) {
--		wl1271_error("could not get nvs file: %d", ret);
-+	if (ret)
- 		return ret;
--	}
- 
- 	wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
+--- a/drivers/net/wireless/ti/wlcore/main.c
++++ b/drivers/net/wireless/ti/wlcore/main.c
+@@ -712,10 +712,8 @@ static int wl12xx_fetch_firmware(struct
  
---- a/drivers/net/wireless/wl12xx/sdio_test.c
-+++ b/drivers/net/wireless/wl12xx/sdio_test.c
-@@ -206,10 +206,8 @@ static int wl1271_fetch_firmware(struct
- 		ret = request_firmware(&fw, WL127X_FW_NAME,
- 				       wl1271_wl_to_dev(wl));
+ 	ret = request_firmware(&fw, fw_name, wl->dev);
  
 -	if (ret < 0) {
--		wl1271_error("could not get firmware: %d", ret);
+-		wl1271_error("could not get firmware %s: %d", fw_name, ret);
 +	if (ret)
  		return ret;
 -	}
  
  	if (fw->size % 4) {
  		wl1271_error("firmware size is not multiple of 32 bits: %zu",
-@@ -244,10 +242,8 @@ static int wl1271_fetch_nvs(struct wl127
- 
- 	ret = request_firmware(&fw, WL12XX_NVS_NAME, wl1271_wl_to_dev(wl));
- 
--	if (ret < 0) {
--		wl1271_error("could not get nvs file: %d", ret);
-+	if (ret)
- 		return ret;
--	}
- 
- 	wl->nvs = kmemdup(fw->data, fw->size, GFP_KERNEL);
- 
 --- a/drivers/net/wireless/zd1201.c
 +++ b/drivers/net/wireless/zd1201.c
 @@ -65,8 +65,6 @@ static int zd1201_fw_upload(struct usb_d
@@ -2063,7 +1923,7 @@
  static inline u16 get_bcdDevice(const struct usb_device *udev)
 --- a/drivers/scsi/advansys.c
 +++ b/drivers/scsi/advansys.c
-@@ -4792,8 +4792,6 @@ static ushort AscInitAsc1000Driver(ASC_D
+@@ -4791,8 +4791,6 @@ static ushort AscInitAsc1000Driver(ASC_D
  
  	err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
  	if (err) {
@@ -2072,7 +1932,7 @@
  		asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM;
  		return err;
  	}
-@@ -5125,8 +5123,6 @@ static int AdvInitAsc3550Driver(ADV_DVC_
+@@ -5124,8 +5122,6 @@ static int AdvInitAsc3550Driver(ADV_DVC_
  
  	err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
  	if (err) {
@@ -2081,7 +1941,7 @@
  		asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
  		return err;
  	}
-@@ -5641,8 +5637,6 @@ static int AdvInitAsc38C0800Driver(ADV_D
+@@ -5640,8 +5636,6 @@ static int AdvInitAsc38C0800Driver(ADV_D
  
  	err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
  	if (err) {
@@ -2090,7 +1950,7 @@
  		asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
  		return err;
  	}
-@@ -6143,8 +6137,6 @@ static int AdvInitAsc38C1600Driver(ADV_D
+@@ -6142,8 +6136,6 @@ static int AdvInitAsc38C1600Driver(ADV_D
  
  	err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
  	if (err) {
@@ -2101,7 +1961,7 @@
  	}
 --- a/drivers/scsi/aic94xx/aic94xx_init.c
 +++ b/drivers/scsi/aic94xx/aic94xx_init.c
-@@ -399,8 +399,6 @@ static ssize_t asd_store_update_bios(str
+@@ -397,8 +397,6 @@ static ssize_t asd_store_update_bios(str
  				   filename_ptr,
  				   &asd_ha->pcidev->dev);
  	if (err) {
@@ -2112,7 +1972,7 @@
  	}
 --- a/drivers/scsi/aic94xx/aic94xx_seq.c
 +++ b/drivers/scsi/aic94xx/aic94xx_seq.c
-@@ -1318,11 +1318,8 @@ int asd_init_seqs(struct asd_ha_struct *
+@@ -1317,11 +1317,8 @@ int asd_init_seqs(struct asd_ha_struct *
  
  	err = asd_request_firmware(asd_ha);
  
@@ -2127,7 +1987,7 @@
  	if (err) {
 --- a/drivers/scsi/bfa/bfad.c
 +++ b/drivers/scsi/bfa/bfad.c
-@@ -1592,7 +1592,6 @@ bfad_read_firmware(struct pci_dev *pdev,
+@@ -1579,7 +1579,6 @@ bfad_read_firmware(struct pci_dev *pdev,
  	const struct firmware *fw;
  
  	if (request_firmware(&fw, fw_name, &pdev->dev)) {
@@ -2137,7 +1997,7 @@
  	}
 --- a/drivers/scsi/ipr.c
 +++ b/drivers/scsi/ipr.c
-@@ -3744,10 +3744,8 @@ static ssize_t ipr_store_update_fw(struc
+@@ -3746,10 +3746,8 @@ static ssize_t ipr_store_update_fw(struc
  	len = snprintf(fname, 99, "%s", buf);
  	fname[len-1] = '\0';
  
@@ -2163,7 +2023,7 @@
  	}
 --- a/drivers/scsi/qla1280.c
 +++ b/drivers/scsi/qla1280.c
-@@ -1561,8 +1561,6 @@ qla1280_request_firmware(struct scsi_qla
+@@ -1560,8 +1560,6 @@ qla1280_request_firmware(struct scsi_qla
  	err = request_firmware(&fw, fwname, &ha->pdev->dev);
  
  	if (err) {
@@ -2174,7 +2034,7 @@
  	}
 --- a/drivers/scsi/qla2xxx/qla_init.c
 +++ b/drivers/scsi/qla2xxx/qla_init.c
-@@ -4725,8 +4725,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
+@@ -4582,8 +4582,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
  	/* Load firmware blob. */
  	blob = qla2x00_request_firmware(vha);
  	if (!blob) {
@@ -2183,7 +2043,7 @@
  		ql_log(ql_log_info, vha, 0x0084,
  		    "Firmware images can be retrieved from: "QLA_FW_URL ".\n");
  		return QLA_FUNCTION_FAILED;
-@@ -4827,8 +4825,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
+@@ -4684,8 +4682,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
  	/* Load firmware blob. */
  	blob = qla2x00_request_firmware(vha);
  	if (!blob) {
@@ -2194,13 +2054,13 @@
  		    QLA_FW_URL ".\n");
 --- a/drivers/scsi/qla2xxx/qla_nx.c
 +++ b/drivers/scsi/qla2xxx/qla_nx.c
-@@ -2466,11 +2466,8 @@ try_blob_fw:
+@@ -2459,11 +2459,8 @@ try_blob_fw:
  
  	/* Load firmware blob. */
  	blob = ha->hablob = qla2x00_request_firmware(vha);
 -	if (!blob) {
 -		ql_log(ql_log_fatal, vha, 0x00a3,
--		    "Firmware image not preset.\n");
+-		    "Firmware image not present.\n");
 +	if (!blob)
  		goto fw_load_failed;
 -	}
@@ -2209,7 +2069,7 @@
  	if (qla82xx_validate_firmware_blob(vha,
 --- a/drivers/scsi/qla2xxx/qla_os.c
 +++ b/drivers/scsi/qla2xxx/qla_os.c
-@@ -3967,8 +3967,6 @@ qla2x00_request_firmware(scsi_qla_host_t
+@@ -4179,8 +4179,6 @@ qla2x00_request_firmware(scsi_qla_host_t
  		goto out;
  
  	if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
@@ -2220,7 +2080,7 @@
  		goto out;
 --- a/drivers/scsi/qlogicpti.c
 +++ b/drivers/scsi/qlogicpti.c
-@@ -476,11 +476,8 @@ static int __devinit qlogicpti_load_firm
+@@ -475,11 +475,8 @@ static int __devinit qlogicpti_load_firm
  	int i, timeout;
  
  	err = request_firmware(&fw, fwname, &qpti->op->dev);
@@ -2235,12 +2095,12 @@
  		       fw->size, fwname);
 --- a/drivers/staging/comedi/drivers/usbdux.c
 +++ b/drivers/staging/comedi/drivers/usbdux.c
-@@ -2307,11 +2307,8 @@ static void usbdux_firmware_request_comp
- 	struct usb_device *usbdev = usbduxsub_tmp->usbdev;
+@@ -2525,11 +2525,8 @@ static void usbdux_firmware_request_comp
+ 	struct usb_interface *uinterf = usbduxsub_tmp->interface;
  	int ret;
  
 -	if (fw == NULL) {
--		dev_err(&usbdev->dev,
+-		dev_err(&uinterf->dev,
 -			"Firmware complete handler without firmware!\n");
 +	if (fw == NULL)
  		return;
@@ -2250,12 +2110,12 @@
  	 * we need to upload the firmware here because fw will be
 --- a/drivers/staging/comedi/drivers/usbduxsigma.c
 +++ b/drivers/staging/comedi/drivers/usbduxsigma.c
-@@ -2312,11 +2312,8 @@ static void usbdux_firmware_request_comp
- 	struct usb_device *usbdev = usbduxsub_tmp->usbdev;
+@@ -2511,11 +2511,8 @@ static void usbdux_firmware_request_comp
+ 	struct usb_interface *uinterf = usbduxsub_tmp->interface;
  	int ret;
  
 -	if (fw == NULL) {
--		dev_err(&usbdev->dev,
+-		dev_err(&uinterf->dev,
 -			"Firmware complete handler without firmware!\n");
 +	if (fw == NULL)
  		return;
@@ -2265,7 +2125,7 @@
  	 * we need to upload the firmware here because fw will be
 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
 +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
-@@ -2194,16 +2194,12 @@ struct net_device *init_ft1000_card(stru
+@@ -2193,16 +2193,12 @@ struct net_device *init_ft1000_card(stru
  	info->AsicID = ft1000_read_reg(dev, FT1000_REG_ASIC_ID);
  	if (info->AsicID == ELECTRABUZZ_ID) {
  		DEBUG(0, "ft1000_hw: ELECTRABUZZ ASIC\n");
@@ -2286,68 +2146,40 @@
  	ft1000_enable_interrupts(dev);
 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
 +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
-@@ -139,10 +139,8 @@ static int ft1000_probe(struct usb_inter
+@@ -137,10 +137,8 @@ static int ft1000_probe(struct usb_inter
  	      ft1000dev->bulk_out_endpointAddr);
  
  	ret = request_firmware(&dsp_fw, "ft3000.img", &dev->dev);
 -	if (ret < 0) {
--		printk(KERN_ERR "Error request_firmware().\n");
+-		pr_err("Error request_firmware().\n");
 +	if (ret)
  		goto err_fw;
 -	}
  
  	size = max_t(uint, dsp_fw->size, 4096);
  	pFileStart = kmalloc(size, GFP_KERNEL);
---- a/drivers/staging/intel_sst/intel_sst_drv_interface.c
-+++ b/drivers/staging/intel_sst/intel_sst_drv_interface.c
-@@ -66,10 +66,8 @@ int sst_download_fw(void)
- 
- 	pr_debug("Downloading %s FW now...\n", name);
- 	retval = request_firmware(&fw_sst, name, &sst_drv_ctx->pci->dev);
--	if (retval) {
--		pr_err("request fw failed %d\n", retval);
-+	if (retval)
- 		return retval;
--	}
- 	sst_drv_ctx->alloc_block[0].sst_id = FW_DWNL_ID;
- 	sst_drv_ctx->alloc_block[0].ops_block.condition = false;
- 	retval = sst_load_fw(fw_sst, NULL);
---- a/drivers/staging/intel_sst/intel_sst_dsp.c
-+++ b/drivers/staging/intel_sst/intel_sst_dsp.c
-@@ -471,10 +471,8 @@ int sst_load_library(struct snd_sst_lib_
- 	pr_debug("Requesting %s\n", buf);
- 
- 	error = request_firmware(&fw_lib, buf, &sst_drv_ctx->pci->dev);
--	if (error) {
--		pr_err("library load failed %d\n", error);
-+	if (error)
- 		goto wake;
--	}
- 	error = sst_validate_library(fw_lib, &lib->slot_info, &entry_point);
- 	if (error)
- 		goto wake_free;
 --- a/drivers/staging/media/as102/as102_fw.c
 +++ b/drivers/staging/media/as102/as102_fw.c
-@@ -197,11 +197,8 @@ int as102_fw_upload(struct as102_bus_ada
+@@ -190,11 +190,8 @@ int as102_fw_upload(struct as10x_bus_ada
  
  	/* request kernel to locate firmware file: part1 */
  	errno = request_firmware(&firmware, fw1, &dev->dev);
 -	if (errno < 0) {
--		printk(KERN_ERR "%s: unable to locate firmware file: %s\n",
--				 DRIVER_NAME, fw1);
+-		pr_err("%s: unable to locate firmware file: %s\n",
+-		       DRIVER_NAME, fw1);
 +	if (errno)
  		goto error;
 -	}
  
  	/* initiate firmware upload */
  	errno = as102_firmware_upload(bus_adap, cmd_buf, firmware);
-@@ -220,11 +217,8 @@ int as102_fw_upload(struct as102_bus_ada
+@@ -213,11 +210,8 @@ int as102_fw_upload(struct as10x_bus_ada
  
  	/* request kernel to locate firmware file: part2 */
  	errno = request_firmware(&firmware, fw2, &dev->dev);
 -	if (errno < 0) {
--		printk(KERN_ERR "%s: unable to locate firmware file: %s\n",
--				 DRIVER_NAME, fw2);
+-		pr_err("%s: unable to locate firmware file: %s\n",
+-		       DRIVER_NAME, fw2);
 +	if (errno)
  		goto error;
 -	}
@@ -2356,7 +2188,7 @@
  	errno = as102_firmware_upload(bus_adap, cmd_buf, firmware);
 --- a/drivers/staging/media/go7007/go7007-driver.c
 +++ b/drivers/staging/media/go7007/go7007-driver.c
-@@ -97,11 +97,8 @@ static int go7007_load_encoder(struct go
+@@ -96,11 +96,8 @@ static int go7007_load_encoder(struct go
  	int fw_len, rv = 0;
  	u16 intr_val, intr_data;
  
@@ -2442,7 +2274,7 @@
  				RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n");
 --- a/drivers/staging/rtl8712/hal_init.c
 +++ b/drivers/staging/rtl8712/hal_init.c
-@@ -50,7 +50,6 @@ static void rtl871x_load_fw_cb(const str
+@@ -49,7 +49,6 @@ static void rtl871x_load_fw_cb(const str
  	if (!firmware) {
  		struct usb_device *udev = padapter->dvobjpriv.pusbdev;
  		struct usb_interface *pusb_intf = padapter->pusb_intf;
@@ -2495,7 +2327,7 @@
  
 --- a/drivers/tty/cyclades.c
 +++ b/drivers/tty/cyclades.c
-@@ -3543,10 +3543,8 @@ static int __devinit cyz_load_fw(struct
+@@ -3539,10 +3539,8 @@ static int __devinit cyz_load_fw(struct
  	int retval;
  
  	retval = request_firmware(&fw, "cyzfirm.bin", &pdev->dev);
@@ -2509,7 +2341,7 @@
  	   positive, skip this board */
 --- a/drivers/tty/moxa.c
 +++ b/drivers/tty/moxa.c
-@@ -867,13 +867,8 @@ static int moxa_init_board(struct moxa_b
+@@ -866,13 +866,8 @@ static int moxa_init_board(struct moxa_b
  	}
  
  	ret = request_firmware(&fw, file, dev);
@@ -2526,7 +2358,7 @@
  
 --- a/drivers/tty/serial/icom.c
 +++ b/drivers/tty/serial/icom.c
-@@ -374,7 +374,6 @@ static void load_code(struct icom_port *
+@@ -373,7 +373,6 @@ static void load_code(struct icom_port *
  
  	/* Load Call Setup into Adapter */
  	if (request_firmware(&fw, "icom_call_setup.bin", &dev->dev) < 0) {
@@ -2534,7 +2366,7 @@
  		status = -1;
  		goto load_code_exit;
  	}
-@@ -394,7 +393,6 @@ static void load_code(struct icom_port *
+@@ -393,7 +392,6 @@ static void load_code(struct icom_port *
  
  	/* Load Resident DCE portion of Adapter */
  	if (request_firmware(&fw, "icom_res_dce.bin", &dev->dev) < 0) {
@@ -2542,7 +2374,7 @@
  		status = -1;
  		goto load_code_exit;
  	}
-@@ -439,7 +437,6 @@ static void load_code(struct icom_port *
+@@ -438,7 +436,6 @@ static void load_code(struct icom_port *
  	}
  
  	if (request_firmware(&fw, "icom_asc.bin", &dev->dev) < 0) {
@@ -2552,7 +2384,7 @@
  	}
 --- a/drivers/tty/serial/ucc_uart.c
 +++ b/drivers/tty/serial/ucc_uart.c
-@@ -1173,10 +1173,8 @@ static void uart_firmware_cont(const str
+@@ -1176,10 +1176,8 @@ static void uart_firmware_cont(const str
  	struct device *dev = context;
  	int ret;
  
@@ -2614,7 +2446,7 @@
  
  	if (UEA_CHIP_VERSION(sc) == EAGLE_IV)
  		ret = check_dsp_e4(sc->dsp_firm->data, sc->dsp_firm->size);
-@@ -1607,12 +1597,8 @@ static int request_cmvs_old(struct uea_s
+@@ -1603,12 +1593,8 @@ static int request_cmvs_old(struct uea_s
  
  	cmvs_file_name(sc, cmv_name, 1);
  	ret = request_firmware(fw, cmv_name, &sc->usb_dev->dev);
@@ -2628,7 +2460,7 @@
  
  	data = (u8 *) (*fw)->data;
  	size = (*fw)->size;
-@@ -1649,9 +1635,6 @@ static int request_cmvs(struct uea_softc
+@@ -1645,9 +1631,6 @@ static int request_cmvs(struct uea_softc
  				"try to get older cmvs\n", cmv_name);
  			return request_cmvs_old(sc, cmvs, fw);
  		}
@@ -2638,7 +2470,7 @@
  		return ret;
  	}
  
-@@ -1934,11 +1917,8 @@ static int load_XILINX_firmware(struct u
+@@ -1930,11 +1913,8 @@ static int load_XILINX_firmware(struct u
  	uea_enters(INS_TO_USBDEV(sc));
  
  	ret = request_firmware(&fw_entry, fw_name, &sc->usb_dev->dev);
@@ -2653,7 +2485,7 @@
  	size = fw_entry->size;
 --- a/drivers/usb/misc/emi26.c
 +++ b/drivers/usb/misc/emi26.c
-@@ -96,21 +96,17 @@ static int emi26_load_firmware (struct u
+@@ -89,21 +89,17 @@ static int emi26_load_firmware (struct u
  
  	err = request_ihex_firmware(&loader_fw, "emi26/loader.fw", &dev->dev);
  	if (err)
@@ -2678,31 +2510,6 @@
  
  	/* Assert reset (stop the CPU in the EMI) */
  	err = emi26_set_reset(dev,1);
---- a/drivers/usb/misc/emi62.c
-+++ b/drivers/usb/misc/emi62.c
-@@ -105,19 +105,16 @@ static int emi62_load_firmware (struct u
- 
- 	err = request_ihex_firmware(&loader_fw, "emi62/loader.fw", &dev->dev);
- 	if (err)
--		goto nofw;
-+		goto wraperr;
- 
- 	err = request_ihex_firmware(&bitstream_fw, "emi62/bitstream.fw",
- 				    &dev->dev);
- 	if (err)
--		goto nofw;
-+		goto wraperr;
- 
- 	err = request_ihex_firmware(&firmware_fw, FIRMWARE_FW, &dev->dev);
--	if (err) {
--	nofw:
--		err( "%s - request_firmware() failed", __func__);
-+	if (err)
- 		goto wraperr;
--	}
- 
- 	/* Assert reset (stop the CPU in the EMI) */
- 	err = emi62_set_reset(dev,1);
 --- a/drivers/usb/misc/isight_firmware.c
 +++ b/drivers/usb/misc/isight_firmware.c
 @@ -48,7 +48,6 @@ static int isight_firmware_load(struct u
@@ -2715,7 +2522,7 @@
  	}
 --- a/drivers/usb/serial/io_edgeport.c
 +++ b/drivers/usb/serial/io_edgeport.c
-@@ -309,11 +309,8 @@ static void update_edgeport_E2PROM(struc
+@@ -312,11 +312,8 @@ static void update_edgeport_E2PROM(struc
  
  	response = request_ihex_firmware(&fw, fw_name,
  					 &edge_serial->serial->dev->dev);
@@ -2730,7 +2537,7 @@
  	BootMajorVersion = rec->data[0];
 --- a/drivers/usb/serial/io_ti.c
 +++ b/drivers/usb/serial/io_ti.c
-@@ -870,8 +870,6 @@ static int build_i2c_fw_hdr(__u8 *header
+@@ -855,8 +855,6 @@ static int build_i2c_fw_hdr(__u8 *header
  
  	err = request_firmware(&fw, fw_name, dev);
  	if (err) {
@@ -2739,7 +2546,7 @@
  		kfree(buffer);
  		return err;
  	}
-@@ -1436,8 +1434,6 @@ static int download_fw(struct edgeport_s
+@@ -1421,8 +1419,6 @@ static int download_fw(struct edgeport_s
  
  		err = request_firmware(&fw, fw_name, dev);
  		if (err) {
@@ -2750,21 +2557,21 @@
  		}
 --- a/drivers/usb/serial/keyspan.c
 +++ b/drivers/usb/serial/keyspan.c
-@@ -1399,10 +1399,8 @@ static int keyspan_fake_startup(struct u
+@@ -1233,10 +1233,8 @@ static int keyspan_fake_startup(struct u
  		return 1;
  	}
  
 -	if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev)) {
 -		dev_err(&serial->dev->dev, "Required keyspan firmware image (%s) unavailable.\n", fw_name);
 +	if (request_ihex_firmware(&fw, fw_name, &serial->dev->dev))
- 		return(1);
+ 		return 1;
 -	}
  
  	dbg("Uploading Keyspan %s firmware.", fw_name);
  
 --- a/drivers/usb/serial/keyspan_pda.c
 +++ b/drivers/usb/serial/keyspan_pda.c
-@@ -765,11 +765,8 @@ static int keyspan_pda_fake_startup(stru
+@@ -699,11 +699,8 @@ static int keyspan_pda_fake_startup(stru
  			__func__);
  		return -ENODEV;
  	}
@@ -2779,7 +2586,7 @@
  	while (record) {
 --- a/drivers/usb/serial/ti_usb_3410_5052.c
 +++ b/drivers/usb/serial/ti_usb_3410_5052.c
-@@ -1743,10 +1743,8 @@ static int ti_download_firmware(struct t
+@@ -1671,10 +1671,8 @@ static int ti_download_firmware(struct t
  		}
  		status = request_firmware(&fw_p, buf, &dev->dev);
  	}
@@ -2793,8 +2600,8 @@
  		release_firmware(fw_p);
 --- a/drivers/usb/serial/whiteheat.c
 +++ b/drivers/usb/serial/whiteheat.c
-@@ -301,18 +301,11 @@ static int whiteheat_firmware_download(s
- 	dbg("%s", __func__);
+@@ -204,18 +204,11 @@ static int whiteheat_firmware_download(s
+ 	const struct ihex_binrec *record;
  
  	if (request_ihex_firmware(&firmware_fw, "whiteheat.fw",
 -				  &serial->dev->dev)) {
@@ -2919,7 +2726,7 @@
  	buf = firmware->data;
 --- a/sound/pci/asihpi/hpidspcd.c
 +++ b/sound/pci/asihpi/hpidspcd.c
-@@ -51,9 +51,6 @@ short hpi_dsp_code_open(u32 adapter, voi
+@@ -49,9 +49,6 @@ short hpi_dsp_code_open(u32 adapter, voi
  	err = request_firmware(&firmware, fw_name, &dev->dev);
  
  	if (err || !firmware) {
@@ -3027,7 +2834,7 @@
  		release_firmware(fw_entry);
 --- a/sound/pci/riptide/riptide.c
 +++ b/sound/pci/riptide/riptide.c
-@@ -1238,11 +1238,8 @@ static int try_to_load_firmware(struct c
+@@ -1245,11 +1245,8 @@ static int try_to_load_firmware(struct c
  	if (!chip->fw_entry) {
  		err = request_firmware(&chip->fw_entry, "riptide.hex",
  				       &chip->pci->dev);
@@ -3056,21 +2863,21 @@
  			   (int)fw->size, (int)sizeof(hdsp->firmware_cache));
 --- a/sound/soc/codecs/wm2000.c
 +++ b/sound/soc/codecs/wm2000.c
-@@ -773,10 +773,8 @@ static int __devinit wm2000_i2c_probe(st
+@@ -794,10 +794,8 @@ static int __devinit wm2000_i2c_probe(st
  	}
  
  	ret = request_firmware(&fw, filename, &i2c->dev);
 -	if (ret != 0) {
 -		dev_err(&i2c->dev, "Failed to acquire ANC data: %d\n", ret);
 +	if (ret != 0)
- 		goto err;
+ 		goto out_regmap_exit;
 -	}
  
  	/* Pre-cook the concatenation of the register address onto the image */
  	wm2000->anc_download_size = fw->size + 2;
 --- a/sound/usb/6fire/firmware.c
 +++ b/sound/usb/6fire/firmware.c
-@@ -220,8 +220,6 @@ static int usb6fire_fw_ezusb_upload(
+@@ -219,8 +219,6 @@ static int usb6fire_fw_ezusb_upload(
  	ret = request_firmware(&fw, fwname, &device->dev);
  	if (ret < 0) {
  		kfree(rec);
@@ -3079,7 +2886,7 @@
  		return ret;
  	}
  	ret = usb6fire_fw_ihex_init(fw, rec);
-@@ -293,8 +291,6 @@ static int usb6fire_fw_fpga_upload(
+@@ -292,8 +290,6 @@ static int usb6fire_fw_fpga_upload(
  
  	ret = request_firmware(&fw, fwname, &device->dev);
  	if (ret < 0) {

Copied and modified: dists/trunk/linux/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch (from r19601, dists/sid/linux/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch)
==============================================================================
--- dists/sid/linux/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch	Mon Dec 10 02:01:11 2012	(r19601, copy source)
+++ dists/trunk/linux/debian/patches/bugfix/all/firmware_class-log-every-success-and-failure.patch	Mon Dec 10 04:06:21 2012	(r19603)
@@ -19,7 +19,7 @@
 
 --- a/drivers/base/firmware_class.c
 +++ b/drivers/base/firmware_class.c
-@@ -251,7 +251,8 @@ static ssize_t firmware_loading_store(st
+@@ -255,7 +255,8 @@ static ssize_t firmware_loading_store(st
  						 fw_priv->nr_pages,
  						 0, PAGE_KERNEL_RO);
  			if (!fw_priv->fw->data) {
@@ -29,7 +29,7 @@
  				goto err;
  			}
  			/* Pages are now owned by 'struct firmware' */
-@@ -266,9 +267,14 @@ static ssize_t firmware_loading_store(st
+@@ -270,9 +271,14 @@ static ssize_t firmware_loading_store(st
  		}
  		/* fallthrough */
  	default:
@@ -46,7 +46,7 @@
  	err:
  		fw_load_abort(fw_priv);
  		break;
-@@ -431,6 +437,9 @@ static void firmware_class_timeout(u_lon
+@@ -435,6 +441,9 @@ static void firmware_class_timeout(u_lon
  {
  	struct firmware_priv *fw_priv = (struct firmware_priv *) data;
  
@@ -56,40 +56,83 @@
  	fw_load_abort(fw_priv);
  }
  
-@@ -530,7 +539,8 @@ static int _request_firmware(const struc
+@@ -486,7 +495,8 @@ _request_firmware_prepare(const struct f
  	}
  
  	if (fw_get_builtin_firmware(firmware, name)) {
 -		dev_dbg(device, "firmware: using built-in firmware %s\n", name);
 +		dev_info(device, "firmware: using built-in firmware %s\n",
 +			 name);
- 		return 0;
+ 		return NULL;
  	}
  
-@@ -564,8 +574,15 @@ static int _request_firmware(const struc
+@@ -517,25 +527,29 @@ static int _request_firmware_load(struct
+ 
+ 	retval = device_add(f_dev);
+ 	if (retval) {
+-		dev_err(f_dev, "%s: device_register failed\n", __func__);
++		dev_err(f_dev->parent, "%s: device_register failed\n",
++			__func__);
+ 		goto err_put_dev;
+ 	}
+ 
+ 	retval = device_create_bin_file(f_dev, &firmware_attr_data);
+ 	if (retval) {
+-		dev_err(f_dev, "%s: sysfs_create_bin_file failed\n", __func__);
++		dev_err(f_dev->parent, "%s: sysfs_create_bin_file failed\n",
++			__func__);
+ 		goto err_del_dev;
+ 	}
+ 
+ 	retval = device_create_file(f_dev, &dev_attr_loading);
+ 	if (retval) {
+-		dev_err(f_dev, "%s: device_create_file failed\n", __func__);
++		dev_err(f_dev->parent, "%s: device_create_file failed\n",
++			__func__);
+ 		goto err_del_bin_attr;
+ 	}
+ 
+ 	if (uevent) {
+ 		dev_set_uevent_suppress(f_dev, false);
+-		dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
++		dev_dbg(f_dev->parent, "firmware: requesting %s\n",
++			fw_priv->fw_id);
+ 		if (timeout != MAX_SCHEDULE_TIMEOUT)
+ 			mod_timer(&fw_priv->timeout,
+ 				  round_jiffies_up(jiffies + timeout));
+@@ -549,8 +563,15 @@ static int _request_firmware_load(struct
  	del_timer_sync(&fw_priv->timeout);
  
  	mutex_lock(&fw_lock);
 -	if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status))
 +	if (test_bit(FW_STATUS_ABORT, &fw_priv->status)) {
 +		/* failure has already been logged */
- 		retval = -ENOENT;
++		retval = -ENOENT;
 +	} else if (!fw_priv->fw->size) {
-+		dev_err(device,
++		dev_err(f_dev->parent,
 +			"firmware: agent loaded no data for %s (not found?)\n",
 +			name);
-+		retval = -ENOENT;
+ 		retval = -ENOENT;
 +	}
  	fw_priv->fw = NULL;
  	mutex_unlock(&fw_lock);
  
-@@ -575,6 +592,9 @@ out:
- 	if (retval) {
- 		release_firmware(firmware);
- 		*firmware_p = NULL;
-+	} else {
+@@ -601,6 +622,9 @@ request_firmware(const struct firmware *
+ 	}
+ 	if (ret)
+ 		_request_firmware_cleanup(firmware_p);
++	else
 +		dev_info(device, "firmware: agent loaded %s into memory\n",
 +			 name);
- 	}
  
- 	return retval;
+ 	return ret;
+ }
+@@ -650,7 +674,7 @@ static void request_firmware_work_func(s
+ 		ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
+ 		usermodehelper_read_unlock();
+ 	} else {
+-		dev_dbg(fw_work->device, "firmware: %s loading timed out\n",
++		dev_err(fw_work->device, "firmware: %s loading timed out\n",
+ 			fw_work->name);
+ 		ret = -EAGAIN;
+ 	}

Copied: dists/trunk/linux/debian/patches/bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch (from r19601, dists/sid/linux/debian/patches/bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch)
@@ -0,0 +1,39 @@
+From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn at mork.no>
+Date: Wed, 21 Nov 2012 09:54:48 +0100
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Subject: [PATCH] megaraid_sas: fix memory leak if SGL has zero length entries
+Content-Transfer-Encoding: 8bit
+
+commit 98cb7e44 ([SCSI] megaraid_sas: Sanity check user
+supplied length before passing it to dma_alloc_coherent())
+introduced a memory leak.  Memory allocated for entries
+following zero length SGL entries will not be freed.
+
+Reference: http://bugs.debian.org/688198
+Cc: <stable at vger.kernel.org>
+Signed-off-by: Bjørn Mork <bjorn at mork.no>
+Acked-by: Adam Radford <aradford at gmail.com>
+---
+ drivers/scsi/megaraid/megaraid_sas_base.c |   10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+--- a/drivers/scsi/megaraid/megaraid_sas_base.c
++++ b/drivers/scsi/megaraid/megaraid_sas_base.c
+@@ -4886,10 +4886,12 @@ megasas_mgmt_fw_ioctl(struct megasas_ins
+ 				    sense, sense_handle);
+ 	}
+ 
+-	for (i = 0; i < ioc->sge_count && kbuff_arr[i]; i++) {
+-		dma_free_coherent(&instance->pdev->dev,
+-				    kern_sge32[i].length,
+-				    kbuff_arr[i], kern_sge32[i].phys_addr);
++	for (i = 0; i < ioc->sge_count; i++) {
++		if (kbuff_arr[i])
++			dma_free_coherent(&instance->pdev->dev,
++					  kern_sge32[i].length,
++					  kbuff_arr[i],
++					  kern_sge32[i].phys_addr);
+ 	}
+ 
+ 	megasas_return_cmd(instance, cmd);

Copied: dists/trunk/linux/debian/patches/bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch (from r19601, dists/sid/linux/debian/patches/bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch)
@@ -0,0 +1,49 @@
+From: Zhang Rui <rui.zhang at intel.com>
+Date: Tue, 4 Dec 2012 23:30:19 +0100
+Subject: ACPI / video: ignore BIOS initial backlight value for HP Folio
+ 13-2000
+
+commit 129ff8f8d58297b04f47b5d6fad81aa2d08404e1 upstream.
+
+Or else the laptop will boot with a dimmed screen.
+
+References: https://bugzilla.kernel.org/show_bug.cgi?id=51141
+Tested-by: Stefan Nagy <public at stefan-nagy.at>
+Signed-off-by: Zhang Rui <rui.zhang at intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki at intel.com>
+---
+ drivers/acpi/video.c |   14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
+index 0230cb6..ac9a69c 100644
+--- a/drivers/acpi/video.c
++++ b/drivers/acpi/video.c
+@@ -389,6 +389,12 @@ static int __init video_set_bqc_offset(const struct dmi_system_id *d)
+ 	return 0;
+ }
+ 
++static int video_ignore_initial_backlight(const struct dmi_system_id *d)
++{
++	use_bios_initial_backlight = 0;
++	return 0;
++}
++
+ static struct dmi_system_id video_dmi_table[] __initdata = {
+ 	/*
+ 	 * Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
+@@ -433,6 +439,14 @@ static struct dmi_system_id video_dmi_table[] __initdata = {
+ 		DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720"),
+ 		},
+ 	},
++	{
++	 .callback = video_ignore_initial_backlight,
++	 .ident = "HP Folio 13-2000",
++	 .matches = {
++		DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
++		DMI_MATCH(DMI_PRODUCT_NAME, "HP Folio 13 - 2000 Notebook PC"),
++		},
++	},
+ 	{}
+ };
+ 

Copied: dists/trunk/linux/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch (from r19601, dists/sid/linux/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch)
@@ -0,0 +1,63 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 9 Nov 2012 02:43:00 +0000
+Subject: asus-laptop: Do not call HWRS on init
+
+Since commit 8871e99f89b7 ('asus-laptop: HRWS/HWRS typo'), module
+initialisation is very slow on the Asus UL30A.  The HWRS method takes
+about 12 seconds to run, and subsequent initialisation also seems to
+be delayed.  Since we don't really need the result, don't bother
+calling it on init.  Those who are curious can still get the result
+through the 'infos' device attribute.
+
+Update the comment about HWRS in show_infos().
+
+Reported-by: ryan <draziw+deb at gmail.com>
+References: http://bugs.debian.org/692436
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ drivers/platform/x86/asus-laptop.c |   17 ++++-------------
+ 1 file changed, 4 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c
+index 4b568df..a961156 100644
+--- a/drivers/platform/x86/asus-laptop.c
++++ b/drivers/platform/x86/asus-laptop.c
+@@ -860,8 +860,10 @@ static ssize_t show_infos(struct device *dev,
+ 	/*
+ 	 * The HWRS method return informations about the hardware.
+ 	 * 0x80 bit is for WLAN, 0x100 for Bluetooth.
++	 * 0x40 for WWAN, 0x10 for WIMAX.
+ 	 * The significance of others is yet to be found.
+-	 * If we don't find the method, we assume the device are present.
++	 * We don't currently use this for device detection, and it
++	 * takes several seconds to run on some systems.
+ 	 */
+ 	rv = acpi_evaluate_integer(asus->handle, "HWRS", NULL, &temp);
+ 	if (!ACPI_FAILURE(rv))
+@@ -1682,7 +1684,7 @@ static int asus_laptop_get_info(struct asus_laptop *asus)
+ {
+ 	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
+ 	union acpi_object *model = NULL;
+-	unsigned long long bsts_result, hwrs_result;
++	unsigned long long bsts_result;
+ 	char *string = NULL;
+ 	acpi_status status;
+ 
+@@ -1744,17 +1746,6 @@ static int asus_laptop_get_info(struct asus_laptop *asus)
+ 	if (*string)
+ 		pr_notice("  %s model detected\n", string);
+ 
+-	/*
+-	 * The HWRS method return informations about the hardware.
+-	 * 0x80 bit is for WLAN, 0x100 for Bluetooth,
+-	 * 0x40 for WWAN, 0x10 for WIMAX.
+-	 * The significance of others is yet to be found.
+-	 */
+-	status =
+-	    acpi_evaluate_integer(asus->handle, "HWRS", NULL, &hwrs_result);
+-	if (!ACPI_FAILURE(status))
+-		pr_notice("  HWRS returned %x", (int)hwrs_result);
+-
+ 	if (!acpi_check_handle(asus->handle, METHOD_WL_STATUS, NULL))
+ 		asus->have_rsts = true;
+ 

Copied: dists/trunk/linux/debian/patches/debian/radeon-no-modeset-without-firmware.patch (from r19601, dists/sid/linux/debian/patches/debian/radeon-no-modeset-without-firmware.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/debian/radeon-no-modeset-without-firmware.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/debian/radeon-no-modeset-without-firmware.patch)
@@ -0,0 +1,83 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Subject: radeon: No MODESET without firmware
+Date: Sat, 17 Nov 2012 05:28:53 +0000
+Bug-Debian: http://bugs.debian.org/607194
+Bug-Debian: http://bugs.debian.org/607471
+Bug-Debian: http://bugs.debian.org/610851
+Bug-Debian: http://bugs.debian.org/627497
+Bug-Debian: http://bugs.debian.org/632212
+Bug-Debian: http://bugs.debian.org/637943
+Bug-Debian: http://bugs.debian.org/649448
+
+radeon requires firmware/microcode for the GPU all chips, but for
+newer chips (apparently R600 'Evergreen' onward) it also expects
+firmware for the memory controller and other sub-blocks.
+
+radeon attempts to gracefully fall back and disable some features if
+the firmware is not available, but becomes unstable - the framebuffer
+and/or system memory may be corrupted, or the display may stay black.
+This does not seem to happen if KMS is disabled.
+
+Unfortunately, it is not possible to properly disable KMS once the
+missing firmware is discovered.  Each driver registers with the DRM
+core as having certain capabilities such as DRIVER_MODESET (KMS) and
+the DRM does not allow for individual devices to have different
+capabilities!
+
+Therefore, perform a basic check for the existence of
+/lib/firmware/radeon when the driver is loaded, and disable KMS
+if it is missing.  I apologise for this gross hack, but I cannot
+see any more reliable solution that doesn't involve major changes
+to both DRM and radeon.
+
+---
+--- a/drivers/gpu/drm/radeon/radeon_drv.c
++++ b/drivers/gpu/drm/radeon/radeon_drv.c
+@@ -37,6 +37,8 @@
+ #include "drm_pciids.h"
+ #include <linux/console.h>
+ #include <linux/module.h>
++#include <linux/namei.h>
++#include <linux/path.h>
+ 
+ 
+ /*
+@@ -378,6 +380,24 @@ static struct pci_driver radeon_kms_pci_
+ 	.resume = radeon_pci_resume,
+ };
+ 
++/* Test that /lib/firmware/radeon is a directory (or symlink to a
++ * directory).  We could try to match the udev search path, but let's
++ * assume people take the easy route and install
++ * firmware-linux-nonfree.
++ */
++static bool __init radeon_firmware_installed(void)
++{
++	struct path path;
++
++	if (kern_path("/lib/firmware/radeon", LOOKUP_DIRECTORY | LOOKUP_FOLLOW,
++		      &path) == 0) {
++		path_put(&path);
++		return true;
++	}
++
++	return false;
++}
++
+ static int __init radeon_init(void)
+ {
+ 	driver = &driver_old;
+@@ -402,6 +422,13 @@ static int __init radeon_init(void)
+ 		radeon_modeset = 0;
+ #endif
+ 	}
++	/* We have to commit to KMS before we've seen any devices, so
++	 * make a basic check to reduce the risk of failure later.
++	 */
++	if (radeon_modeset == 1 && !radeon_firmware_installed()) {
++		DRM_INFO("radeon kernel modesetting disabled; it requires firmware-linux-nonfree.\n");
++		radeon_modeset = 0;
++	}
+ 	if (radeon_modeset == 1) {
+ 		DRM_INFO("radeon kernel modesetting enabled.\n");
+ 		driver = &kms_driver;

Copied: dists/trunk/linux/debian/patches/features/all/xen/microcode-amd-fam15plus.patch (from r19601, dists/sid/linux/debian/patches/features/all/xen/microcode-amd-fam15plus.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/xen/microcode-amd-fam15plus.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/features/all/xen/microcode-amd-fam15plus.patch)
@@ -0,0 +1,39 @@
+From a47f7cb2f0dbe097b7c848aea05c3224bde07e3c Mon Sep 17 00:00:00 2001
+From: Ian Campbell <ijc at hellion.org.uk>
+Date: Mon, 26 Nov 2012 09:41:02 +0000
+Subject: [PATCH] microcode_xen: Add support for AMD family >= 15h
+
+Signed-off-by: Ian Campbell <ijc at hellion.org.uk>
+---
+ arch/x86/kernel/microcode_xen.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/arch/x86/kernel/microcode_xen.c b/arch/x86/kernel/microcode_xen.c
+index 9d2a06b..5fe87a6 100644
+--- a/arch/x86/kernel/microcode_xen.c
++++ b/arch/x86/kernel/microcode_xen.c
+@@ -58,7 +58,7 @@ static int xen_microcode_update(int cpu)
+ 
+ static enum ucode_state xen_request_microcode_fw(int cpu, struct device *device)
+ {
+-	char name[30];
++	char name[36];
+ 	struct cpuinfo_x86 *c = &cpu_data(cpu);
+ 	const struct firmware *firmware;
+ 	struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
+@@ -74,7 +74,11 @@ static enum ucode_state xen_request_microcode_fw(int cpu, struct device *device)
+ 		break;
+ 
+ 	case X86_VENDOR_AMD:
+-		snprintf(name, sizeof(name), "amd-ucode/microcode_amd.bin");
++		/* Beginning with family 15h AMD uses family-specific firmware files. */
++		if (c->x86 >= 0x15)
++			snprintf(name, sizeof(name), "amd-ucode/microcode_amd_fam%.2xh.bin", c->x86);
++		else
++			snprintf(name, sizeof(name), "amd-ucode/microcode_amd.bin");
+ 		break;
+ 
+ 	default:
+-- 
+1.7.10.4
+

Copied: dists/trunk/linux/debian/patches/features/all/xen/microcode-typo.patch (from r19601, dists/sid/linux/debian/patches/features/all/xen/microcode-typo.patch)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux/debian/patches/features/all/xen/microcode-typo.patch	Mon Dec 10 04:06:21 2012	(r19603, copy of r19601, dists/sid/linux/debian/patches/features/all/xen/microcode-typo.patch)
@@ -0,0 +1,15 @@
+http://git.kernel.org/?p=linux/kernel/git/konrad/xen.git;a=commitdiff;h=f6c958ff0d00ffbf1cdc8fcf2f2a82f06fbbb5f4
+
+Index: linux/arch/x86/kernel/microcode_xen.c
+===================================================================
+--- linux.orig/arch/x86/kernel/microcode_xen.c	2012-12-05 13:31:49.000000000 +0000
++++ linux/arch/x86/kernel/microcode_xen.c	2012-12-05 13:32:10.000000000 +0000
+@@ -161,7 +161,7 @@
+ 	ret = UCODE_OK;
+ 
+ out:
+-	if (ret == 0)
++	if (ret == UCODE_OK)
+ 		uci->mc = uc;
+ 	else
+ 		vfree(uc);

Copied and modified: dists/trunk/linux/debian/patches/features/all/xen/microcode.patch (from r19601, dists/sid/linux/debian/patches/features/all/xen/microcode.patch)
==============================================================================
--- dists/sid/linux/debian/patches/features/all/xen/microcode.patch	Mon Dec 10 02:01:11 2012	(r19601, copy source)
+++ dists/trunk/linux/debian/patches/features/all/xen/microcode.patch	Mon Dec 10 04:06:21 2012	(r19603)
@@ -25,12 +25,10 @@
  5 files changed, 216 insertions(+), 1 deletion(-)
  create mode 100644 arch/x86/kernel/microcode_xen.c
 
-Index: linux/arch/x86/include/asm/microcode.h
-===================================================================
---- linux.orig/arch/x86/include/asm/microcode.h	2012-10-30 23:27:11.000000000 +0000
-+++ linux/arch/x86/include/asm/microcode.h	2012-11-09 10:59:49.000000000 +0000
-@@ -61,4 +61,13 @@
- }
+--- a/arch/x86/include/asm/microcode.h
++++ b/arch/x86/include/asm/microcode.h
+@@ -63,4 +63,13 @@ static inline struct microcode_ops * __i
+ static inline void __exit exit_amd_microcode(void) {}
  #endif
  
 +#ifdef CONFIG_MICROCODE_XEN
@@ -43,11 +41,9 @@
 +#endif
 +
  #endif /* _ASM_X86_MICROCODE_H */
-Index: linux/arch/x86/kernel/Makefile
-===================================================================
---- linux.orig/arch/x86/kernel/Makefile	2012-10-30 23:27:11.000000000 +0000
-+++ linux/arch/x86/kernel/Makefile	2012-11-09 10:59:49.000000000 +0000
-@@ -92,6 +92,7 @@
+--- a/arch/x86/kernel/Makefile
++++ b/arch/x86/kernel/Makefile
+@@ -92,6 +92,7 @@ obj-$(CONFIG_PCSPKR_PLATFORM)	+= pcspeak
  microcode-y				:= microcode_core.o
  microcode-$(CONFIG_MICROCODE_INTEL)	+= microcode_intel.o
  microcode-$(CONFIG_MICROCODE_AMD)	+= microcode_amd.o
@@ -55,10 +51,8 @@
  obj-$(CONFIG_MICROCODE)			+= microcode.o
  
  obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION) += check.o
-Index: linux/arch/x86/kernel/microcode_core.c
-===================================================================
---- linux.orig/arch/x86/kernel/microcode_core.c	2012-11-09 10:18:15.000000000 +0000
-+++ linux/arch/x86/kernel/microcode_core.c	2012-11-09 10:59:49.000000000 +0000
+--- a/arch/x86/kernel/microcode_core.c
++++ b/arch/x86/kernel/microcode_core.c
 @@ -84,6 +84,7 @@
  #include <linux/mm.h>
  #include <linux/syscore_ops.h>
@@ -66,8 +60,8 @@
 +#include <xen/xen.h>
  #include <asm/microcode.h>
  #include <asm/processor.h>
- 
-@@ -518,7 +519,9 @@
+ #include <asm/cpu_device_id.h>
+@@ -544,7 +545,9 @@ static int __init microcode_init(void)
  	struct cpuinfo_x86 *c = &cpu_data(0);
  	int error;
  
@@ -78,10 +72,8 @@
  		microcode_ops = init_intel_microcode();
  	else if (c->x86_vendor == X86_VENDOR_AMD)
  		microcode_ops = init_amd_microcode();
-Index: linux/arch/x86/kernel/microcode_xen.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux/arch/x86/kernel/microcode_xen.c	2012-11-09 10:59:49.000000000 +0000
+--- /dev/null
++++ b/arch/x86/kernel/microcode_xen.c
 @@ -0,0 +1,198 @@
 +/*
 + * Xen microcode update driver
@@ -281,15 +273,12 @@
 +		return NULL;
 +	return &microcode_xen_ops;
 +}
-Index: linux/arch/x86/xen/Kconfig
-===================================================================
---- linux.orig/arch/x86/xen/Kconfig	2012-10-30 23:27:11.000000000 +0000
-+++ linux/arch/x86/xen/Kconfig	2012-11-09 11:00:42.000000000 +0000
-@@ -48,3 +48,7 @@
- 	help
+--- a/arch/x86/xen/Kconfig
++++ b/arch/x86/xen/Kconfig
+@@ -50,3 +50,6 @@ config XEN_DEBUG_FS
  	  Enable statistics output and various tuning options in debugfs.
  	  Enabling this option may incur a significant performance overhead.
-+
+ 
 +config MICROCODE_XEN
 +       def_bool y
 +       depends on XEN_DOM0 && MICROCODE

Modified: dists/trunk/linux/debian/patches/series
==============================================================================
--- dists/trunk/linux/debian/patches/series	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/patches/series	Mon Dec 10 04:06:21 2012	(r19603)
@@ -55,3 +55,17 @@
 bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch
 bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch
 bugfix/arm/omap-musb-choice.patch
+bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch
+
+features/all/xen/microcode.patch
+debian/radeon-no-modeset-without-firmware.patch
+features/all/xen/microcode-amd-fam15plus.patch
+features/all/xen/microcode-typo.patch
+
+bugfix/all/firmware_class-log-every-success-and-failure.patch
+bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch
+
+bugfix/x86/ACPI-video-ignore-BIOS-initial-backlight-value-for-H.patch
+bugfix/all/exec-do-not-leave-bprm-interp-on-stack.patch
+bugfix/all/exec-use-ELOOP-for-max-recursion-depth.patch
+bugfix/all/megaraid_sas-fix-memory-leak-if-SGL-has-zero-length-entries.patch

Modified: dists/trunk/linux/debian/templates/control.image-dbg.in
==============================================================================
--- dists/trunk/linux/debian/templates/control.image-dbg.in	Mon Dec 10 02:48:44 2012	(r19602)
+++ dists/trunk/linux/debian/templates/control.image-dbg.in	Mon Dec 10 04:06:21 2012	(r19603)
@@ -2,6 +2,6 @@
 Depends: ${misc:Depends}
 Section: debug
 Priority: extra
-Description: Debugging infos for Linux @abiname@@localversion@
- This package provides the binary debug image and pre-built debug loadable                                                     
- modules for Linux kernel @upstreamversion@ on @longclass@ machines.
+Description: Debugging symbols for Linux @abiname@@localversion@
+ This package provides the detached debugging symbols for the Linux kernel
+ and modules in linux-image- at abiname@@localversion at .



More information about the Kernel-svn-changes mailing list