Push to branch refs/heads/master:
76da2fb8c0f7ffe6dddbd209f8c0ab6a0f86eab5 -->
  86a705267a2a502a3d62ef0797e449677b25835f

 Documentation/stable_kernel_rules.txt       | 12 ++--
 Makefile                                    |  2 +-
 arch/arm/mach-davinci/board-da850-evm.c     | 28 ++++++++++
 arch/arm/plat-mxc/include/mach/iomux-v3.h   | 10 ++--
 arch/mips/alchemy/mtx-1/platform.c          |  9 ---
 arch/powerpc/kernel/pci_of_scan.c           |  2 +
 arch/s390/kvm/kvm-s390.c                    | 14 +++--
 arch/sparc/include/asm/spinlock_32.h        | 11 +++-
 arch/sparc/include/asm/spinlock_64.h        |  6 --
 arch/sparc/kernel/pcic.c                    |  4 +-
 arch/x86/include/asm/processor.h            | 23 ++++++++
 arch/x86/kernel/amd_iommu.c                 |  2 +-
 arch/x86/kernel/kprobes.c                   |  4 +-
 arch/x86/kernel/smpboot.c                   | 85 +----------------------------
 arch/x86/xen/smp.c                          | 10 ++++
 arch/x86/xen/xen-asm_32.S                   |  8 ++-
 drivers/ata/ahci.c                          | 12 ++++
 drivers/block/xen-blkfront.c                |  2 +-
 drivers/char/hvc_console.c                  |  8 ++-
 drivers/char/tpm/tpm.c                      |  9 ++-
 drivers/hid/hid-ids.h                       |  3 +
 drivers/hid/usbhid/hid-quirks.c             |  1 +
 drivers/hwmon/w83627ehf.c                   | 15 +++--
 drivers/md/linear.h                         |  2 +-
 drivers/md/md.c                             | 12 +++-
 drivers/media/video/cx23885/cx23885-dvb.c   |  2 +-
 drivers/media/video/uvc/uvc_driver.c        |  2 +-
 drivers/media/video/uvc/uvc_video.c         | 10 +++-
 drivers/media/video/uvc/uvcvideo.h          |  2 +-
 drivers/net/cnic.c                          |  4 +-
 drivers/net/e1000/e1000_hw.c                |  6 ++
 drivers/net/irda/smsc-ircc2.c               |  2 +-
 drivers/net/rionet.c                        |  4 +-
 drivers/net/usb/asix.c                      |  4 ++
 drivers/net/wireless/b43/main.c             |  3 +-
 drivers/net/wireless/rt2x00/rt2800lib.c     | 17 +++---
 drivers/net/wireless/rt2x00/rt2x00usb.c     | 14 +----
 drivers/platform/x86/thinkpad_acpi.c        |  7 ++-
 drivers/s390/cio/ccwgroup.c                 | 42 +++++++-------
 drivers/scsi/3w-9xxx.c                      |  2 +
 drivers/scsi/aacraid/commsup.c              |  2 +
 drivers/scsi/fcoe/fcoe.c                    | 19 ++++++-
 drivers/scsi/ipr.c                          |  2 +-
 drivers/scsi/libiscsi_tcp.c                 | 14 +----
 drivers/scsi/libsas/sas_expander.c          | 14 +++--
 drivers/scsi/qla2xxx/qla_init.c             |  3 -
 drivers/scsi/qla2xxx/qla_isr.c              |  1 -
 drivers/staging/quatech_usb2/quatech_usb2.c |  9 ++-
 drivers/usb/class/cdc-acm.c                 |  3 +
 drivers/usb/core/devio.c                    | 27 +++++++--
 drivers/usb/host/ehci-hub.c                 |  7 +--
 drivers/usb/host/fhci-sched.c               | 19 +++++--
 drivers/usb/host/xhci-mem.c                 | 22 ++++----
 drivers/usb/mon/mon_bin.c                   |  2 +-
 drivers/usb/musb/musb_core.c                |  1 -
 drivers/usb/serial/ftdi_sio.c               | 24 +++++++-
 drivers/usb/serial/ftdi_sio_ids.h           |  7 ++-
 drivers/usb/serial/pl2303.c                 | 27 +++++++--
 drivers/usb/serial/pl2303.h                 |  5 ++
 drivers/usb/serial/qcserial.c               |  1 +
 drivers/usb/storage/transport.c             | 34 +++++++-----
 drivers/video/carminefb.c                   |  6 +-
 drivers/watchdog/mtx-1_wdt.c                |  5 +-
 fs/9p/v9fs.c                                | 43 ++++++++++++---
 fs/cifs/cifssmb.c                           |  3 +-
 fs/eventpoll.c                              | 25 ++++++---
 fs/ext4/ext4.h                              |  3 +-
 fs/ext4/extents.c                           |  1 +
 fs/lockd/clntproc.c                         |  8 ++-
 fs/nfsd/nfs4proc.c                          |  2 +-
 fs/nfsd/nfs4state.c                         |  2 +
 fs/nfsd/nfs4xdr.c                           | 12 ++++
 fs/nfsd/state.h                             |  6 --
 fs/proc/kcore.c                             |  2 +-
 fs/splice.c                                 |  3 +-
 include/linux/ext2_fs.h                     |  4 +-
 include/linux/ext3_fs.h                     |  4 +-
 include/linux/jiffies.h                     |  2 +-
 include/linux/sunrpc/sched.h                |  4 +-
 include/net/scm.h                           |  5 +-
 kernel/kmod.c                               |  4 +-
 kernel/time.c                               |  2 +-
 kernel/trace/trace.c                        |  4 +-
 lib/kobject_uevent.c                        |  2 +-
 mm/mmap.c                                   | 20 ++++---
 net/9p/client.c                             | 13 +++--
 net/atm/br2684.c                            |  7 ++-
 net/bluetooth/l2cap.c                       |  3 +-
 net/bluetooth/rfcomm/sock.c                 |  1 +
 net/core/dev.c                              |  2 +-
 net/core/scm.c                              | 10 ++--
 net/core/skbuff.c                           | 14 ++++-
 net/ipv6/ip6_output.c                       |  2 +-
 net/sched/sch_api.c                         | 14 ++---
 net/sunrpc/clnt.c                           |  3 +
 net/sunrpc/sched.c                          |  1 +
 net/wireless/nl80211.c                      |  9 ++-
 net/wireless/reg.c                          |  1 +
 net/x25/af_x25.c                            |  3 +-
 sound/pci/hda/patch_cirrus.c                |  2 +-
 sound/pci/hda/patch_realtek.c               |  6 +-
 sound/soc/codecs/ak4535.c                   | 10 ++--
 sound/soc/codecs/ak4642.c                   | 22 ++++----
 sound/soc/soc-jack.c                        |  2 +-
 104 files changed, 591 insertions(+), 364 deletions(-)

commit 86a705267a2a502a3d62ef0797e449677b25835f
Author: Greg Kroah-Hartman <gre...@suse.de>
Date:   Mon Nov 7 14:19:03 2011 -0800

    Linux 2.6.33.20

commit 5f27ddf4395c3ec908dfdd44b0ebbd95a87c1a94
Author: Theodore Ts'o <ty...@mit.edu>
Date:   Wed Aug 31 11:54:51 2011 -0400

    ext2,ext3,ext4: don't inherit APPEND_FL or IMMUTABLE_FL for new inodes
    
    commit 1cd9f0976aa4606db8d6e3dc3edd0aca8019372a upstream.
    
    This doesn't make much sense, and it exposes a bug in the kernel where
    attempts to create a new file in an append-only directory using
    O_CREAT will fail (but still leave a zero-length file).  This was
    discovered when xfstests #79 was generalized so it could run on all
    file systems.
    
    Signed-off-by: "Theodore Ts'o" <ty...@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 8f22b38e8446a3bba7a3f54825d5d22c92e2ca5a
Author: Alexandre Bounine <alexandre.boun...@idt.com>
Date:   Wed Nov 2 13:39:15 2011 -0700

    drivers/net/rionet.c: fix ethernet address macros for LE platforms
    
    commit e0c87bd95e8dad455c23bc56513af8dcb1737e55 upstream.
    
    Modify Ethernet addess macros to be compatible with BE/LE platforms
    
    Signed-off-by: Alexandre Bounine <alexandre.boun...@idt.com>
    Cc: Chul Kim <chul....@idt.com>
    Cc: Kumar Gala <ga...@kernel.crashing.org>
    Cc: Matt Porter <mpor...@kernel.crashing.org>
    Cc: Li Yang <le...@freescale.com>
    Signed-off-by: Andrew Morton <a...@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 56e66f0894df0cb2c18e10422d77da6693fd98bb
Author: Zheng Liu <wenqing...@taobao.com>
Date:   Fri Oct 28 20:34:02 2011 +0800

    ext4: fix BUG_ON() in ext4_ext_insert_extent()
    
    Does not corrispond with a direct commit in Linus's tree as it was fixed
    differently in the 3.0 release.
    
    
    We will meet with a BUG_ON() if following script is run.
    
    mkfs.ext4 -b 4096 /dev/sdb1 1000000
    mount -t ext4 /dev/sdb1 /mnt/sdb1
    fallocate -l 100M /mnt/sdb1/test
    sync
    for((i=0;i<170;i++))
    do
            dd if=/dev/zero of=/mnt/sdb1/test conv=notrunc bs=256k count=1
    seek=`expr $i \* 2`
    done
    umount /mnt/sdb1
    mount -t ext4 /dev/sdb1 /mnt/sdb1
    dd if=/dev/zero of=/mnt/sdb1/test conv=notrunc bs=256k count=1 seek=341
    umount /mnt/sdb1
    mount /dev/sdb1 /mnt/sdb1
    dd if=/dev/zero of=/mnt/sdb1/test conv=notrunc bs=256k count=1 seek=340
    sync
    
    The reason is that it forgot to mark dirty when splitting two extents in
    ext4_ext_convert_to_initialized(). Althrough ex has been updated in
    memory, it is not dirtied both in ext4_ext_convert_to_initialized() and
    ext4_ext_insert_extent(). The disk layout is corrupted. Then it will
    meet with a BUG_ON() when writting at the start of that extent again.
    
    Cc: "Theodore Ts'o" <ty...@mit.edu>
    Cc: Xiaoyun Mao <xiaoyun.ma...@aliyun-inc.com>
    Cc: Yingbin Wang <yingbin.wan...@aliyun-inc.com>
    Cc: Jia Wan <jia.w...@aliyun-inc.com>
    Signed-off-by: Zheng Liu <wenqing...@taobao.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 71aa3ac47d5116142b37fca35e8f8710be543f16
Author: Eric Dumazet <eric.duma...@gmail.com>
Date:   Sat May 22 20:37:44 2010 +0000

    net_sched: Fix qdisc_notify()
    
    commit 53b0f08042f04813cd1a7473dacd3edfacb28eb3 upstream.
    
    Ben Pfaff reported a kernel oops and provided a test program to
    reproduce it.
    
    https://kerneltrap.org/mailarchive/linux-netdev/2010/5/21/6277805
    
    tc_fill_qdisc() should not be called for builtin qdisc, or it
    dereference a NULL pointer to get device ifindex.
    
    Fix is to always use tc_qdisc_dump_ignore() before calling
    tc_fill_qdisc().
    
    Reported-by: Ben Pfaff <b...@nicira.com>
    Signed-off-by: Eric Dumazet <eric.duma...@gmail.com>
    Signed-off-by: David S. Miller <da...@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 1a9d80ecb7798b4cf75f7b21b68c906b5820fd29
