01 Mar, 2012

40 commits

  • commit 267a6ad4aefaafbde607804c60945bcf97f91c1b upstream.

    In do_scan_async(), calling scsi_autopm_put_host(shost) may reference
    freed shost, and cause Posison overwitten warning.
    Yes, this case can happen, for example, an USB is disconnected just
    when do_scan_async() thread starts to run, then scsi_host_put() called
    in scsi_finish_async_scan() will lead to shost be freed(because the
    refcount of shost->shost_gendev decreases to 1 after USB disconnects),
    at this point, if references shost again, system will show following
    warning msg.

    To make scsi_autopm_put_host(shost) always reference a valid shost,
    put it just before scsi_host_put() in function
    scsi_finish_async_scan().

    [ 299.281565] =============================================================================
    [ 299.281634] BUG kmalloc-4096 (Tainted: G I ): Poison overwritten
    [ 299.281682] -----------------------------------------------------------------------------
    [ 299.281684]
    [ 299.281752] INFO: 0xffff880056c305d0-0xffff880056c305d0. First byte
    0x6a instead of 0x6b
    [ 299.281816] INFO: Allocated in scsi_host_alloc+0x4a/0x490 age=1688
    cpu=1 pid=2004
    [ 299.281870] __slab_alloc+0x617/0x6c1
    [ 299.281901] __kmalloc+0x28c/0x2e0
    [ 299.281931] scsi_host_alloc+0x4a/0x490
    [ 299.281966] usb_stor_probe1+0x5b/0xc40 [usb_storage]
    [ 299.282010] storage_probe+0xa4/0xe0 [usb_storage]
    [ 299.282062] usb_probe_interface+0x172/0x330 [usbcore]
    [ 299.282105] driver_probe_device+0x257/0x3b0
    [ 299.282138] __driver_attach+0x103/0x110
    [ 299.282171] bus_for_each_dev+0x8e/0xe0
    [ 299.282201] driver_attach+0x26/0x30
    [ 299.282230] bus_add_driver+0x1c4/0x430
    [ 299.282260] driver_register+0xb6/0x230
    [ 299.282298] usb_register_driver+0xe5/0x270 [usbcore]
    [ 299.282337] 0xffffffffa04ab03d
    [ 299.282364] do_one_initcall+0x47/0x230
    [ 299.282396] sys_init_module+0xa0f/0x1fe0
    [ 299.282429] INFO: Freed in scsi_host_dev_release+0x18a/0x1d0 age=85
    cpu=0 pid=2008
    [ 299.282482] __slab_free+0x3c/0x2a1
    [ 299.282510] kfree+0x296/0x310
    [ 299.282536] scsi_host_dev_release+0x18a/0x1d0
    [ 299.282574] device_release+0x74/0x100
    [ 299.282606] kobject_release+0xc7/0x2a0
    [ 299.282637] kobject_put+0x54/0xa0
    [ 299.282668] put_device+0x27/0x40
    [ 299.282694] scsi_host_put+0x1d/0x30
    [ 299.282723] do_scan_async+0x1fc/0x2b0
    [ 299.282753] kthread+0xdf/0xf0
    [ 299.282782] kernel_thread_helper+0x4/0x10
    [ 299.282817] INFO: Slab 0xffffea00015b0c00 objects=7 used=7 fp=0x
    (null) flags=0x100000000004080
    [ 299.282882] INFO: Object 0xffff880056c30000 @offset=0 fp=0x (null)
    [ 299.282884]
    ...

    Signed-off-by: Huajun Li
    Acked-by: Alan Stern
    Signed-off-by: James Bottomley
    Signed-off-by: Greg Kroah-Hartman

    Huajun Li
     
  • commit b4bc724e82e80478cba5fe9825b62e71ddf78757 upstream.

    An interrupt might be pending when irq_startup() is called, but the
    startup code does not invoke the resend logic. In some cases this
    prevents the device from issuing another interrupt which renders the
    device non functional.

    Call the resend function in irq_startup() to keep things going.

    Reported-and-tested-by: Russell King
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • commit ac5637611150281f398bb7a47e3fcb69a09e7803 upstream.

    When the primary handler of an interrupt which is marked IRQ_ONESHOT
    returns IRQ_HANDLED or IRQ_NONE, then the interrupt thread is not
    woken and the unmask logic of the interrupt line is never
    invoked. This keeps the interrupt masked forever.

    This was not noticed as most IRQ_ONESHOT users wake the thread
    unconditionally (usually because they cannot access the underlying
    device from hard interrupt context). Though this behaviour was nowhere
    documented and not necessarily intentional. Some drivers can avoid the
    thread wakeup in certain cases and run into the situation where the
    interrupt line s kept masked.

    Handle it gracefully.

    Reported-and-tested-by: Lothar Wassmann
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     
  • commit 2504a6423b9ab4c36df78227055995644de19edb upstream.

    Rate control algorithms are supposed to stop processing when they
    encounter a rate with the index -1. Checking for rate->count not being
    zero is not enough.

    Allowing a rate with negative index leads to memory corruption in
    ath_debug_stat_rc().

    One consequence of the bug is discussed at
    https://bugzilla.redhat.com/show_bug.cgi?id=768639

    Signed-off-by: Pavel Roskin
    Signed-off-by: John W. Linville
    Signed-off-by: Greg Kroah-Hartman

    Pavel Roskin
     
  • commit 32c3233885eb10ac9cb9410f2f8cd64b8df2b2a1 upstream.

    For L1 instruction cache and L2 cache the shared CPU information
    is wrong. On current AMD family 15h CPUs those caches are shared
    between both cores of a compute unit.

    This fixes https://bugzilla.kernel.org/show_bug.cgi?id=42607

    Signed-off-by: Andreas Herrmann
    Cc: Petkov Borislav
    Cc: Dave Jones
    Link: http://lkml.kernel.org/r/20120208195229.GA17523@alberich.amd.com
    Signed-off-by: Ingo Molnar
    Signed-off-by: Greg Kroah-Hartman

    Andreas Herrmann
     
  • commit d980e0f8d858c6963d676013e976ff00ab7acb2b upstream.

    When the PMIC is not found, voltdm->pmic will be NULL. vp.c's
    initialization function tries to dereferences this, which causes an
    oops:

    Unable to handle kernel NULL pointer dereference at virtual address 00000000
    pgd = c0004000
    [00000000] *pgd=00000000
    Internal error: Oops: 5 [#1] PREEMPT
    Modules linked in:
    CPU: 0 Not tainted (3.3.0-rc2+ #204)
    PC is at omap_vp_init+0x5c/0x15c
    LR is at omap_vp_init+0x58/0x15c
    pc : [] lr : [] psr: 60000013
    sp : c181ff30 ip : c181ff68 fp : c181ff64
    r10: c0407808 r9 : c040786c r8 : c0407814
    r7 : c0026868 r6 : c00264fc r5 : c040ad6c r4 : 00000000
    r3 : 00000040 r2 : 000032c8 r1 : 0000fa00 r0 : 000032c8
    Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
    Control: 10c5387d Table: 80004019 DAC: 00000015
    Process swapper (pid: 1, stack limit = 0xc181e2e8)
    Stack: (0xc181ff30 to 0xc1820000)
    ff20: c0381d00 c02e9c6d c0383582 c040786c
    ff40: c040ad6c c00264fc c0026868 c0407814 00000000 c03d9de4 c181ff8c c181ff68
    ff60: c03db448 c03db830 c02e982c c03fdfb8 c03fe004 c0039988 00000013 00000000
    ff80: c181ff9c c181ff90 c03d9df8 c03db390 c181ffdc c181ffa0 c0008798 c03d9df0
    ffa0: c181ffc4 c181ffb0 c0055a44 c0187050 c0039988 c03fdfb8 c03fe004 c0039988
    ffc0: 00000013 00000000 00000000 00000000 c181fff4 c181ffe0 c03d1284 c0008708
    ffe0: 00000000 c03d1208 00000000 c181fff8 c0039988 c03d1214 1077ce40 01f7ee08
    Backtrace:
    [] (omap_vp_init+0x0/0x15c) from [] (omap_voltage_late_init+0xc4/0xfc)
    [] (omap_voltage_late_init+0x0/0xfc) from [] (omap2_common_pm_late_init+0x14/0x54)
    r8:00000000 r7:00000013 r6:c0039988 r5:c03fe004 r4:c03fdfb8
    [] (omap2_common_pm_late_init+0x0/0x54) from [] (do_one_initcall+0x9c/0x164)
    [] (do_one_initcall+0x0/0x164) from [] (kernel_init+0x7c/0x120)
    [] (kernel_init+0x0/0x120) from [] (do_exit+0x0/0x2cc)
    r5:c03d1208 r4:00000000
    Code: e5ca300b e5900034 ebf69027 e5994024 (e5941000)
    ---[ end trace aed617dddaf32c3d ]---
    Kernel panic - not syncing: Attempted to kill init!

    Signed-off-by: Russell King
    Cc: Igor Grinberg
    Signed-off-by: Greg Kroah-Hartman

    Russell King
     
  • commit 40410715715178ec196314dd0c19150c06901f80 upstream.

    When a PMIC is not found, this driver is unable to obtain its
    'vdds_dsi_reg' regulator. Even through its initialization function
    fails, other code still calls its enable function, which fails to
    check whether it has this regulator before asking for it to be enabled.

    This fixes the oops, however a better fix would be to sort out the
    upper layers to prevent them calling into a module which failed to
    initialize.

    Unable to handle kernel NULL pointer dereference at virtual address 00000038
    pgd = c0004000
    [00000038] *pgd=00000000
    Internal error: Oops: 5 [#1] PREEMPT
    Modules linked in:
    CPU: 0 Not tainted (3.3.0-rc2+ #228)
    PC is at regulator_enable+0x10/0x70
    LR is at omapdss_dpi_display_enable+0x54/0x15c
    pc : [] lr : [] psr: 60000013
    sp : c181fd90 ip : c181fdb0 fp : c181fdac
    r10: c042eff0 r9 : 00000060 r8 : c044a164
    r7 : c042c0e4 r6 : c042bd60 r5 : 00000000 r4 : c042bd60
    r3 : c084de48 r2 : c181e000 r1 : c042bd60 r0 : 00000000
    Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
    Control: 10c5387d Table: 80004019 DAC: 00000015
    Process swapper (pid: 1, stack limit = 0xc181e2e8)
    Stack: (0xc181fd90 to 0xc1820000)
    fd80: c001754c c042bd60 00000000 c042bd60
    fda0: c181fdcc c181fdb0 c01af994 c01b9a04 c0016104 c042bd60 c042bd60 c044a338
    fdc0: c181fdec c181fdd0 c01b5ed0 c01af94c c042bd60 c042bd60 c1aa8000 c1aa8a0c
    fde0: c181fe04 c181fdf0 c01b5f54 c01b5ea8 c02fc18c c042bd60 c181fe3c c181fe08
    fe00: c01b2a18 c01b5f48 c01aed14 c02fc160 c01df8ec 00000002 c042bd60 00000003
    fe20: c042bd60 c1aa8000 c1aa8a0c c042eff8 c181fe84 c181fe40 c01b3874 c01b29fc
    fe40: c042eff8 00000000 c042f000 c0449db8 c044ed78 00000000 c181fe74 c042eff8
    fe60: c042eff8 c0449db8 c0449db8 c044ed78 00000000 00000000 c181fe94 c181fe88
    fe80: c01e452c c01b35e8 c181feb4 c181fe98 c01e2fdc c01e4518 c042eff8 c0449db8
    fea0: c0449db8 c181fef0 c181fecc c181feb8 c01e3104 c01e2f48 c042eff8 c042f02c
    fec0: c181feec c181fed0 c01e3190 c01e30c0 c01e311c 00000000 c01e311c c0449db8
    fee0: c181ff14 c181fef0 c01e1998 c01e3128 c18330a8 c1892290 c04165e8 c0449db8
    ff00: c0449db8 c1ab60c0 c181ff24 c181ff18 c01e2e28 c01e194c c181ff54 c181ff28
    ff20: c01e2218 c01e2e14 c039afed c181ff38 c04165e8 c041660c c0449db8 00000013
    ff40: 00000000 c03ffdb8 c181ff7c c181ff58 c01e384c c01e217c c181ff7c c04165e8
    ff60: c041660c c003a37c 00000013 00000000 c181ff8c c181ff80 c01e488c c01e3790
    ff80: c181ff9c c181ff90 c03ffdcc c01e484c c181ffdc c181ffa0 c0008798 c03ffdc4
    ffa0: c181ffc4 c181ffb0 c0056440 c0187810 c003a37c c04165e8 c041660c c003a37c
    ffc0: 00000013 00000000 00000000 00000000 c181fff4 c181ffe0 c03ea284 c0008708
    ffe0: 00000000 c03ea208 00000000 c181fff8 c003a37c c03ea214 1073cec0 01f7ee08
    Backtrace:
    [] (regulator_enable+0x0/0x70) from [] (omapdss_dpi_display_enable+0x54/0x15c)
    r6:c042bd60 r5:00000000 r4:c042bd60
    [] (omapdss_dpi_display_enable+0x0/0x15c) from [] (generic_dpi_panel_power_on+0x34/0x78)
    r6:c044a338 r5:c042bd60 r4:c042bd60
    [] (generic_dpi_panel_power_on+0x0/0x78) from [] (generic_dpi_panel_enable+0x18/0x28)
    r7:c1aa8a0c r6:c1aa8000 r5:c042bd60 r4:c042bd60
    [] (generic_dpi_panel_enable+0x0/0x28) from [] (omapfb_init_display+0x28/0x150)
    r4:c042bd60
    [] (omapfb_init_display+0x0/0x150) from [] (omapfb_probe+0x298/0x318)
    r8:c042eff8 r7:c1aa8a0c r6:c1aa8000 r5:c042bd60 r4:00000003
    [] (omapfb_probe+0x0/0x318) from [] (platform_drv_probe+0x20/0x24)
    [] (platform_drv_probe+0x0/0x24) from [] (really_probe+0xa0/0x178)
    [] (really_probe+0x0/0x178) from [] (driver_probe_device+0x50/0x68)
    r7:c181fef0 r6:c0449db8 r5:c0449db8 r4:c042eff8
    [] (driver_probe_device+0x0/0x68) from [] (__driver_attach+0x74/0x98)
    r5:c042f02c r4:c042eff8
    [] (__driver_attach+0x0/0x98) from [] (bus_for_each_dev+0x58/0x98)
    r6:c0449db8 r5:c01e311c r4:00000000
    [] (bus_for_each_dev+0x0/0x98) from [] (driver_attach+0x20/0x28)
    r7:c1ab60c0 r6:c0449db8 r5:c0449db8 r4:c04165e8
    [] (driver_attach+0x0/0x28) from [] (bus_add_driver+0xa8/0x22c)
    [] (bus_add_driver+0x0/0x22c) from [] (driver_register+0xc8/0x154)
    [] (driver_register+0x0/0x154) from [] (platform_driver_register+0x4c/0x60)
    r8:00000000 r7:00000013 r6:c003a37c r5:c041660c r4:c04165e8
    [] (platform_driver_register+0x0/0x60) from [] (omapfb_init+0x14/0x34)
    [] (omapfb_init+0x0/0x34) from [] (do_one_initcall+0x9c/0x164)
    [] (do_one_initcall+0x0/0x164) from [] (kernel_init+0x7c/0x120)
    [] (kernel_init+0x0/0x120) from [] (do_exit+0x0/0x2d8)
    r5:c03ea208 r4:00000000
    Code: e1a0c00d e92dd870 e24cb004 e24dd004 (e5906038)
    ---[ end trace 9e2474c2e193b223 ]---

    Acked-by: Tony Lindgren
    Signed-off-by: Russell King
    Cc: Igor Grinberg
    Signed-off-by: Greg Kroah-Hartman

    Russell King
     
  • commit 363434b5dc352464ac7601547891e5fc9105f124 upstream.

    An error while creating sysfs attribute files in the driver's probe function
    results in an error abort, but already created files are not removed. This patch
    fixes the problem.

    Signed-off-by: Guenter Roeck
    Cc: Dirk Eibach
    Acked-by: Jean Delvare
    Signed-off-by: Greg Kroah-Hartman

    Guenter Roeck
     
  • commit 2f2da1ac0ba5b6cc6e1957c4da5ff20e67d8442b upstream.

    Initialize PPR register for both channels, and set correct PPR register bits.
    Also remove unnecessary variable initializations.

    Signed-off-by: Chris D Schimp
    [guenter.roeck@ericsson.com: Merged two patches into one]
    Signed-off-by: Guenter Roeck
    Acked-by: Roland Stigge
    Signed-off-by: Greg Kroah-Hartman

    Chris D Schimp
     
  • commit b63d97a36edb1aecf8c13e5f5783feff4d64c24b upstream.

    RPM calculation from tachometer value does not depend on PPR.
    Also, do not report negative RPM values.

    Signed-off-by: Chris D Schimp
    [guenter.roeck@ericsson.com: do not report negative RPM values]
    Signed-off-by: Guenter Roeck
    Acked-by: Roland Stigge
    Signed-off-by: Greg Kroah-Hartman

    Chris D Schimp
     
  • commit 918e556ec214ed2f584e4cac56d7b29e4bb6bf27 upstream.

    Lock i_mmap_mutex for access to the VMA prio list to prevent concurrent
    access. Currently, certain parts of the mmap handling are protected by
    the region mutex, but not all.

    Reported-by: Al Viro
    Signed-off-by: David Howells
    Acked-by: Al Viro
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    David Howells
     
  • commit ef8d60fb79614a86a82720dc2402631dbcafb315 upstream.

    The previous fix for the speaker on Acer Aspire 59135 introduced
    another problem for surround outputs. It changed the connections on
    the line-in/mic pins for limiting the routes, but it left the modified
    connections. Thus wrong connection indices were written when set to
    4ch or 6ch mode.

    This patch fixes it by restoring the right connections just after
    parsing the tree but before the initialization.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42740

    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit c14c95f62ecb8710af14ae0d48e01991b70bb6f4 upstream.

    The bitmap introduced in the commit [527e4d73: ALSA: hda/realtek - Fix
    missing volume controls with ALC260] is too narrow for some codecs,
    which may have more NIDs than 0x20, thus it may overflow the bitmap
    array on them.

    Just double the number to cover all and also add a sanity-check code
    to be safer.

    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit 31794bc37bf2db84f085da52b72bfba65739b2d2 upstream.

    The sidetone enumeration texts have left and right swapped.

    Signed-off-by: Mark Brown
    Signed-off-by: Greg Kroah-Hartman

    Mark Brown
     
  • commit 4949314c7283ea4f9ade182ca599583b89f7edd6 upstream.

    We need to handle >1 page control cdbs, so extend the code to do a vmap
    if bigger than 1 page. It seems like kmap() is still preferable if just
    a page, fewer TLB shootdowns(?), so keep using that when possible.

    Rename function pair for their new scope.

    Signed-off-by: Andy Grover
    Signed-off-by: Nicholas Bellinger
    Signed-off-by: Greg Kroah-Hartman

    Andy Grover
     
  • commit bb94a406682770a35305daaa241ccdb7cab399de upstream.

    This patch (as1521b) fixes the interaction between usb-storage's
    scanning thread and the freezer. The current implementation has a
    race: If the device is unplugged shortly after being plugged in and
    just as a system sleep begins, the scanning thread may get frozen
    before the khubd task. Khubd won't be able to freeze until the
    disconnect processing is complete, and the disconnect processing can't
    proceed until the scanning thread finishes, so the sleep transition
    will fail.

    The implementation in the 3.2 kernel suffers from an additional
    problem. There the scanning thread calls set_freezable_with_signal(),
    and the signals sent by the freezer will mess up the thread's I/O
    delays, which are all interruptible.

    The solution to both problems is the same: Replace the kernel thread
    used for scanning with a delayed-work routine on the system freezable
    work queue. Freezable work queues have the nice property that you can
    cancel a work item even while the work queue is frozen, and no signals
    are needed.

    The 3.2 version of this patch solves the problem in Bugzilla #42730.

    Signed-off-by: Alan Stern
    Acked-by: Seth Forshee
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit a45aa3b30583e7d54e7cf4fbcd0aa699348a6e5c upstream.

    The superspeed device attached to a USB 3.0 hub(such as VIA's)
    doesn't respond the address device command after resume. The
    root cause is the superspeed hub will miss the Hub Depth value
    that is used as an offset into the route string to locate the
    bits it uses to determine the downstream port number after
    reset, and all packets can't be routed to the device attached
    to the superspeed hub.

    Hub driver sends a Set Hub Depth request to the superspeed hub
    except for USB 3.0 root hub when the hub is initialized and
    doesn't send the request again after reset due to the resume
    process. So moving the code that sends the Set Hub Depth request
    to the superspeed hub from hub_configure() to hub_activate()
    is to cover those situations include initialization and reset.

    The patch should be backported to kernels as old as 2.6.39.

    Signed-off-by: Elric Fu
    Signed-off-by: Sarah Sharp
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Elric Fu
     
  • commit 68d07f64b8a11a852d48d1b05b724c3e20c0d94b upstream.

    Intel has a PCI USB xhci host controller on a new platform. It doesn't
    have a line IRQ definition in BIOS. The Linux driver refuses to
    initialize this controller, but Windows works well because it only depends
    on MSI.

    Actually, Linux also can work for MSI. This patch avoids the line IRQ
    checking for USB3 HCDs in usb core PCI probe. It allows the xHCI driver
    to try to enable MSI or MSI-X first. It will fail the probe if MSI
    enabling failed and there's no legacy PCI IRQ.

    This patch should be backported to kernels as old as 2.6.32.

    Signed-off-by: Alex Shi
    Signed-off-by: Sarah Sharp
    Signed-off-by: Greg Kroah-Hartman

    Sarah Sharp
     
  • commit 340a3504fd39dad753ba908fb6f894ee81fc3ae2 upstream.

    The xHCI 0.96 spec says that HS bulk and control endpoint NAK rate must
    be encoded as an exponent of two number of microframes. The endpoint
    descriptor has the NAK rate encoded in number of microframes. We were
    just copying the value from the endpoint descriptor into the endpoint
    context interval field, which was not correct. This lead to the VIA
    host rejecting the add of a bulk OUT endpoint from any USB 2.0 mass
    storage device.

    The fix is to use the correct encoding. Refactor the code to convert
    number of frames to an exponential number of microframes, and make sure
    we convert the number of microframes in HS bulk and control endpoints to
    an exponent.

    This should be back ported to kernels as old as 2.6.31, that contain the
    commit dfa49c4ad120a784ef1ff0717168aa79f55a483a "USB: xhci - fix math
    in xhci_get_endpoint_interval"

    Signed-off-by: Sarah Sharp
    Tested-by: Felipe Contreras
    Suggested-by: Andiry Xu
    Signed-off-by: Greg Kroah-Hartman

    Sarah Sharp
     
  • commit 3278a55a1aebe2bbd47fbb5196209e5326a88b56 upstream.

    The code to set the device removable bits in the USB 2.0 roothub
    descriptor was accidentally looking at the USB 3.0 port registers
    instead of the USB 2.0 registers. This can cause an oops if there are
    more USB 2.0 registers than USB 3.0 registers.

    This should be backported to kernels as old as 2.6.39, that contain the
    commit 4bbb0ace9a3de8392527e3c87926309d541d3b00 "xhci: Return a USB 3.0
    hub descriptor for USB3 roothub."

    Signed-off-by: Sarah Sharp
    Signed-off-by: Greg Kroah-Hartman

    Sarah Sharp
     
  • commit cab928ee1f221c9cc48d6615070fefe2e444384a upstream.

    On some systems with an Intel Panther Point xHCI host controller, the
    BIOS disables the xHCI PCI device during boot, and switches the xHCI
    ports over to EHCI. This allows the BIOS to access USB devices without
    having xHCI support.

    The downside is that the xHCI BIOS handoff mechanism will fail because
    memory mapped I/O is not enabled for the disabled PCI device.
    Jesse Barnes says this is expected behavior. The PCI core will enable
    BARs before quirks run, but it will leave it in an undefined state, and
    it may not have memory mapped I/O enabled.

    Make the generic USB quirk handler call pci_enable_device() to re-enable
    MMIO, and call pci_disable_device() once the host-specific BIOS handoff
    is finished. This will balance the ref counts in the PCI core. When
    the PCI probe function is called, usb_hcd_pci_probe() will call
    pci_enable_device() again.

    This should be back ported to kernels as old as 2.6.31. That was the
    first kernel with xHCI support, and no one has complained about BIOS
    handoffs failing due to memory mapped I/O being disabled on other hosts
    (EHCI, UHCI, or OHCI).

    Signed-off-by: Sarah Sharp
    Acked-by: Oliver Neukum
    Cc: Jesse Barnes
    Signed-off-by: Greg Kroah-Hartman

    Sarah Sharp
     
  • commit d9f5343e35d9138432657202afa8e3ddb2ade360 upstream.

    Somehow we ended up with duplicate hub feature #defines in ch11.h.
    Tatyana Brokhman first created the USB 3.0 hub feature macros in 2.6.38
    with commit 0eadcc09203349b11ca477ec367079b23d32ab91 "usb: USB3.0 ch11
    definitions". In 2.6.39, I modified a patch from John Youn that added
    similar macros in a different place in the same file, and committed
    dbe79bbe9dcb22cb3651c46f18943477141ca452 "USB 3.0 Hub Changes".

    Some of the #defines used different names for the same values. Others
    used exactly the same names with the same values, like these gems:

    #define USB_PORT_FEAT_BH_PORT_RESET 28
    ...
    #define USB_PORT_FEAT_BH_PORT_RESET 28

    According to my very geeky husband (who looked it up in the C99 spec),
    it is allowed to have object-like macros with duplicate names as long as
    the replacement list is exactly the same. However, he recalled that
    some compilers will give warnings when they find duplicate macros. It's
    probably best to remove the duplicates in the stable tree, so that the
    code compiles for everyone.

    The macros are now fixed to move the feature requests that are specific
    to USB 3.0 hubs into a new section (out of the USB 2.0 hub feature
    section), and use the most common macro name.

    This patch should be backported to 2.6.39.

    Signed-off-by: Sarah Sharp
    Cc: Tatyana Brokhman
    Cc: John Youn
    Cc: Jamey Sharp
    Signed-off-by: Greg Kroah-Hartman

    Sarah Sharp
     
  • commit 7fd25702ba616d9ba56e2a625472f29e5aff25ee upstream.

    This USB-serial cable with mini stereo jack enumerates as:
    Bus 001 Device 004: ID 1a61:3410 Abbott Diabetes Care

    It is a TI3410 inside.

    Signed-off-by: Andrew Lunn
    Signed-off-by: Greg Kroah-Hartman

    Andrew Lunn
     
  • commit b9e44fe5ecda4158c22bc1ea4bffa378a4f83f65 upstream.

    1. Remove all old mass-storage ids's pid:
    0x0026,0x0053,0x0098,0x0099,0x0149,0x0150,0x0160;
    2. As the pid from 0x1401 to 0x1510 which have not surely assigned to
    use for serial-port or mass-storage port,so i think it should be
    removed now, and will re-add after it have assigned in future;
    3. sort the pid to WCDMA and CDMA.

    Signed-off-by: Rui li
    Signed-off-by: Greg Kroah-Hartman

    Rui li
     
  • commit c6c1e4491dc8d1ed2509fa6aacffa7f34614fc38 upstream.

    Signed-off-by: Bruno Thomsen
    Signed-off-by: Greg Kroah-Hartman

    Bruno Thomsen
     
  • [ Upstream commit 0af2a0d0576205dda778d25c6c344fc6508fc81d ]

    This commit ensures that lost_cnt_hint is correctly updated in
    tcp_shifted_skb() for FACK TCP senders. The lost_cnt_hint adjustment
    in tcp_sacktag_one() only applies to non-FACK senders, so FACK senders
    need their own adjustment.

    This applies the spirit of 1e5289e121372a3494402b1b131b41bfe1cf9b7f -
    except now that the sequence range passed into tcp_sacktag_one() is
    correct we need only have a special case adjustment for FACK.

    Signed-off-by: Neal Cardwell
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Neal Cardwell
     
  • [ Upstream commit daef52bab1fd26e24e8e9578f8fb33ba1d0cb412 ]

    Fix the newly-SACKed range to be the range of newly-shifted bytes.

    Previously - since 832d11c5cd076abc0aa1eaf7be96c81d1a59ce41 -
    tcp_shifted_skb() incorrectly called tcp_sacktag_one() with the start
    and end sequence numbers of the skb it passes in set to the range just
    beyond the range that is newly-SACKed.

    This commit also removes a special-case adjustment to lost_cnt_hint in
    tcp_shifted_skb() since the pre-existing adjustment of lost_cnt_hint
    in tcp_sacktag_one() now properly handles this things now that the
    correct start sequence number is passed in.

    Signed-off-by: Neal Cardwell
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Neal Cardwell
     
  • [ Upstream commit cc9a672ee522d4805495b98680f4a3db5d0a0af9 ]

    This commit allows callers of tcp_sacktag_one() to pass in sequence
    ranges that do not align with skb boundaries, as tcp_shifted_skb()
    needs to do in an upcoming fix in this patch series.

    In fact, now tcp_sacktag_one() does not need to depend on an input skb
    at all, which makes its semantics and dependencies more clear.

    Signed-off-by: Neal Cardwell
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Neal Cardwell
     
  • [ Upstream commit 5ca3b72c5da47d95b83857b768def6172fbc080a ]

    Shlomo Pongratz reported GRO L2 header check was suited for Ethernet
    only, and failed on IB/ipoib traffic.

    He provided a patch faking a zeroed header to let GRO aggregates frames.

    Roland Dreier, Herbert Xu, and others suggested we change GRO L2 header
    check to be more generic, ie not assuming L2 header is 14 bytes, but
    taking into account hard_header_len.

    __napi_gro_receive() has special handling for the common case (Ethernet)
    to avoid a memcmp() call and use an inline optimized function instead.

    Signed-off-by: Eric Dumazet
    Reported-by: Shlomo Pongratz
    Cc: Roland Dreier
    Cc: Or Gerlitz
    Cc: Herbert Xu
    Tested-by: Sean Hefty
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Eric Dumazet
     
  • [ Upstream commit 936d7de3d736e0737542641269436f4b5968e9ef ]

    Commit a0417fa3a18a ("net: Make qdisc_skb_cb upper size bound
    explicit.") made it possible for a netdev driver to use skb->cb
    between its header_ops.create method and its .ndo_start_xmit
    method. Use this in ipoib_hard_header() to stash away the LL address
    (GID + QPN), instead of the "ipoib_pseudoheader" hack. This allows
    IPoIB to stop lying about its hard_header_len, which will let us fix
    the L2 check for GRO.

    Signed-off-by: Roland Dreier
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Roland Dreier
     
  • [ Upstream commit 16bda13d90c8d5da243e2cfa1677e62ecce26860 ]

    Just like skb->cb[], so that qdisc_skb_cb can be encapsulated inside
    of other data structures.

    This is intended to be used by IPoIB so that it can remember
    addressing information stored at hard_header_ops->create() time that
    it can fetch when the packet gets to the transmit routine.

    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    David S. Miller
     
  • [ Upstream commit 5dc7883f2a7c25f8df40d7479687153558cd531b ]

    This patch fix a bug which introduced by commit ac8a4810 (ipv4: Save
    nexthop address of LSRR/SSRR option to IPCB.).In that patch, we saved
    the nexthop of SRR in ip_option->nexthop and update iph->daddr until
    we get to ip_forward_options(), but we need to update it before
    ip_rt_get_source(), otherwise we may get a wrong src.

    Signed-off-by: Li Wei
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Li Wei
     
  • [ Upstream commit e2446eaab5585555a38ea0df4e01ff313dbb4ac9 ]

    Binding RST packet outgoing interface to incoming interface
    for tcp v4 when there is no socket associate with it.
    when sk is not NULL, using sk->sk_bound_dev_if instead.
    (suggested by Eric Dumazet).

    This has few benefits:
    1. tcp_v6_send_reset already did that.
    2. This helps tcp connect with SO_BINDTODEVICE set. When
    connection is lost, we still able to sending out RST using
    same interface.
    3. we are sending reply, it is most likely to be succeed
    if iif is used

    Signed-off-by: Shawn Lu
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Shawn Lu
     
  • [ Upstream commit e6b45241c57a83197e5de9166b3b0d32ac562609 ]

    Eric Dumazet found that commit 813b3b5db83
    (ipv4: Use caller's on-stack flowi as-is in output
    route lookups.) that comes in 3.0 added a regression.
    The problem appears to be that resulting flowi4_oif is
    used incorrectly as input parameter to some routing lookups.
    The result is that when connecting to local port without
    listener if the IP address that is used is not on a loopback
    interface we incorrectly assign RTN_UNICAST to the output
    route because no route is matched by oif=lo. The RST packet
    can not be sent immediately by tcp_v4_send_reset because
    it expects RTN_LOCAL.

    So, change ip_route_connect and ip_route_newports to
    update the flowi4 fields that are input parameters because
    we do not want unnecessary binding to oif.

    To make it clear what are the input parameters that
    can be modified during lookup and to show which fields of
    floiw4 are reused add a new function to update the flowi4
    structure: flowi4_update_output.

    Thanks to Yurij M. Plotnikov for providing a bug report including a
    program to reproduce the problem.

    Thanks to Eric Dumazet for tracking the problem down to
    tcp_v4_send_reset and providing initial fix.

    Reported-by: Yurij M. Plotnikov
    Signed-off-by: Julian Anastasov
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Julian Anastasov
     
  • [ Upstream commit b530b1930bbd9d005345133f0ff0c556d2a52b19 ]

    Initially diagnosed on Ubuntu 11.04 with kernel 2.6.38.

    velocity_close is not called during a suspend / resume cycle in this
    driver and it has no business playing directly with power states.

    Signed-off-by: David Lv
    Acked-by: Francois Romieu
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    David Lv
     
  • [ Upstream commit 237114384ab22c174ec4641e809f8e6cbcfce774 ]

    VETH_INFO_PEER carries struct ifinfomsg plus optional IFLA
    attributes. A minimal size of sizeof(struct ifinfomsg) must be
    enforced or we may risk accessing that struct beyond the limits
    of the netlink message.

    Signed-off-by: Thomas Graf
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Hagen Paul Pfeifer
     
  • [ Upstream commit eb10192447370f19a215a8c2749332afa1199d46 ]

    Not now, but it looks you are correct. q->qdisc is NULL until another
    additional qdisc is attached (beside tfifo). See 50612537e9ab2969312.
    The following patch should work.

    From: Hagen Paul Pfeifer

    netem: catch NULL pointer by updating the real qdisc statistic

    Reported-by: Vijay Subramanian
    Signed-off-by: Hagen Paul Pfeifer
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Hagen Paul Pfeifer
     
  • [ Upstream commit 58e05f357a039a94aa36475f8c110256f693a239 ]

    commit 5a698af53f (bond: service netpoll arp queue on master device)
    tested IFF_SLAVE flag against dev->priv_flags instead of dev->flags

    Signed-off-by: Eric Dumazet
    Cc: WANG Cong
    Acked-by: Neil Horman
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Eric Dumazet
     
  • [ Upstream commit 70620c46ac2b45c24b0f22002fdf5ddd1f7daf81 ]

    Commit 653241 (net: RFC3069, private VLAN proxy arp support) changed
    the behavior of arp proxy to send arp replies back out on the interface
    the request came in even if the private VLAN feature is disabled.

    Previously we checked rt->dst.dev != skb->dev for in scenarios, when
    proxy arp is enabled on for the netdevice and also when individual proxy
    neighbour entries have been added.

    This patch adds the check back for the pneigh_lookup() scenario.

    Signed-off-by: Thomas Graf
    Acked-by: Jesper Dangaard Brouer
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Thomas Graf
     
  • [ Upstream commit 3013dc0cceb9baaf25d5624034eeaa259bf99004 ]

    Jean Delvare reported bonding on top of 3c59x adapters was not detecting
    network cable removal fast enough.

    3c59x indeed uses a 60 seconds timer to check link status if carrier is
    on, and 5 seconds if carrier is off.

    This patch reduces timer period to 5 seconds if device is a bonding
    slave.

    Reported-by: Jean Delvare
    Acked-by: Jean Delvare
    Acked-by: Steffen Klassert
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Eric Dumazet