Author: Luciano Coelho <coe...@ti.com>
Date:   Tue Jun 7 20:42:26 2011 +0300

    nl80211: fix overflow in ssid_len
    
    commit 57a27e1d6a3bb9ad4efeebd3a8c71156d6207536 upstream.
    
    When one of the SSID's length passed in a scan or sched_scan request
    is larger than 255, there will be an overflow in the u8 that is used
    to store the length before checking.  This causes the check to fail
    and we overrun the buffer when copying the SSID.
    
    Fix this by checking the nl80211 attribute length before copying it to
    the struct.
    
    This is a follow up for the previous commit
    208c72f4fe44fe09577e7975ba0e7fa0278f3d03, which didn't fix the problem
    entirely.
    
    Reported-by: Ido Yariv <i...@wizery.com>
    Signed-off-by: Luciano Coelho <coe...@ti.com>
    Signed-off-by: John W. Linville <linvi...@tuxdriver.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit b847425fb436aca533a769cc15b4fa11d95177ee
Author: Dan Rosenberg <drosenb...@vsecurity.com>
Date:   Fri Jun 24 08:38:05 2011 -0400

    Bluetooth: Prevent buffer overflow in l2cap config request
    
    commit 7ac28817536797fd40e9646452183606f9e17f71 upstream.
    
    A remote user can provide a small value for the command size field in
    the command header of an l2cap configuration request, resulting in an
    integer underflow when subtracting the size of the configuration request
    header.  This results in copying a very large amount of data via
    memcpy() and destroying the kernel heap.  Check for underflow.
    
    Signed-off-by: Dan Rosenberg <drosenb...@vsecurity.com>
    Signed-off-by: Gustavo F. Padovan <pado...@profusion.mobi>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 643e2dfa4ff8ea1fab0b6f1e1e06cdfbfc0a703a
Author: Hugh Dickins <hu...@google.com>
Date:   Mon May 9 17:44:42 2011 -0700

    vm: fix vm_pgoff wrap in upward expansion
    
    commit 42c36f63ac1366ab0ecc2d5717821362c259f517 upstream.
    
    Commit a626ca6a6564 ("vm: fix vm_pgoff wrap in stack expansion") fixed
    the case of an expanding mapping causing vm_pgoff wrapping when you had
    downward stack expansion.  But there was another case where IA64 and
    PA-RISC expand mappings: upward expansion.
    
    This fixes that case too.
    
    Signed-off-by: Hugh Dickins <hu...@google.com>
    Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit a2e441bdc3e86699fe95dcf3d54fc83c91d5cd9e
Author: Linus Torvalds <torva...@linux-foundation.org>
Date:   Wed Apr 13 08:07:28 2011 -0700

    vm: fix vm_pgoff wrap in stack expansion
    
    commit a626ca6a656450e9f4df91d0dda238fff23285f4 upstream.
    
    Commit 982134ba6261 ("mm: avoid wrapping vm_pgoff in mremap()") fixed
    the case of a expanding mapping causing vm_pgoff wrapping when you used
    mremap.  But there was another case where we expand mappings hiding in
    plain sight: the automatic stack expansion.
    
    This fixes that case too.
    
    This one also found by Robert Święcki, using his nasty system call
    fuzzer tool.  Good job.
    
    Reported-and-tested-by: Robert Święcki <rob...@swiecki.net>
    Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit a0d5fef19e47dd30bcec109c0aff7749b0261bab
Author: Filip Palian <s3...@pjwstk.edu.pl>
Date:   Thu May 12 19:32:46 2011 +0200

    Bluetooth: l2cap and rfcomm: fix 1 byte infoleak to userspace.
    
    commit 8d03e971cf403305217b8e62db3a2e5ad2d6263f upstream.
    
    Structures "l2cap_conninfo" and "rfcomm_conninfo" have one padding
    byte each. This byte in "cinfo" is copied to userspace uninitialized.
    
    Signed-off-by: Filip Palian <filip.pal...@pjwstk.edu.pl>
    Acked-by: Marcel Holtmann <mar...@holtmann.org>
    Signed-off-by: Gustavo F. Padovan <pado...@profusion.mobi>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 81774bc4e6b260f75caa69eee5765d00bc0b65cb
Author: Trond Myklebust <trond.mykleb...@netapp.com>
Date:   Tue May 31 15:15:34 2011 -0400

    NLM: Don't hang forever on NLM unlock requests
    
    commit 0b760113a3a155269a3fba93a409c640031dd68f upstream.
    
    If the NLM daemon is killed on the NFS server, we can currently end up
    hanging forever on an 'unlock' request, instead of aborting. Basically,
    if the rpcbind request fails, or the server keeps returning garbage, we
    really want to quit instead of retrying.
    
    Tested-by: Vasily Averin <v...@sw.ru>
    Signed-off-by: Trond Myklebust <trond.mykleb...@netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit fa0a1136645f7a31c789d46272af3b298390c4e0
Author: Eric Dumazet <eric.duma...@gmail.com>
Date:   Tue Nov 23 14:09:15 2010 +0000

    scm: lower SCM_MAX_FD
    
    commit bba14de98753cb6599a2dae0e520714b2153522d upstream.
    
    Lower SCM_MAX_FD from 255 to 253 so that allocations for scm_fp_list are
    halved. (commit f8d570a4 added two pointers in this structure)
    
    scm_fp_dup() should not copy whole structure (and trigger kmemcheck
    warnings), but only the used part. While we are at it, only allocate
    needed size.
    
    Signed-off-by: Eric Dumazet <eric.duma...@gmail.com>
    Signed-off-by: David S. Miller <da...@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 425f213726d314c0820a63cac1389d19a76df37f
Author: Manoj Iyer <manoj.i...@canonical.com>
Date:   Thu Oct 20 20:50:25 2011 +0200

    thinkpad-acpi: module autoloading for newer Lenovo ThinkPads.
    
    commit 9fbdaeb4f4dd14a0caa9fc35c496d5440c251a3a upstream.
    
    The newer Lenovo ThinkPads have HKEY HID of LEN0068 instead
    of IBM0068. Added new HID so that thinkpad_acpi module will
    auto load on these newer Lenovo ThinkPads.
    
    Acked-by: Henrique de Moraes Holschuh <h...@hmh.eng.br>
    Cc: sta...@vger.kernel.org
    Signed-off-by: Manoj Iyer <manoj.i...@canonical.com>
    Signed-off-by: Andy Lutomirski <l...@mit.edu>
    Signed-off-by: Matthew Garrett <m...@redhat.com>
    Signed-off-by: Bjørn Mork <bj...@mork.no>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit cf7c8acc322c8603f15b26bed42dcb3dd62acbb8
Author: Dan Carpenter <erro...@gmail.com>
Date:   Tue Mar 23 13:35:42 2010 -0700

    kcore: fix test for end of list
    
    commit 4fd2c20d964a8fb9861045f1022475c9d200d684 upstream.
    
    "m" is never NULL here.  We need a different test for the end of list
    condition.
    
    Signed-off-by: Dan Carpenter <erro...@gmail.com>
    Acked-by: KAMEZAWA Hiroyuki <kamezawa.hir...@jp.fujitsu.com>
    Acked-by: WANG Cong <xiyou.wangc...@gmail.com>
    Signed-off-by: Andrew Morton <a...@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
    Cc: Leonardo Chiquitto <leonardo.li...@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit f6a5ce266ac9a86619e3fea054b4b6f49734815d
Author: Florian Fainelli <flor...@openwrt.org>
Date:   Mon Oct 17 19:47:44 2011 +0200

    watchdog: mtx1-wdt: fix build failure
    
    Commit 72b6e8a847 (watchdog: mtx1-wdt: request gpio before using it) was
    backported from upstream. The patch is using a gpiolib call which is only
    available in kernel 2.6.34+. Fix build by using the "old" gpiolib API
    instead.
    
    Signed-off-by: Florian Fainelli <flor...@openwrt.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 948ed3ced0bab3d89267b7d02b6a4a2b25ce0133
Author: Greg Kroah-Hartman <gre...@suse.de>
Date:   Wed Nov 2 14:04:11 2011 -0700

    Revert "usb: musb: restore INDEX register in resume path"
    
    This reverts commit 5aa8a93b5d44724f1f63357b300eca208fb069d0.
    
    Turns out this breaks the build, and as such, really isn't needed for
    the 2.6.33-stable branch at all.
    
    Reported-by: Phil Carmody <ext-phil.2.carm...@nokia.com>
    Cc: Anand Gadiyar <gadi...@ti.com>
    Cc: Ajay Kumar Gupta <ajay.gu...@ti.com>
    Cc: Felipe Balbi <ba...@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 129deb72153e2ea369e479d5ff530c777239b561
Author: Florian Fainelli <flor...@openwrt.org>
Date:   Mon Oct 17 19:43:06 2011 +0200

    Revert "MIPS: MTX-1: Make au1000_eth probe all PHY
    
    Commit 34dce55d was not applicable in 2.6.33 and introduces a build 
breakage.
    Revert that commit since it is irrelevant for this kernel version.
    
    Acked-by: Ralf Baechle <r...@linux-mips.org>
    Signed-off-by: Florian Fainelli <flor...@openwrt.org>

commit 65d1d29f4cf001219f2b30c9d6de9aff43ba7757
Author: Jarek Poplawski <jark...@gmail.com>
Date:   Sat Sep 4 10:34:29 2010 +0000

    gro: Re-fix different skb headrooms
    
    commit 64289c8e6851bca0e589e064c9a5c9fbd6ae5dd4 upstream.
    
    The patch: "gro: fix different skb headrooms" in its part:
    "2) allocate a minimal skb for head of frag_list" is buggy. The copied
    skb has p->data set at the ip header at the moment, and skb_gro_offset
    is the length of ip + tcp headers. So, after the change the length of
    mac header is skipped. Later skb_set_mac_header() sets it into the
    NET_SKB_PAD area (if it's long enough) and ip header is misaligned at
    NET_SKB_PAD + NET_IP_ALIGN offset. There is no reason to assume the
    original skb was wrongly allocated, so let's copy it as it was.
    
    bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626
    fixes commit: 3d3be4333fdf6faa080947b331a6a19bce1a4f57
    
    Reported-by: Plamen Petrov <pvp-l...@fs.uni-ruse.bg>
    Signed-off-by: Jarek Poplawski <jark...@gmail.com>
    CC: Eric Dumazet <eric.duma...@gmail.com>
    Acked-by: Eric Dumazet <eric.duma...@gmail.com>
    Tested-by: Plamen Petrov <pvp-l...@fs.uni-ruse.bg>
    Signed-off-by: David S. Miller <da...@davemloft.net>
    Cc: Ben Hutchings <bhutchi...@solarflare.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 2c17af21c93dd588454eb2ed6148fab24af6d70c
Author: Eric Dumazet <eric.duma...@gmail.com>
Date:   Wed Sep 1 00:50:51 2010 +0000

    gro: fix different skb headrooms
    
    commit 3d3be4333fdf6faa080947b331a6a19bce1a4f57 upstream.
    
    Packets entering GRO might have different headrooms, even for a given
    flow (because of implementation details in drivers, like copybreak).
    We cant force drivers to deliver packets with a fixed headroom.
    
    1) fix skb_segment()
    
    skb_segment() makes the false assumption headrooms of fragments are same
    than the head. When CHECKSUM_PARTIAL is used, this can give csum_start
    errors, and crash later in skb_copy_and_csum_dev()
    
    2) allocate a minimal skb for head of frag_list
    
    skb_gro_receive() uses netdev_alloc_skb(headroom + skb_gro_offset(p)) to
    allocate a fresh skb. This adds NET_SKB_PAD to a padding already
    provided by netdevice, depending on various things, like copybreak.
    
    Use alloc_skb() to allocate an exact padding, to reduce cache line
    needs:
    NET_SKB_PAD + NET_IP_ALIGN
    
    bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626
    
    Many thanks to Plamen Petrov, testing many debugging patches !
    With help of Jarek Poplawski.
    
    Reported-by: Plamen Petrov <pvp-l...@fs.uni-ruse.bg>
    Signed-off-by: Eric Dumazet <eric.duma...@gmail.com>
    CC: Jarek Poplawski <jark...@gmail.com>
    Cc: Ben Hutchings <bhutchi...@solarflare.com>
    Signed-off-by: David S. Miller <da...@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit f84fa42e6d292e06e7462e286aacc92511201ddf
Author: Jarek Poplawski <jark...@gmail.com>
Date:   Wed Aug 11 02:02:10 2010 +0000

    net: Fix a memmove bug in dev_gro_receive()
    
    commit e5093aec2e6b60c3df2420057ffab9ed4a6d2792 upstream.
    
    >Xin Xiaohui wrote:
    > I looked into the code dev_gro_receive(), found the code here:
    > if the frags[0] is pulled to 0, then the page will be released,
    > and memmove() frags left.
    > Is that right? I'm not sure if memmove do right or not, but
    > frags[0].size is never set after memove at least. what I think
    > a simple way is not to do anything if we found frags[0].size == 0.
    > The patch is as followed.
    ...
    
    This version of the patch fixes the bug directly in memmove.
    
    Reported-by: "Xin, Xiaohui" <xiaohui....@intel.com>
    Signed-off-by: Jarek Poplawski <jark...@gmail.com>
    Signed-off-by: David S. Miller <da...@davemloft.net>
    Cc: Ben Hutchings <bhutchi...@solarflare.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 860652a77bfa9b221c9086f67f365b9947175a54
Author: Paul Fertser <fercer...@gmail.com>
Date:   Mon Oct 10 11:19:23 2011 +0400

    plat-mxc: iomux-v3.h: implicitly enable pull-up/down when that's desired
    
    commit 6571534b600b8ca1936ff5630b9e0947f21faf16 upstream.
    
    To configure pads during the initialisation a set of special constants
    is used, e.g.
    #define MX25_PAD_FEC_MDIO__FEC_MDIO IOMUX_PAD(0x3c4, 0x1cc, 0x10, 0, 0, 
PAD_CTL_HYS | PAD_CTL_PUS_22K_UP)
    
    The problem is that no pull-up/down is getting activated unless both
    PAD_CTL_PUE (pull-up enable) and PAD_CTL_PKE (pull/keeper module
    enable) set. This is clearly stated in the i.MX25 datasheet and is
    confirmed by the measurements on hardware. This leads to some rather
    hard to understand bugs such as misdetecting an absent ethernet PHY (a
    real bug i had), unstable data transfer etc. This might affect mx25,
    mx35, mx50, mx51 and mx53 SoCs.
    
    It's reasonable to expect that if the pullup value is specified, the
    intention was to have it actually active, so we implicitly add the
    needed bits.
    
    Signed-off-by: Paul Fertser <fercer...@gmail.com>
    Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 76faaf6dde04f5acd5be8161af3c07249cce6a70
Author: Mauro Carvalho Chehab <mche...@redhat.com>
Date:   Thu Jul 28 16:38:54 2011 -0300

    tuner_xc2028: Allow selection of the frequency adjustment code for XC3028
    
    commit 9bed77ee2fb46b74782d0d9d14b92e9d07f3df6e upstream.
    
    This device is not using the proper demod IF. Instead of using the
    IF macro, it is specifying a IF frequency. This doesn't work, as xc3028
    needs to load an specific SCODE for the tuner. In this case, there's
    no IF table for 5 MHz.
    
    Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 81e249443b97a8fec7e95030b8393853f1c0cf5b
Author: Ming Lei <tom.leim...@gmail.com>
Date:   Sat Jul 16 00:51:00 2011 -0300

    uvcvideo: Set alternate setting 0 on resume if the bus has been reset
    
    commit d59a7b1dbce8b972ec2dc9fcaaae0bfa23687423 upstream.
    
    If the bus has been reset on resume, set the alternate setting to 0.
    This should be the default value, but some devices crash or otherwise
    misbehave if they don't receive a SET_INTERFACE request before any other
    video control request.
    
    Microdia's 0c45:6437 camera has been found to require this change or it
    will stop sending video data after resume.
    
    uvc_video.c]
    
    Signed-off-by: Ming Lei <ming....@canonical.com>
    Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 6f076ec2242ea04dd8a7e063d5d4194b2214cdfc
Author: Jean Delvare <jdelv...@suse.de>
Date:   Fri Jul 8 11:04:38 2011 +0200

    carminefb: Fix module parameters permissions
    
    commit c84c14224bbca6ec60d5851fcc87be0e34df2f44 upstream.
    
    The third parameter of module_param is supposed to be an octal value.
    The missing leading "0" causes the following:
    
    $ ls -l /sys/module/carminefb/parameters/
    total 0
    -rw-rwxr-- 1 root root 4096 Jul  8 08:55 fb_displays
    -rw-rwxr-- 1 root root 4096 Jul  8 08:55 fb_mode
    -rw-rwxr-- 1 root root 4096 Jul  8 08:55 fb_mode_str
    
    After fixing the perm parameter, we get the expected:
    
    $ ls -l /sys/module/carminefb/parameters/
    total 0
    -r--r--r-- 1 root root 4096 Jul  8 08:56 fb_displays
    -r--r--r-- 1 root root 4096 Jul  8 08:56 fb_mode
    -r--r--r-- 1 root root 4096 Jul  8 08:56 fb_mode_str
    
    Signed-off-by: Jean Delvare <jdelv...@suse.de>
    Cc: Paul Mundt <let...@linux-sh.org>
    Cc: Sebastian Siewior <bige...@linutronix.de>
    Signed-off-by: Paul Mundt <let...@linux-sh.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 70eb017131ba8e9aa9f491955568a5ff89bda393
Author: Joerg Roedel <joerg.roe...@amd.com>
Date:   Tue Oct 11 17:41:32 2011 +0200

    iommu/amd: Fix wrong shift direction
    
    commit fcd0861db1cf4e6ed99f60a815b7b72c2ed36ea4 upstream.
    
    The shift direction was wrong because the function takes a
    page number and i is the address is the loop.
    
    Signed-off-by: Joerg Roedel <joerg.roe...@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit f5b218b84cc375589e8e7c83296497c66d1592c4
Author: Sebastian Ott <seb...@linux.vnet.ibm.com>
Date:   Sun Oct 30 15:16:52 2011 +0100

    ccwgroup: move attributes to attribute group
    
    commit dbdf1afcaaabe83dea15a3cb9b9013e73ae3b1ad upstream.
    
    Put sysfs attributes of ccwgroup devices in an attribute group to
    ensure that these attributes are actually present when userspace
    is notified via uevents.
    
    Signed-off-by: Sebastian Ott <seb...@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidef...@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 435c060e0a33919163b5757149de4be5cb211d5a
Author: Carsten Otte <co...@de.ibm.com>
Date:   Tue Oct 18 12:27:12 2011 +0200

    KVM: s390: check cpu_id prior to using it
    
    commit 4d47555a80495657161a7e71ec3014ff2021e450 upstream.
    
    We use the cpu id provided by userspace as array index here. Thus we
    clearly need to check it first. Ooops.
    
    Signed-off-by: Carsten Otte <co...@de.ibm.com>
    Signed-off-by: Christian Borntraeger <borntrae...@de.ibm.com>
    Signed-off-by: Marcelo Tosatti <mtosa...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit b4ee8df8fdacee45c32b2feba6af0ba9493f175d
Author: Axel Lin <axel....@gmail.com>
Date:   Thu Oct 13 17:17:06 2011 +0800

    ASoC: ak4535: fixup cache register table
    
    commit 7c04241acbdaf97f1448dcccd27ea0fcd1a57684 upstream.
    
    ak4535_reg should be 8bit, but cache table is defined as 16bit.
    
    Signed-off-by: Axel Lin <axel....@gmail.com>
    Signed-off-by: Mark Brown <broo...@opensource.wolfsonmicro.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit bc70aca09282519b8888df079a739398072a40c1
Author: Kuninori Morimoto <kuninori.morimoto...@renesas.com>
Date:   Thu Oct 13 02:03:54 2011 -0700

    ASoC: ak4642: fixup cache register table
    
    commit 19b115e523208a926813751aac8934cf3fc6085e upstream.
    
    ak4642 register was 8bit, but cache table was defined as 16bit.
    ak4642 doesn't work correctry without this patch.
    
    Signed-off-by: Kuninori Morimoto <kuninori.morimoto...@renesas.com>
    Signed-off-by: Mark Brown <broo...@opensource.wolfsonmicro.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit cdf76638ea4abceecb6710a5c802a09357bd089c
Author: J. Bruce Fields <bfie...@redhat.com>
Date:   Mon Oct 10 17:34:31 2011 -0400

    nfsd4: ignore WANT bits in open downgrade
    
    commit c30e92df30d7d5fe65262fbce5d1b7de675fe34e upstream.
    
    We don't use WANT bits yet--and sending them can probably trigger a
    BUG() further down.
    
    Signed-off-by: J. Bruce Fields <bfie...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 19ed00b06ba1773249c2e307151816cf79dd20b0
Author: J. Bruce Fields <bfie...@redhat.com>
Date:   Wed Aug 10 19:16:22 2011 -0400

    nfsd4: fix seqid_mutating_error
    
    commit 576163005de286bbd418fcb99cfd0971523a0c6d upstream.
    
    The set of errors here does *not* agree with the set of errors specified
    in the rfc!
    
    While we're there, turn this macros into a function, for the usual
    reasons, and move it to the one place where it's actually used.
    
    Signed-off-by: J. Bruce Fields <bfie...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 2de551b315bd9e2cde90479bba5de1105d8411bd
Author: Bernd Schubert <bernd.schub...@itwm.fraunhofer.de>
Date:   Mon Aug 8 17:38:08 2011 +0200

    nfsd4: Remove check for a 32-bit cookie in nfsd4_readdir()
    
    commit 832023bffb4b493f230be901f681020caf3ed1f8 upstream.
    
    Fan Yong <yong....@whamcloud.com> noticed setting
    FMODE_32bithash wouldn't work with nfsd v4, as
    nfsd4_readdir() checks for 32 bit cookies. However, according to RFC 3530
    cookies have a 64 bit type and cookies are also defined as u64 in
    'struct nfsd4_readdir'. So remove the test for >32-bit values.
    
    Signed-off-by: Bernd Schubert <bernd.schub...@itwm.fraunhofer.de>
    Signed-off-by: J. Bruce Fields <bfie...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 467b9b729d746c37c8597a37603b6de3c3ec53b0
Author: Steven Rostedt <srost...@redhat.com>
Date:   Fri Oct 14 10:44:25 2011 -0400

    tracing: Fix returning of duplicate data after EOF in trace_pipe_raw
    
    commit 436fc280261dcfce5af38f08b89287750dc91cd2 upstream.
    
    The trace_pipe_raw handler holds a cached page from the time the file
    is opened to the time it is closed. The cached page is used to handle
    the case of the user space buffer being smaller than what was read from
    the ring buffer. The left over buffer is held in the cache so that the
    next read will continue where the data left off.
    
    After EOF is returned (no more data in the buffer), the index of
    the cached page is set to zero. If a user app reads the page again
    after EOF, the check in the buffer will see that the cached page
    is less than page size and will return the cached page again. This
    will cause reading the trace_pipe_raw again after EOF to return
    duplicate data, making the output look like the time went backwards
    but instead data is just repeated.
    
    The fix is to not reset the index right after all data is read
    from the cache, but to reset it after all data is read and more
    data exists in the ring buffer.
    
    Reported-by: Jeremy Eder <je...@redhat.com>
    Signed-off-by: Steven Rostedt <rost...@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 33a7811d55f239dc688867920da9d49d806596d2
Author: hank <p...@redhat.com>
Date:   Tue Sep 20 13:53:39 2011 -0700

    time: Change jiffies_to_clock_t() argument type to unsigned long
    
    commit cbbc719fccdb8cbd87350a05c0d33167c9b79365 upstream.
    
    The parameter's origin type is long. On an i386 architecture, it can
    easily be larger than 0x80000000, causing this function to convert it
    to a sign-extended u64 type.
    
    Change the type to unsigned long so we get the correct result.
    
    Signed-off-by: hank <p...@redhat.com>
    Cc: John Stultz <john.stu...@linaro.org>
    [ build fix ]
    Signed-off-by: Andrew Morton <a...@linux-foundation.org>
    Signed-off-by: Thomas Gleixner <t...@linutronix.de>
    Signed-off-by: Ingo Molnar <mi...@elte.hu>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 37ab17c0fed4d31b2ff60f50eb834488f1ce1850
Author: Jiri Kosina <jkos...@suse.cz>
Date:   Wed Oct 26 13:10:39 2011 +1030

    kmod: prevent kmod_loop_msg overflow in __request_module()
    
    commit 37252db6aa576c34fd794a5a54fb32d7a8b3a07a upstream.
    
    Due to post-increment in condition of kmod_loop_msg in __request_module(),
    the system log can be spammed by much more than 5 instances of the 'runaway
    loop' message if the number of events triggering it makes the kmod_loop_msg
    to overflow.
    
    Fix that by making sure we never increment it past the threshold.
    
    Signed-off-by: Jiri Kosina <jkos...@suse.cz>
    Signed-off-by: Rusty Russell <ru...@rustcorp.com.au>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit da3dd7ab0e1ac9053a88deb3e8fe38c698a27eb3
Author: Milan Broz <mb...@redhat.com>
Date:   Mon Aug 22 15:51:34 2011 +0200

    kobj_uevent: Ignore if some listeners cannot handle message
    
    commit ebf4127cd677e9781b450e44dfaaa1cc595efcaa upstream.
    
    kobject_uevent() uses a multicast socket and should ignore
    if one of listeners cannot handle messages or nobody is
    listening at all.
    
    Easily reproducible when a process in system is cloned
    with CLONE_NEWNET flag.
    
    (See also 
http://article.gmane.org/gmane.linux.kernel.device-mapper.dm-crypt/5256)
    
    Signed-off-by: Milan Broz <mb...@redhat.com>
    Acked-by: Kay Sievers <kay.siev...@vrfy.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 4f58b434a141e82a11b3d9d64a495bf8e11c8562
Author: Josh Boyer <jwbo...@redhat.com>
Date:   Mon Oct 17 21:16:39 2011 -0400

    Update email address for stable patch submission
    
    commit 5fa224295f0e0358c8bc0e5390702338df889def upstream.
    
    The sta...@kernel.org email address has been replaced with the
    sta...@vger.kernel.org mailing list.  Change the stable kernel rules to
    reference the new list instead of the semi-defunct email alias.
    
    Signed-off-by: Josh Boyer <jwbo...@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit fc94e7993593e0594524c8bef4616d38b1be9206
Author: Jerry Huang <r66...@freescale.com>
Date:   Tue Oct 18 13:09:48 2011 +0800

    QE/FHCI: fixed the CONTROL bug
    
    commit 273d23574f9dacd9c63c80e7d63639a669aad441 upstream.
    
    For USB CONTROL transaction, when the data length is zero,
    the IN package is needed to finish this transaction in status stage.
    
    Signed-off-by: Jerry Huang <r66...@freescale.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 77447121fe52022de89494cc59631d9a5b58cdd8
Author: Peter Stuge <pe...@stuge.se>
Date:   Mon Oct 10 03:34:54 2011 +0200

    USB: ftdi_sio: Support TI/Luminary Micro Stellaris BD-ICDI Board
    
    commit 3687f641307eeff6f7fe31a88dc39db88e89238b upstream.
    
    Some Stellaris evaluation kits have the JTAG/SWD FTDI chip onboard,
    and some, like EK-LM3S9B90, come with a separate In-Circuit Debugger
    Interface Board. The ICDI board can also be used stand-alone, for
    other boards and chips than the kit it came with. The ICDI has both
    old style 20-pin JTAG connector and new style JTAG/SWD 10-pin 1.27mm
    pitch connector.
    
    Tested with EK-LM3S9B90, where the BD-ICDI board is included.
    
    Signed-off-by: Peter Stuge <pe...@stuge.se>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 01776c3d004bf5595bf27474c324b496a0b14652
Author: Hakan Kvist <hakan.kv...@sonyericsson.com>
Date:   Mon Oct 3 13:41:15 2011 +0200

    USB: ftdi_sio: add PID for Sony Ericsson Urban
    
    commit 74bdf22b5c3858b06af46f19d05c23e76c40a3bb upstream.
    
    Add PID 0xfc8a, 0xfc8b for device Sony Ericsson Urban
    
    Signed-off-by: Hakan Kvist <hakan.kv...@sonyericsson.com>
    Signed-off-by: Oskar Andero <oskar.and...@sonyericsson.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 4ca9c2db667698a8bcfd065a81711648a83a1e0c
Author: Eric Benoit <e...@ecks.ca>
Date:   Sat Sep 24 02:04:50 2011 -0400

    USB: pl2303: add id for SMART device
    
    commit 598f0b703506da841d3459dc0c48506be14d1778 upstream.
    
    Add vendor and product ID for the SMART USB to serial adapter. These
    were meant to be used with their SMART Board whiteboards, but can be
    re-purposed for other tasks. Tested and working (at at least 9600 bps).
    
    Signed-off-by: Eric Benoit <e...@ecks.ca>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit f7e1f927886e0f16d76490e5cab7fa906728e396
Author: Denis Pershin <d...@perchine.com>
Date:   Sun Sep 4 17:37:21 2011 +0700

    usb: cdc-acm: Owen SI-30 support
    
    commit 65e52f41fa944cef2e6d4222b8c54f46cc575214 upstream.
    
    here is the patch to support Owen SI-30 device.
    This is a pulse counter controller.
    http://www.owen.ru/en/catalog/93788515
    
    usb-drivers output:
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  4 Spd=12  MxCh= 0
    D:  Ver= 2.00 Cls=02(commc) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
    P:  Vendor=03eb ProdID=0030 Rev=01.01
    C:  #Ifs= 2 Cfg#= 1 Atr=c0 MxPwr=0mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=02 Prot=00 Driver=cdc_acm
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_acm
    
    This patch is installed on my home system which receives data from this
    controller connected to cold water counter.
    
    Signed-off-by: Denis Pershin <d...@perchine.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 03c47d73c14c9859e092a2c6346c278942876caa
Author: Serge Hallyn <serge.hal...@canonical.com>
Date:   Mon Sep 26 10:18:29 2011 -0500

    USB: pid_ns: ensure pid is not freed during kill_pid_info_as_uid
    
    commit aec01c5895051849ed842dc5b8794017a7751f28 upstream.
    
    Alan Stern points out that after spin_unlock(&ps->lock) there is no
    guarantee that ps->pid won't be freed.  Since kill_pid_info_as_uid() is
    called after the spin_unlock(), the pid passed to it must be pinned.
    
    Reported-by: Alan Stern <st...@rowland.harvard.edu>
    Signed-off-by: Serge Hallyn <serge.hal...@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit edd9f053b52d5882c9c37432939e03db8634ebc0
Author: Matthias Dellweg <2...@gmx.de>
Date:   Sun Sep 25 14:26:25 2011 +0200

    usb/core/devio.c: Check for printer class specific request
    
    commit 393cbb5151ecda9f9e14e3082d048dd27a1ff9f6 upstream.
    
    In the usb printer class specific request get_device_id the value of
    wIndex is (interface << 8 | altsetting) instead of just interface.
    This enables the detection of some printers with libusb.
    
    Acked-by: Alan Stern <st...@rowland.harvard.edu>
    Signed-off-by: Matthias Dellweg <2...@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit f28e8a981f6e7fe867866d00ba0468cb7a82bbd3
Author: Luben Tuikov <ltui...@yahoo.com>
Date:   Thu Nov 11 15:43:11 2010 -0800

    USB: storage: Use normalized sense when emulating autosense
    
    commit e16da02fcdf1c5e824432f88abf42623dafdf191 upstream.
    
    This patch solves two things:
    1) Enables autosense emulation code to correctly
    interpret descriptor format sense data, and
    2) Fixes a bug whereby the autosense emulation
    code would overwrite descriptor format sense data
    with SENSE KEY HARDWARE ERROR in fixed format, to
    incorrectly look like this:
    
    Oct 21 14:11:07 localhost kernel: sd 7:0:0:0: [sdc]  Sense Key : Recovered 
Error [current] [descriptor]
    Oct 21 14:11:07 localhost kernel: Descriptor sense data with sense 
descriptors (in hex):
    Oct 21 14:11:07 localhost kernel:        72 01 04 1d 00 00 00 0e 09 0c 00 
00 00 00 00 00
    Oct 21 14:11:07 localhost kernel:        00 4f 00 c2 00 50
    Oct 21 14:11:07 localhost kernel: sd 7:0:0:0: [sdc]  ASC=0x4 ASCQ=0x1d
    
    Signed-off-by: Luben Tuikov <ltui...@yahoo.com>
    Acked-by: Alan Stern <st...@rowland.harvard.edu>
    Acked-by: Matthew Dharm <mdharm-...@one-eyed-alien.net>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit d01f24effa7cc7e480ef08291fa3359179ddff0e
Author: Johannes Stezenbach <j...@sig21.net>
Date:   Thu Sep 8 15:39:15 2011 +0200

    usbmon vs. tcpdump: fix dropped packet count
    
    commit 236c448cb6e7f82096101e1ace4b77f8b38f82c8 upstream.
    
    Report the number of dropped packets instead of zero
    when using the binary usbmon interface with tcpdump.
    
    # tcpdump -i usbmon1 -w dump
    tcpdump: listening on usbmon1, link-type USB_LINUX_MMAPPED (USB with padded 
Linux header), capture size 65535 bytes
    ^C2155 packets captured
    2155 packets received by filter
    1019 packets dropped by kernel
    
    Signed-off-by: Johannes Stezenbach <j...@sig21.net>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 1ebf4837da8dc16b9979c21506ebc64788e38b7f
Author: Nelson Elhage <nelh...@nelhage.com>
Date:   Mon Oct 31 17:13:14 2011 -0700

    epoll: fix spurious lockdep warnings
    
    commit d8805e633e054c816c47cb6e727c81f156d9253d upstream.
    
    epoll can acquire recursively acquire ep->mtx on multiple "struct
    eventpoll"s at once in the case where one epoll fd is monitoring another
    epoll fd.  This is perfectly OK, since we're careful about the lock
    ordering, but it causes spurious lockdep warnings.  Annotate the recursion
    using mutex_lock_nested, and add a comment explaining the nesting rules
    for good measure.
    
    Recent versions of systemd are triggering this, and it can also be
    demonstrated with the following trivial test program:
    
    --------------------8<--------------------
    
    int main(void) {
       int e1, e2;
       struct epoll_event evt = {
           .events = EPOLLIN
       };
    
       e1 = epoll_create1(0);
       e2 = epoll_create1(0);
       epoll_ctl(e1, EPOLL_CTL_ADD, e2, &evt);
       return 0;
    }
    --------------------8<--------------------
    
    Reported-by: Paul Bolle <pebo...@tiscali.nl>
    Tested-by: Paul Bolle <pebo...@tiscali.nl>
    Signed-off-by: Nelson Elhage <nelh...@nelhage.com>
    Acked-by: Jason Baron <jba...@redhat.com>
    Cc: Dave Jones <da...@redhat.com>
    Cc: Davide Libenzi <davi...@xmailserver.org>
    Signed-off-by: Andrew Morton <a...@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gre...@suse.de>

commit 3b5307642a40cadf0198625198ff86ffe7167e2a
Author: Josh Stone <jist...@redhat.com>
Date:   Mon Oct 24 10:15:51 2011 -0700

    x86: Fix compilation bug in kprobes' twobyte_is_boostable
    
    commit 315eb8a2a1b7f335d40ceeeb11b9e067475eb881 upstream.
    
    When compiling an i386_defconfig kernel with gcc-4.6.1-9.fc15.i686, I
    noticed a warning about the asm operand for test_bit in kprobes'
    can_boost.  I discovered that this caused only the first long of
    twobyte_is_boostable[] to be output.
    
    Jakub filed and fixed gcc PR50571 to correct the warning and this output
    issue.  But to solve it for less current gcc, we can make kprobes'
    twobyte_is_boostable[] non-const, and it won't be optimized out.
    
    Before:
    
        CC      arch/x86/kernel/kprobes.o
      In file included from include/linux/bitops.h:22:0,
                       from include/linux/kernel.h:17,
                       from [...]/arch/x86/include/asm/percpu.h:44,
                       from [...]/arch/x86/include/asm/current.h:5,
                       from [...]/arch/x86/include/asm/processor.h:15,
                       from [...]/arch/x86/include/asm/atomic.h:6,
                       from include/linux/atomic.h:4,
                       from include/linux/mutex.h:18,
                       from include/linux/notifier.h:13,
                       from include/linux/kprobes.h:34,
                       from arch/x86/kernel/kprobes.c:43:
      [...]/arch/x86/include/asm/bitops.h: In function ‘can_boost.part.1’:
      [...]/arch/x86/include/asm/bitops.h:319:2: warning: use of memory input
            without lvalue in asm operand 1 is deprecated [enabled by default]
    
      $ objdump -rd arch/x86/kernel/kprobes.o | grep -A1 -w bt
           551: 0f a3 05 00 00 00 00    bt     %eax,0x0
                              554: R_386_32     .rodata.cst4
    

diff --git a/Documentation/stable_kernel_rules.txt 
b/Documentation/stable_kernel_rules.txt
index 5effa5b..2e073d5 100644
--- a/Documentation/stable_kernel_rules.txt
+++ b/Documentation/stable_kernel_rules.txt
@@ -25,10 +25,10 @@ Rules on what kind of patches are accepted, and which ones 
are not, into the
 Procedure for submitting patches to the -stable tree:
 
  - Send the patch, after verifying that it follows the above rules, to
-   sta...@kernel.org.
+   sta...@vger.kernel.org.
  - To have the patch automatically included in the stable tree, add the
    the tag
-     Cc: sta...@kernel.org
+     Cc: sta...@vger.kernel.org
    in the sign-off area. Once the patch is merged it will be applied to
    the stable tree without anything else needing to be done by the author
    or subsystem maintainer.
@@ -36,10 +36,10 @@ Procedure for submitting patches to the -stable tree:
    cherry-picked than this can be specified in the following format in
    the sign-off area:
 
-     Cc: <sta...@kernel.org> # .32.x: a1f84a3: sched: Check for idle
-     Cc: <sta...@kernel.org> # .32.x: 1b9508f: sched: Rate-limit newidle
-     Cc: <sta...@kernel.org> # .32.x: fd21073: sched: Fix affinity logic
-     Cc: <sta...@kernel.org> # .32.x
+     Cc: <sta...@vger.kernel.org> # .32.x: a1f84a3: sched: Check for idle
+     Cc: <sta...@vger.kernel.org> # .32.x: 1b9508f: sched: Rate-limit newidle
+     Cc: <sta...@vger.kernel.org> # .32.x: fd21073: sched: Fix affinity logic
+     Cc: <sta...@vger.kernel.org> # .32.x
     Signed-off-by: Ingo Molnar <mi...@elte.hu>
 
    The tag sequence has the meaning of:
diff --git a/Makefile b/Makefile
index 7c40be6..2349341 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 33
-EXTRAVERSION = .19
+EXTRAVERSION = .20
 NAME = Man-Eating Seals of Antiquity
 
 # *DOCUMENTATION*
diff --git a/arch/arm/mach-davinci/board-da850-evm.c 
b/arch/arm/mach-davinci/board-da850-evm.c
index 07de8db..3ecd94b 100644
--- a/arch/arm/mach-davinci/board-da850-evm.c
+++ b/arch/arm/mach-davinci/board-da850-evm.c
@@ -44,6 +44,32 @@
 
 #define DA850_MII_MDIO_CLKEN_PIN       GPIO_TO_PIN(2, 6)
 
+#ifdef CONFIG_MTD
+static void da850_evm_m25p80_notify_add(struct mtd_info *mtd)
+{
+       char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
+       size_t retlen;
+
+       if (!strcmp(mtd->name, "MAC-Address")) {
+               mtd->read(mtd, 0, ETH_ALEN, &retlen, mac_addr);
+               if (retlen == ETH_ALEN)
+                       pr_info("Read MAC addr from SPI Flash: %pM\n",
+                               mac_addr);
+       }
+}
+
+static struct mtd_notifier da850evm_spi_notifier = {
+       .add    = da850_evm_m25p80_notify_add,
+};
+
+static void da850_evm_setup_mac_addr(void)
+{
+       register_mtd_user(&da850evm_spi_notifier);
+}
+#else
+static void da850_evm_setup_mac_addr(void) { }
+#endif
+
 static struct mtd_partition da850_evm_norflash_partition[] = {
        {
                .name           = "NOR filesystem",
@@ -696,6 +722,8 @@ static __init void da850_evm_init(void)
        if (ret)
                pr_warning("da850_evm_init: cpuidle registration failed: %d\n",
                                ret);
+
+       da850_evm_setup_mac_addr();
 }
 
 #ifdef CONFIG_SERIAL_8250_CONSOLE
diff --git a/arch/arm/plat-mxc/include/mach/iomux-v3.h 
b/arch/arm/plat-mxc/include/mach/iomux-v3.h
index 1deda01..657c252 100644
--- a/arch/arm/plat-mxc/include/mach/iomux-v3.h
+++ b/arch/arm/plat-mxc/include/mach/iomux-v3.h
@@ -73,11 +73,11 @@ struct pad_desc {
 #define PAD_CTL_HYS                    (1 << 8)
 
 #define PAD_CTL_PKE                    (1 << 7)
-#define PAD_CTL_PUE                    (1 << 6)
-#define PAD_CTL_PUS_100K_DOWN          (0 << 4)
-#define PAD_CTL_PUS_47K_UP             (1 << 4)
-#define PAD_CTL_PUS_100K_UP            (2 << 4)
-#define PAD_CTL_PUS_22K_UP             (3 << 4)
+#define PAD_CTL_PUE                    (1 << 6 | PAD_CTL_PKE)
+#define PAD_CTL_PUS_100K_DOWN          (0 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_47K_UP             (1 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_100K_UP            (2 << 4 | PAD_CTL_PUE)
+#define PAD_CTL_PUS_22K_UP             (3 << 4 | PAD_CTL_PUE)
 
 #define PAD_CTL_ODE                    (1 << 3)
 
diff --git a/arch/mips/alchemy/mtx-1/platform.c 
b/arch/mips/alchemy/mtx-1/platform.c
index 956f946..e30e42a 100644
--- a/arch/mips/alchemy/mtx-1/platform.c
+++ b/arch/mips/alchemy/mtx-1/platform.c
@@ -28,8 +28,6 @@
 #include <linux/mtd/physmap.h>
 #include <mtd/mtd-abi.h>
 
-#include <asm/mach-au1x00/au1xxx_eth.h>
-
 static struct gpio_keys_button mtx1_gpio_button[] = {
        {
                .gpio = 207,
@@ -142,17 +140,10 @@ static struct __initdata platform_device * mtx1_devs[] = {
        &mtx1_mtd,
 };
 
-static struct au1000_eth_platform_data mtx1_au1000_eth0_pdata = {
-       .phy_search_highest_addr        = 1,
-       .phy1_search_mac0               = 1,
-};
-
 static int __init mtx1_register_devices(void)
 {
        int rc;
 
-       au1xxx_override_eth_cfg(0, &mtx1_au1000_eth0_pdata);
-
        rc = gpio_request(mtx1_gpio_button[0].gpio,
                                        mtx1_gpio_button[0].desc);
        if (rc < 0) {
diff --git a/arch/powerpc/kernel/pci_of_scan.c 
b/arch/powerpc/kernel/pci_of_scan.c
index 4aa1740..5c3c8c9 100644
--- a/arch/powerpc/kernel/pci_of_scan.c
+++ b/arch/powerpc/kernel/pci_of_scan.c
@@ -310,6 +310,8 @@ static void __devinit __of_scan_bus(struct device_node 
*node,
        /* Scan direct children */
        for_each_child_of_node(node, child) {
                pr_debug("  * %s\n", child->full_name);
+               if (!of_device_is_available(child))
+                       continue;
                reg = of_get_property(child, "reg", &reglen);
                if (reg == NULL || reglen < 20)
                        continue;
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index e06d18c..60d78e7 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -309,11 +309,17 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu)
 struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm,
                                      unsigned int id)
 {
-       struct kvm_vcpu *vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
-       int rc = -ENOMEM;
+       struct kvm_vcpu *vcpu;
+       int rc = -EINVAL;
+
+       if (id >= KVM_MAX_VCPUS)
+               goto out;
+
+       rc = -ENOMEM;
 
+       vcpu = kzalloc(sizeof(struct kvm_vcpu), GFP_KERNEL);
        if (!vcpu)
-               goto out_nomem;
+               goto out;
 
        vcpu->arch.sie_block = (struct kvm_s390_sie_block *)
                                        get_zeroed_page(GFP_KERNEL);
@@ -348,7 +354,7 @@ out_free_sie_block:
        free_page((unsigned long)(vcpu->arch.sie_block));
 out_free_cpu:
        kfree(vcpu);
-out_nomem:
+out:
        return ERR_PTR(rc);
 }
 
diff --git a/arch/sparc/include/asm/spinlock_32.h 
b/arch/sparc/include/asm/spinlock_32.h
index 7f9b9db..dc1355f 100644
--- a/arch/sparc/include/asm/spinlock_32.h
+++ b/arch/sparc/include/asm/spinlock_32.h
@@ -130,6 +130,15 @@ static inline void arch_write_lock(arch_rwlock_t *rw)
        *(volatile __u32 *)&lp->lock = ~0U;
 }
 
+static void inline arch_write_unlock(arch_rwlock_t *lock)
+{
+       __asm__ __volatile__(
+"      st              %%g0, [%0]"
+       : /* no outputs */
+       : "r" (lock)
+       : "memory");
+}
+
 static inline int arch_write_trylock(arch_rwlock_t *rw)
 {
        unsigned int val;
@@ -174,8 +183,6 @@ static inline int __arch_read_trylock(arch_rwlock_t *rw)
        res; \
 })
 
-#define arch_write_unlock(rw)  do { (rw)->lock = 0; } while(0)
-
 #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock)
 #define arch_read_lock_flags(rw, flags)   arch_read_lock(rw)
 #define arch_write_lock_flags(rw, flags)  arch_write_lock(rw)
diff --git a/arch/sparc/include/asm/spinlock_64.h 
b/arch/sparc/include/asm/spinlock_64.h
index 073936a..9689176 100644
--- a/arch/sparc/include/asm/spinlock_64.h
+++ b/arch/sparc/include/asm/spinlock_64.h
@@ -210,14 +210,8 @@ static int inline arch_write_trylock(arch_rwlock_t *lock)
        return result;
 }
 
-#define arch_read_lock(p)      arch_read_lock(p)
 #define arch_read_lock_flags(p, f) arch_read_lock(p)
-#define arch_read_trylock(p)   arch_read_trylock(p)
-#define arch_read_unlock(p)    arch_read_unlock(p)
-#define arch_write_lock(p)     arch_write_lock(p)
 #define arch_write_lock_flags(p, f) arch_write_lock(p)
-#define arch_write_unlock(p)   arch_write_unlock(p)
-#define arch_write_trylock(p)  arch_write_trylock(p)
 
 #define arch_read_can_lock(rw)         (!((rw)->lock & 0x80000000UL))
 #define arch_write_can_lock(rw)        (!(rw)->lock)
diff --git a/arch/sparc/kernel/pcic.c b/arch/sparc/kernel/pcic.c
index 4e2724e..c6ed432 100644
--- a/arch/sparc/kernel/pcic.c
+++ b/arch/sparc/kernel/pcic.c
@@ -349,8 +349,8 @@ int __init pcic_probe(void)
        strcpy(pbm->prom_name, namebuf);
 
        {
-               extern volatile int t_nmi[1];
-               extern int pcic_nmi_trap_patch[1];
+               extern volatile int t_nmi[4];
+               extern int pcic_nmi_trap_patch[4];
 
                t_nmi[0] = pcic_nmi_trap_patch[0];
                t_nmi[1] = pcic_nmi_trap_patch[1];
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 7eb1dd7..79d59af 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -767,6 +767,29 @@ extern unsigned long               
boot_option_idle_override;
 extern unsigned long           idle_halt;
 extern unsigned long           idle_nomwait;
 
+/*
+ * on systems with caches, caches must be flashed as the absolute
+ * last instruction before going into a suspended halt.  Otherwise,
+ * dirty data can linger in the cache and become stale on resume,
+ * leading to strange errors.
+ *
+ * perform a variety of operations to guarantee that the compiler
+ * will not reorder instructions.  wbinvd itself is serializing
+ * so the processor will not reorder.
+ *
+ * Systems without cache can just go into halt.
+ */
+static inline void wbinvd_halt(void)
+{
+       mb();
+       /* check for clflush to determine if wbinvd is legal */
+       if (cpu_has_clflush)
+               asm volatile("cli; wbinvd; 1: hlt; jmp 1b" : : : "memory");
+       else
+               while (1)
+                       halt();
+}
+
 extern void enable_sep_cpu(void);
 extern int sysenter_setup(void);
 
diff --git a/arch/x86/kernel/amd_iommu.c b/arch/x86/kernel/amd_iommu.c
index e803550..0773533 100644
--- a/arch/x86/kernel/amd_iommu.c
+++ b/arch/x86/kernel/amd_iommu.c
@@ -1066,7 +1066,7 @@ static int alloc_new_range(struct dma_ops_domain *dma_dom,
                if (!pte || !IOMMU_PTE_PRESENT(*pte))
                        continue;
 
-               dma_ops_reserve_addresses(dma_dom, i << PAGE_SHIFT, 1);
+               dma_ops_reserve_addresses(dma_dom, i >> PAGE_SHIFT, 1);
        }
 
        update_domain(&dma_dom->domain);
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
index 5b8c750..f672f97 100644
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -74,8 +74,10 @@ DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
        /*
         * Undefined/reserved opcodes, conditional jump, Opcode Extension
         * Groups, and some special opcodes can not boost.
+        * This is non-const to keep gcc from statically optimizing it out, as
+        * variable_test_bit makes gcc think only *(unsigned long*) is used.
         */
-static const u32 twobyte_is_boostable[256 / 32] = {
+static u32 twobyte_is_boostable[256 / 32] = {
        /*      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f          */
        /*      ----------------------------------------------          */
        W(0x00, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0) | /* 00 */
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index ea1ab22..f9bdcdb 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -1329,94 +1329,11 @@ void play_dead_common(void)
        local_irq_disable();
 }
 
-#define MWAIT_SUBSTATE_MASK            0xf
-#define MWAIT_SUBSTATE_SIZE            4
-
-#define CPUID_MWAIT_LEAF               5
-#define CPUID5_ECX_EXTENSIONS_SUPPORTED 0x1
-
-/*
- * We need to flush the caches before going to sleep, lest we have
- * dirty data in our caches when we come back up.
- */
-static inline void mwait_play_dead(void)
-{
-       unsigned int eax, ebx, ecx, edx;
-       unsigned int highest_cstate = 0;
-       unsigned int highest_subcstate = 0;
-       int i;
-       void *mwait_ptr;
-
-       if (!cpu_has(&current_cpu_data, X86_FEATURE_MWAIT))
-               return;
-       if (!cpu_has(&current_cpu_data, X86_FEATURE_CLFLSH))
-               return;
-       if (current_cpu_data.cpuid_level < CPUID_MWAIT_LEAF)
-               return;
-
-       eax = CPUID_MWAIT_LEAF;
-       ecx = 0;
-       native_cpuid(&eax, &ebx, &ecx, &edx);
-
-       /*
-        * eax will be 0 if EDX enumeration is not valid.
-        * Initialized below to cstate, sub_cstate value when EDX is valid.
-        */
-       if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED)) {
-               eax = 0;
-       } else {
-               edx >>= MWAIT_SUBSTATE_SIZE;
-               for (i = 0; i < 7 && edx; i++, edx >>= MWAIT_SUBSTATE_SIZE) {
-                       if (edx & MWAIT_SUBSTATE_MASK) {
-                               highest_cstate = i;
-                               highest_subcstate = edx & MWAIT_SUBSTATE_MASK;
-                       }
-               }
-               eax = (highest_cstate << MWAIT_SUBSTATE_SIZE) |
-                       (highest_subcstate - 1);
-       }
-
-       /*
-        * This should be a memory location in a cache line which is
-        * unlikely to be touched by other processors.  The actual
-        * content is immaterial as it is not actually modified in any way.
-        */
-       mwait_ptr = &current_thread_info()->flags;
-
-       wbinvd();
-
-       while (1) {
-               /*
-                * The CLFLUSH is a workaround for erratum AAI65 for
-                * the Xeon 7400 series.  It's not clear it is actually
-                * needed, but it should be harmless in either case.
-                * The WBINVD is insufficient due to the spurious-wakeup
-                * case where we return around the loop.
-                */
-               clflush(mwait_ptr);
-               __monitor(mwait_ptr, 0, 0);
-               mb();
-               __mwait(eax, 0);
-       }
-}
-
-static inline void hlt_play_dead(void)
-{
-       if (current_cpu_data.x86 >= 4)
-               wbinvd();
-
-       while (1) {
-               native_halt();
-       }
-}
-
 void native_play_dead(void)
 {
        play_dead_common();
        tboot_shutdown(TB_SHUTDOWN_WFS);
-
-       mwait_play_dead();      /* Only returns on failure */
-       hlt_play_dead();
+       wbinvd_halt();
 }
 
 #else /* ... !CONFIG_HOTPLUG_CPU */
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index ad5df67..6c6e733 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -30,6 +30,7 @@
 #include <xen/page.h>
 #include <xen/events.h>
 
+#include <xen/hvc-console.h>
 #include "xen-ops.h"
 #include "mmu.h"
 
@@ -180,6 +181,15 @@ static void __init xen_smp_prepare_cpus(unsigned int 
max_cpus)
 {
        unsigned cpu;
 
+       if (skip_ioapic_setup) {
+               char *m = (max_cpus == 0) ?
+                       "The nosmp parameter is incompatible with Xen; " \
+                       "use Xen dom0_max_vcpus=1 parameter" :
+                       "The noapic parameter is incompatible with Xen";
+
+               xen_raw_printk(m);
+               panic(m);
+       }
        xen_init_lock_cpu(0);
 
        smp_store_cpu_info(0);
diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S
index 88e15de..9a95a9c 100644
--- a/arch/x86/xen/xen-asm_32.S
+++ b/arch/x86/xen/xen-asm_32.S
@@ -113,11 +113,13 @@ xen_iret_start_crit:
 
        /*
         * If there's something pending, mask events again so we can
-        * jump back into xen_hypervisor_callback
+        * jump back into xen_hypervisor_callback. Otherwise do not
+        * touch XEN_vcpu_info_mask.
         */
-       sete XEN_vcpu_info_mask(%eax)
+       jne 1f
+       movb $1, XEN_vcpu_info_mask(%eax)
 
-       popl %eax
+1:     popl %eax
 
        /*
         * From this point on the registers are restored and the stack
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 198224b..fd38ea9 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -2769,6 +2769,18 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev)
                                DMI_MATCH(DMI_BOARD_NAME, "MS-7376"),
                        },
                },
+               /*
+                * All BIOS versions for the Asus M3A support 64bit DMA.
+                * (all release versions from 0301 to 1206 were tested)
+                */
+               {
+                       .ident = "ASUS M3A",
+                       .matches = {
+                               DMI_MATCH(DMI_BOARD_VENDOR,
+                                         "ASUSTeK Computer INC."),
+                               DMI_MATCH(DMI_BOARD_NAME, "M3A"),
+                       },
+               },
                { }
        };
        const struct dmi_system_id *match;
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 05a31e5..ed39cb159 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -890,7 +890,7 @@ static void blkfront_connect(struct blkfront_info *info)
        }
 
        err = xenbus_gather(XBT_NIL, info->xbdev->otherend,
-                           "feature-barrier", "%lu", &info->feature_barrier,
+                           "feature-barrier", "%d", &info->feature_barrier,
                            NULL);
        if (err)
                info->feature_barrier = 0;
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
index 416d342..8894255 100644
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -162,8 +162,10 @@ static void hvc_console_print(struct console *co, const 
char *b,
                } else {
                        r = cons_ops[index]->put_chars(vtermnos[index], c, i);
                        if (r <= 0) {
-                               /* throw away chars on error */
-                               i = 0;
+                               /* throw away characters on error
+                                * but spin in case of -EAGAIN */
+                               if (r != -EAGAIN)
+                                       i = 0;
                        } else if (r > 0) {
                                i -= r;
                                if (i > 0)
@@ -442,7 +444,7 @@ static int hvc_push(struct hvc_struct *hp)
 
        n = hp->ops->put_chars(hp->vtermno, hp->outbuf, hp->n_outbuf);
        if (n <= 0) {
-               if (n == 0) {
+               if (n == 0 || n == -EAGAIN) {
                        hp->do_wakeup = 1;
                        return 0;
                }
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c
index 4b6c3ea..6fc2332 100644
--- a/drivers/char/tpm/tpm.c
+++ b/drivers/char/tpm/tpm.c
@@ -374,6 +374,9 @@ static ssize_t tpm_transmit(struct tpm_chip *chip, const 
char *buf,
        u32 count, ordinal;
        unsigned long stop;
 
+       if (bufsiz > TPM_BUFSIZE)
+               bufsiz = TPM_BUFSIZE;
+
        count = be32_to_cpu(*((__be32 *) (buf + 2)));
        ordinal = be32_to_cpu(*((__be32 *) (buf + 6)));
        if (count == 0)
@@ -1027,6 +1030,7 @@ ssize_t tpm_read(struct file *file, char __user *buf,
 {
        struct tpm_chip *chip = file->private_data;
        ssize_t ret_size;
+       int rc;
 
        del_singleshot_timer_sync(&chip->user_read_timer);
        flush_scheduled_work();
@@ -1037,8 +1041,11 @@ ssize_t tpm_read(struct file *file, char __user *buf,
                        ret_size = size;
 
                mutex_lock(&chip->buffer_mutex);
-               if (copy_to_user(buf, chip->data_buffer, ret_size))
+               rc = copy_to_user(buf, chip->data_buffer, ret_size);
+               memset(chip->data_buffer, 0, ret_size);
+               if (rc)
                        ret_size = -EFAULT;
+
                mutex_unlock(&chip->buffer_mutex);
        }
 
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 5ec8a79..e9a160d 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -389,6 +389,9 @@
 #define USB_VENDOR_ID_SAMSUNG          0x0419
 #define USB_DEVICE_ID_SAMSUNG_IR_REMOTE        0x0001
 
+#define USB_VENDOR_ID_SIGMA_MICRO      0x1c4f
+#define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD     0x0002
+
 #define USB_VENDOR_ID_SONY                     0x054c
 #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE      0x024b
 #define USB_DEVICE_ID_SONY_PS3_CONTROLLER      0x0268
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 38773dc..24d8704 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -66,6 +66,7 @@ static const struct hid_blacklist {
        { USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, 
HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, 
HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
 
+       { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, 
HID_QUIRK_NO_INIT_REPORTS },
        { 0, 0 }
 };
 
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 0dcaba9..a679d01 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -1273,7 +1273,8 @@ static void w83627ehf_device_remove_files(struct device 
*dev)
 }
 
 /* Get the monitoring functions started */
-static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data)
+static inline void __devinit w83627ehf_init_device(struct w83627ehf_data *data,
+                                                  enum kinds kind)
 {
        int i;
        u8 tmp, diode;
@@ -1302,10 +1303,16 @@ static inline void __devinit 
w83627ehf_init_device(struct w83627ehf_data *data)
                w83627ehf_write_value(data, W83627EHF_REG_VBAT, tmp | 0x01);
 
        /* Get thermal sensor types */
-       diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
+       switch (kind) {
+       case w83627ehf:
+               diode = w83627ehf_read_value(data, W83627EHF_REG_DIODE);
+               break;
+       default:
+               diode = 0x70;
+       }
        for (i = 0; i < 3; i++) {
                if ((tmp & (0x02 << i)))
-                       data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 2;
+                       data->temp_type[i] = (diode & (0x10 << i)) ? 1 : 3;
                else
                        data->temp_type[i] = 4; /* thermistor */
        }
@@ -1353,7 +1360,7 @@ static int __devinit w83627ehf_probe(struct 
platform_device *pdev)
        }
 
        /* Initialize the chip */
-       w83627ehf_init_device(data);
+       w83627ehf_init_device(data, sio_data->kind);
 
        data->vrm = vid_which_vrm();
        superio_enter(sio_data->sioreg);
diff --git a/drivers/md/linear.h b/drivers/md/linear.h
index 0ce29b6..2f2da05 100644
--- a/drivers/md/linear.h
+++ b/drivers/md/linear.h
@@ -10,9 +10,9 @@ typedef struct dev_info dev_info_t;
 
 struct linear_private_data
 {
+       struct rcu_head         rcu;
        sector_t                array_sectors;
        dev_info_t              disks[0];
-       struct rcu_head         rcu;
 };
 
 
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 4610aa3..803f101 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -980,8 +980,11 @@ static int super_90_load(mdk_rdev_t *rdev, mdk_rdev_t 
*refdev, int minor_version
                        ret = 0;
        }
        rdev->sectors = rdev->sb_start;
+       /* Limit to 4TB as metadata cannot record more than that */
+       if (rdev->sectors >= (2ULL << 32))
+               rdev->sectors = (2ULL << 32) - 2;
 
-       if (rdev->sectors < sb->size * 2 && sb->level > 1)
+       if (rdev->sectors < ((sector_t)sb->size) * 2 && sb->level >= 1)
                /* "this cannot possibly happen" ... */
                ret = -EINVAL;
 
@@ -1016,7 +1019,7 @@ static int super_90_validate(mddev_t *mddev, mdk_rdev_t 
*rdev)
                mddev->clevel[0] = 0;
                mddev->layout = sb->layout;
                mddev->raid_disks = sb->raid_disks;
-               mddev->dev_sectors = sb->size * 2;
+               mddev->dev_sectors = ((sector_t)sb->size) * 2;
                mddev->events = ev1;
                mddev->bitmap_info.offset = 0;
                mddev->bitmap_info.default_offset = MD_SB_BYTES >> 9;
@@ -1255,6 +1258,11 @@ super_90_rdev_size_change(mdk_rdev_t *rdev, sector_t 
num_sectors)
        rdev->sb_start = calc_dev_sboffset(rdev->bdev);
        if (!num_sectors || num_sectors > rdev->sb_start)
                num_sectors = rdev->sb_start;
+       /* Limit to 4TB as metadata cannot record more than that.
+        * 4TB == 2^32 KB, or 2*2^32 sectors.
+        */
+       if (num_sectors >= (2ULL << 32))
+               num_sectors = (2ULL << 32) - 2;
        md_super_write(rdev->mddev, rdev, rdev->sb_start, rdev->sb_size,
                       rdev->sb_page);
        md_super_wait(rdev->mddev);
diff --git a/drivers/media/video/cx23885/cx23885-dvb.c 
b/drivers/media/video/cx23885/cx23885-dvb.c
index e45d2df..a4f03e8 100644
--- a/drivers/media/video/cx23885/cx23885-dvb.c
+++ b/drivers/media/video/cx23885/cx23885-dvb.c
@@ -741,7 +741,7 @@ static int dvb_register(struct cx23885_tsport *port)
                        static struct xc2028_ctrl ctl = {
                                .fname   = XC3028L_DEFAULT_FIRMWARE,
                                .max_len = 64,
-                               .demod   = 5000,
+                               .demod   = XC3028_FE_DIBCOM52,
                                /* This is true for all demods with
                                        v36 firmware? */
                                .type    = XC2028_D2633,
diff --git a/drivers/media/video/uvc/uvc_driver.c 
b/drivers/media/video/uvc/uvc_driver.c
index 86699b1..860e823 100644
--- a/drivers/media/video/uvc/uvc_driver.c
+++ b/drivers/media/video/uvc/uvc_driver.c
@@ -1891,7 +1891,7 @@ static int __uvc_resume(struct usb_interface *intf, int 
reset)
 
        list_for_each_entry(stream, &dev->streams, list) {
                if (stream->intf == intf)
-                       return uvc_video_resume(stream);
+                       return uvc_video_resume(stream, reset);
        }
 
        uvc_trace(UVC_TRACE_SUSPEND, "Resume: video streaming USB interface "
diff --git a/drivers/media/video/uvc/uvc_video.c 
b/drivers/media/video/uvc/uvc_video.c
index 253eed8..a463b48 100644
--- a/drivers/media/video/uvc/uvc_video.c
+++ b/drivers/media/video/uvc/uvc_video.c
@@ -1045,10 +1045,18 @@ int uvc_video_suspend(struct uvc_streaming *stream)
  * buffers, making sure userspace applications are notified of the problem
  * instead of waiting forever.
  */
-int uvc_video_resume(struct uvc_streaming *stream)
+int uvc_video_resume(struct uvc_streaming *stream, int reset)
 {
        int ret;
 
+       /* If the bus has been reset on resume, set the alternate setting to 0.
+        * This should be the default value, but some devices crash or otherwise
+        * misbehave if they don't receive a SET_INTERFACE request before any
+        * other video control request.
+        */
+       if (reset)
+               usb_set_interface(stream->dev->udev, stream->intfnum, 0);
+
        stream->frozen = 0;
 
        ret = uvc_commit_video(stream, &stream->ctrl);
diff --git a/drivers/media/video/uvc/uvcvideo.h 
b/drivers/media/video/uvc/uvcvideo.h
index b6f6f38..f5925f6 100644
--- a/drivers/media/video/uvc/uvcvideo.h
+++ b/drivers/media/video/uvc/uvcvideo.h
@@ -604,7 +604,7 @@ extern const struct v4l2_file_operations uvc_fops;
 /* Video */
 extern int uvc_video_init(struct uvc_streaming *stream);
 extern int uvc_video_suspend(struct uvc_streaming *stream);
-extern int uvc_video_resume(struct uvc_streaming *stream);
+extern int uvc_video_resume(struct uvc_streaming *stream, int reset);
 extern int uvc_video_enable(struct uvc_streaming *stream, int enable);
 extern int uvc_probe_video(struct uvc_streaming *stream,
                struct uvc_streaming_control *probe);
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c
index 4332b3a..cd43fbb 100644
--- a/drivers/net/cnic.c
+++ b/drivers/net/cnic.c
@@ -4520,7 +4520,7 @@ static int cnic_netdev_event(struct notifier_block *this, 
unsigned long event,
 
        dev = cnic_from_netdev(netdev);
 
-       if (!dev && (event == NETDEV_REGISTER || event == NETDEV_UP)) {
+       if (!dev && (event == NETDEV_REGISTER || netif_running(netdev))) {
                /* Check for the hot-plug device */
                dev = is_cnic_dev(netdev);
                if (dev) {
@@ -4536,7 +4536,7 @@ static int cnic_netdev_event(struct notifier_block *this, 
unsigned long event,
                else if (event == NETDEV_UNREGISTER)
                        cnic_ulp_exit(dev);
 
-               if (event == NETDEV_UP) {
+               if (event == NETDEV_UP || (new_dev && netif_running(netdev))) {
                        if (cnic_register_netdev(dev) != 0) {
                                cnic_put(dev);
                                goto done;
diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c
index 8d7d87f..0d82be0 100644
--- a/drivers/net/e1000/e1000_hw.c
+++ b/drivers/net/e1000/e1000_hw.c
@@ -3842,6 +3842,12 @@ s32 e1000_validate_eeprom_checksum(struct e1000_hw *hw)
                checksum += eeprom_data;
        }
 
+#ifdef CONFIG_PARISC
+       /* This is a signature and not a checksum on HP c8000 */
+       if ((hw->subsystem_vendor_id == 0x103C) && (eeprom_data == 0x16d6))
+               return E1000_SUCCESS;
+
+#endif
        if (checksum == (u16) EEPROM_SUM)
                return E1000_SUCCESS;
        else {
diff --git a/drivers/net/irda/smsc-ircc2.c b/drivers/net/irda/smsc-ircc2.c
index 8f7d0d1..eeeca07 100644
--- a/drivers/net/irda/smsc-ircc2.c
+++ b/drivers/net/irda/smsc-ircc2.c
@@ -515,7 +515,7 @@ static const struct net_device_ops smsc_ircc_netdev_ops = {
  *    Try to open driver instance
  *
  */
-static int __init smsc_ircc_open(unsigned int fir_base, unsigned int sir_base, 
u8 dma, u8 irq)
+static int __devinit smsc_ircc_open(unsigned int fir_base, unsigned int 
sir_base, u8 dma, u8 irq)
 {
        struct smsc_ircc_cb *self;
        struct net_device *dev;
diff --git a/drivers/net/rionet.c b/drivers/net/rionet.c
index ede937e..ae88ce8 100644
--- a/drivers/net/rionet.c
+++ b/drivers/net/rionet.c
@@ -87,8 +87,8 @@ static struct rio_dev **rionet_active;
 #define dev_rionet_capable(dev) \
        is_rionet_capable(dev->pef, dev->src_ops, dev->dst_ops)
 
-#define RIONET_MAC_MATCH(x)    (*(u32 *)x == 0x00010001)
-#define RIONET_GET_DESTID(x)   (*(u16 *)(x + 4))
+#define RIONET_MAC_MATCH(x)    (!memcmp((x), "\00\01\00\01", 4))
+#define RIONET_GET_DESTID(x)   ((*((u8 *)x + 4) << 8) | *((u8 *)x + 5))
 
 static int rionet_rx_clean(struct net_device *ndev)
 {
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c
index a516185..4dfbc79 100644
--- a/drivers/net/usb/asix.c
+++ b/drivers/net/usb/asix.c
@@ -1441,6 +1441,10 @@ static const struct usb_device_id        products [] = {
        USB_DEVICE (0x04f1, 0x3008),
        .driver_info = (unsigned long) &ax8817x_info,
 }, {
+       // ASIX AX88772B 10/100
+       USB_DEVICE (0x0b95, 0x772b),
+       .driver_info = (unsigned long) &ax88772_info,
+}, {
        // ASIX AX88772 10/100
        USB_DEVICE (0x0b95, 0x7720),
        .driver_info = (unsigned long) &ax88772_info,
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 9eb4f5e..f16c136 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -1526,7 +1526,8 @@ static void handle_irq_beacon(struct b43_wldev *dev)
        u32 cmd, beacon0_valid, beacon1_valid;
 
        if (!b43_is_mode(wl, NL80211_IFTYPE_AP) &&
-           !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT))
+           !b43_is_mode(wl, NL80211_IFTYPE_MESH_POINT) &&
+           !b43_is_mode(wl, NL80211_IFTYPE_ADHOC))
                return;
 
        /* This is the bottom half of the asynchronous beacon update. */
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c 
b/drivers/net/wireless/rt2x00/rt2800lib.c
index 9deae41..60f7ba4 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -1694,14 +1694,15 @@ static void rt2800_efuse_read(struct rt2x00_dev 
*rt2x00dev, unsigned int i)
        rt2800_regbusy_read(rt2x00dev, EFUSE_CTRL, EFUSE_CTRL_KICK, &reg);
 
        /* Apparently the data is read from end to start */
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3,
-                                       (u32 *)&rt2x00dev->eeprom[i]);
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2,
-                                       (u32 *)&rt2x00dev->eeprom[i + 2]);
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1,
-                                       (u32 *)&rt2x00dev->eeprom[i + 4]);
-       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0,
-                                       (u32 *)&rt2x00dev->eeprom[i + 6]);
+       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA3, &reg);
+       /* The returned value is in CPU order, but eeprom is le */
+       rt2x00dev->eeprom[i] = cpu_to_le32(reg);
+       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA2, &reg);
+       *(u32 *)&rt2x00dev->eeprom[i + 2] = cpu_to_le32(reg);
+       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA1, &reg);
+       *(u32 *)&rt2x00dev->eeprom[i + 4] = cpu_to_le32(reg);
+       rt2800_register_read_lock(rt2x00dev, EFUSE_DATA0, &reg);
+       *(u32 *)&rt2x00dev->eeprom[i + 6] = cpu_to_le32(reg);
 
        mutex_unlock(&rt2x00dev->csr_mutex);
 }
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c 
b/drivers/net/wireless/rt2x00/rt2x00usb.c
index 0a751e7..3c3e1ec 100644
--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
+++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
@@ -705,18 +705,8 @@ int rt2x00usb_suspend(struct usb_interface *usb_intf, 
pm_message_t state)
 {
        struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
        struct rt2x00_dev *rt2x00dev = hw->priv;
-       int retval;
-
-       retval = rt2x00lib_suspend(rt2x00dev, state);
-       if (retval)
-               return retval;
 
-       /*
-        * Decrease usbdev refcount.
-        */
-       usb_put_dev(interface_to_usbdev(usb_intf));
-
-       return 0;
+       return rt2x00lib_suspend(rt2x00dev, state);
 }
 EXPORT_SYMBOL_GPL(rt2x00usb_suspend);
 
@@ -725,8 +715,6 @@ int rt2x00usb_resume(struct usb_interface *usb_intf)
        struct ieee80211_hw *hw = usb_get_intfdata(usb_intf);
        struct rt2x00_dev *rt2x00dev = hw->priv;
 
-       usb_get_dev(interface_to_usbdev(usb_intf));
-
        return rt2x00lib_resume(rt2x00dev);
 }
 EXPORT_SYMBOL_GPL(rt2x00usb_resume);
diff --git a/drivers/platform/x86/thinkpad_acpi.c 
b/drivers/platform/x86/thinkpad_acpi.c
index e7b0c3b..6fa918c 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -122,7 +122,9 @@ enum {
 };
 
 /* ACPI HIDs */
-#define TPACPI_ACPI_HKEY_HID           "IBM0068"
+#define TPACPI_ACPI_IBM_HKEY_HID       "IBM0068"
+#define TPACPI_ACPI_LENOVO_HKEY_HID    "LEN0068"
+#define TPACPI_ACPI_EC_HID             "PNP0C09"
 
 /* Input IDs */
 #define TPACPI_HKEY_INPUT_PRODUCT      0x5054 /* "TP" */
@@ -3849,7 +3851,8 @@ errexit:
 }
 
 static const struct acpi_device_id ibm_htk_device_ids[] = {
-       {TPACPI_ACPI_HKEY_HID, 0},
+       {TPACPI_ACPI_IBM_HKEY_HID, 0},
+       {TPACPI_ACPI_LENOVO_HKEY_HID, 0},
        {"", 0},
 };
 
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c
index 5f97ea2..fcedb92 100644
--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -66,6 +66,12 @@ __ccwgroup_remove_symlinks(struct ccwgroup_device *gdev)
        
 }
 
+static ssize_t ccwgroup_online_store(struct device *dev,
+                                    struct device_attribute *attr,
+                                    const char *buf, size_t count);
+static ssize_t ccwgroup_online_show(struct device *dev,
+                                   struct device_attribute *attr,
+                                   char *buf);
 /*
  * Provide an 'ungroup' attribute so the user can remove group devices no
  * longer needed or accidentially created. Saves memory :)
@@ -112,6 +118,20 @@ out:
 }
 
 static DEVICE_ATTR(ungroup, 0200, NULL, ccwgroup_ungroup_store);
+static DEVICE_ATTR(online, 0644, ccwgroup_online_show, ccwgroup_online_store);
+
+static struct attribute *ccwgroup_attrs[] = {
+       &dev_attr_online.attr,
+       &dev_attr_ungroup.attr,
+       NULL,
+};
+static struct attribute_group ccwgroup_attr_group = {
+       .attrs = ccwgroup_attrs,
+};
+static const struct attribute_group *ccwgroup_attr_groups[] = {
+       &ccwgroup_attr_group,
+       NULL,
+};
 
 static void
 ccwgroup_release (struct device *dev)
@@ -280,25 +300,17 @@ int ccwgroup_create_from_string(struct device *root, 
unsigned int creator_id,
        }
 
        dev_set_name(&gdev->dev, "%s", dev_name(&gdev->cdev[0]->dev));
-
+       gdev->dev.groups = ccwgroup_attr_groups;
        rc = device_add(&gdev->dev);
        if (rc)
                goto error;
        get_device(&gdev->dev);
-       rc = device_create_file(&gdev->dev, &dev_attr_ungroup);
-
-       if (rc) {
-               device_unregister(&gdev->dev);
-               goto error;
-       }
-
        rc = __ccwgroup_create_symlinks(gdev);
        if (!rc) {
                mutex_unlock(&gdev->reg_mutex);
                put_device(&gdev->dev);
                return 0;
        }
-       device_remove_file(&gdev->dev, &dev_attr_ungroup);
        device_unregister(&gdev->dev);
 error:
        for (i = 0; i < num_devices; i++)
@@ -408,7 +420,7 @@ ccwgroup_online_store (struct device *dev, struct 
device_attribute *attr, const
        int ret;
 
        if (!dev->driver)
-               return -ENODEV;
+               return -EINVAL;
 

_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
unionfs-cvs@fsl.cs.sunysb.edu
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to