26 Jan, 2013

1 commit

  • This patch (as1649) adds a mechanism for host controller drivers to
    inform usbcore when they have begun or ended resume signalling on a
    particular root-hub port. The core will then make sure that the root
    hub does not get runtime-suspended while the port resume is going on.

    Since commit 596d789a211d134dc5f94d1e5957248c204ef850 (USB: set hub's
    default autosuspend delay as 0), the system tries to suspend hubs
    whenever they aren't in use. While a root-hub port is being resumed,
    the root hub does not appear to be in use. Attempted runtime suspends
    fail because of the ongoing port resume, but the PM core just keeps on
    trying over and over again. We want to prevent this wasteful effort.

    Signed-off-by: Alan Stern
    Tested-by: Ming Lei
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

01 Nov, 2012

1 commit

  • Matching on device and interface class with with unspecified
    subclass and protocol is sometimes useful. This is slightly
    different from USB_DEVICE_AND_INTERFACE_INFO which requires
    the full interface class/subclass/protocol triplet.

    Signed-off-by: Bjørn Mork
    Signed-off-by: Greg Kroah-Hartman

    Bjørn Mork
     

25 Oct, 2012

2 commits

  • This patch (as1620) speeds up USB root-hub resumes in the common case
    where every enabled port has its suspend feature set (which currently
    will be true for every runtime resume of the root hub). If all the
    enabled ports are suspended then resuming the root hub won't resume
    any of the downstream devices. In this case there's no need for a
    Resume Recovery delay, because that delay is meant to give devices a
    chance to get ready for active use.

    To keep track of the port suspend features, the patch adds a
    "port_is_suspended" flag to struct usb_device. This has to be tracked
    separately from the device's state; it's entirely possible for a USB-2
    device to be suspended while the suspend feature on its parent port is
    clear. The reason is that devices will go into suspend whenever their
    parent hub does.

    Signed-off-by: Alan Stern
    Reviewed-by: Peter Chen
    Tested-by: Peter Chen
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as1619) improves the interface to the "hub_for_each_child"
    macro. The name clearly suggests that the macro iterates over child
    devices; it does not suggest that the loop will also iterate over
    unnconnected ports.

    The patch changes the macro so that it will skip over unconnected
    ports and iterate only the actual child devices. The two existing
    call sites are updated to avoid testing for a NULL child pointer,
    which is now unnecessary.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

23 Oct, 2012

1 commit

  • This patch (as1611) updates the USB documentation and kerneldoc to
    give a more precise meaning for the URB_ISO_ASAP flag and to explain
    more of the details of scheduling for isochronous URBs.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

18 Oct, 2012

1 commit


11 Sep, 2012

3 commits

  • Upcoming Intel systems will have an ACPI method to control whether a USB
    port can be completely powered off. The implication of powering off a
    USB port is that the device and host sees a physical disconnect, and
    subsequent port connections and remote wakeups will be lost.

    Add a new function, usb_acpi_power_manageable(), that can be used to
    find whether the usb port has ACPI power resources that can be used to
    power on and off the port on these machines. Also add a new function
    called usb_acpi_set_power_state() that controls the port power via these
    ACPI methods.

    When the USB core calls into the xHCI hub driver to power off a port,
    check whether the port can be completely powered off via this new ACPI
    mechanism. If so, call into these new ACPI methods. Also use the ACPI
    methods when the USB core asks to power on a port.

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

    Lan Tianyu
     
  • In the upcoming USB port power off patches, we need to know whether a
    USB port can ever see a disconnect event. Often USB ports are internal
    to a system, and users can't disconnect USB devices from that port.
    Sometimes those ports will remain empty, because the OEM chose not to
    connect an internal USB device to that port.

    According to ACPI Spec 9.13, PLD indicates whether USB port is
    user visible and _UPC indicates whether a USB device can be connected to
    the USB port (we'll call this "connectible"). Here's a matrix of the
    possible combinations:

    Visible Connectible
    Name Example
    -------------------------------------------------------------------------

    Yes No Unknown (Invalid state.)

    Yes Yes Hot-plug USB ports on the outside of a laptop.
    A user could freely connect and disconnect
    USB devices.

    No Yes Hard-wired A USB modem hard-wired to a port on the
    inside of a laptop.

    No No Not used The port is internal to the system and
    will remain empty.

    Represent each of these four states with an enum usb_port_connect_type.
    The four states are USB_PORT_CONNECT_TYPE_UNKNOWN,
    USB_PORT_CONNECT_TYPE_HOT_PLUG, USB_PORT_CONNECT_TYPE_HARD_WIRED, and
    USB_PORT_NOT_USED. When we get the USB port's acpi_handle, store the
    state in connect_type in struct usb_port.

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

    Lan Tianyu
     
  • The usb_device structure contains an array of usb_device "children".
    This array is only valid if the usb_device is a hub, so it makes no
    sense to store it there. Instead, store the usb_device child
    in its parent usb_port structure.

    Since usb_port is an internal USB core structure, add a new function to
    get the USB device child, usb_hub_find_child(). Add a new macro,
    usb_hub_get_each_child(), to iterate over all the children attached to a
    particular USB hub.

    Remove the printing the USB children array pointer from the usb-ip
    driver, since it's really not necessary.

    Acked-by: Alan Stern
    Signed-off-by: Lan Tianyu
    Signed-off-by: Sarah Sharp
    Signed-off-by: Greg Kroah-Hartman

    Lan Tianyu
     

17 Jul, 2012

2 commits

  • A lot of Broadcom Bluetooth devices provides vendor specific interface
    class and we are getting flooded by patches adding new device support.
    This change will help us enable support for any other Broadcom with vendor
    specific device that arrives in the future.

    Only the product id changes for those devices, so this macro would be
    perfect for us:

    { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01) }

    Signed-off-by: Marcel Holtmann
    Signed-off-by: Gustavo Padovan
    Acked-by: Henrik Rydberg
    Signed-off-by: Greg Kroah-Hartman

    Gustavo Padovan
     
  • Reorder elements in the usb_host_interface structure to remove 8 bytes
    of padding on 64 bit builds , and so shrink it's size to 40 bytes.

    usb_interface_descriptor is a odd size which leaves a gap that is not
    big enough to hold a pointer, so moving extralen into that gap removes
    the need for more padding.

    Signed-off-by: Richard Kennedy
    Signed-off-by: Greg Kroah-Hartman

    Richard Kennedy
     

11 Jul, 2012

3 commits

  • USB 3.0 devices can optionally support Latency Tolerance Messaging
    (LTM). Add a new sysfs file in the device directory to show whether a
    device is LTM capable. This file will be present for both USB 2.0 and
    USB 3.0 devices.

    Signed-off-by: Sarah Sharp

    Sarah Sharp
     
  • USB 3.0 devices may optionally support a new feature called Latency
    Tolerance Messaging. If both the xHCI host controller and the device
    support LTM, it should be turned on in order to give the system hardware
    a better clue about the latency tolerance values of its PCI devices.

    Once a Set Feature request to enable LTM is received, the USB 3.0 device
    will begin to send LTM updates as its buffers fill or empty, and it can
    tolerate more or less latency.

    The USB 3.0 spec, section C.4.2 says that LTM should be disabled just
    before the device is placed into suspend. Then the device will send an
    updated LTM notification, so that the system doesn't think it should
    remain in an active state in order to satisfy the latency requirements
    of the suspended device.

    The Set and Clear Feature LTM enable command can only be sent to a
    configured device. The device will respond with an error if that
    command is sent while it is in the Default or Addressed state. Make
    sure to check udev->actconfig in usb_enable_ltm() and usb_disable_ltm(),
    and don't send those commands when the device is unconfigured.

    LTM should be enabled once a new configuration is installed in
    usb_set_configuration(). If we end up sending duplicate Set Feature LTM
    Enable commands on a switch from one installed configuration to another
    configuration, that should be harmless.

    Make sure that LTM is disabled before the device is unconfigured in
    usb_disable_device(). If no drivers are bound to the device, it doesn't
    make sense to allow the device to control the latency tolerance of the
    xHCI host controller.

    Signed-off-by: Sarah Sharp

    Sarah Sharp
     
  • hub_initiated_lpm_disable_count is not used by any code, so remove it.

    This commit should be backported to kernels as old as 3.5, that contain
    the commit 8306095fd2c1100e8244c09bf560f97aca5a311d "USB: Disable USB
    3.0 LPM in critical sections."

    Signed-off-by: Sarah Sharp
    Cc: stable@vger.kernel.org

    Sarah Sharp
     

07 Jul, 2012

1 commit

  • There are a few (new) usbdevfs capabilities which an application cannot
    discover in any other way then checking the kernel version. There are 3
    problems with this:
    1) It is just not very pretty.
    2) Given the tendency of enterprise distros to backport stuff it is not
    reliable.
    3) As discussed in length on the mailinglist, USBDEVFS_URB_BULK_CONTINUATION
    does not work as it should when combined with USBDEVFS_URB_SHORT_NOT_OK
    (which is its intended use) on devices attached to an XHCI controller.
    So the availability of these features can be host controller dependent,
    making depending on them based on the kernel version not a good idea.

    This patch besides adding the new ioctl also adds flags for the following
    existing capabilities:

    USBDEVFS_CAP_ZERO_PACKET, available since 2.6.31
    USBDEVFS_CAP_BULK_CONTINUATION, available since 2.6.32, except for XHCI
    USBDEVFS_CAP_NO_PACKET_SIZE_LIM, available since 3.3

    Note that this patch only does not advertise the USBDEVFS_URB_BULK_CONTINUATION
    cap for XHCI controllers, bulk transfers with this flag set will still be
    accepted when submitted to XHCI controllers.

    Returning -EINVAL for them would break existing apps, and in most cases the
    troublesome scenario wrt USBDEVFS_URB_SHORT_NOT_OK urbs on XHCI controllers
    will never get hit, so this would break working use cases.

    The disadvantage of not returning -EINVAL is that cases were it is causing
    real trouble may go undetected / the cause of the trouble may be unclear,
    but this is the best we can do.

    Signed-off-by: Hans de Goede
    Acked-by: Alan Stern
    Acked-by: Sarah Sharp
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     

14 Jun, 2012

1 commit

  • Some composite USB devices provide multiple interfaces
    with different functions, all using "vendor-specific"
    for class/subclass/protocol. Another OS use interface
    numbers to match the driver and interface. It seems
    these devices are designed with that in mind - using
    static interface numbers for the different functions.

    This adds support for matching against the
    bInterfaceNumber, allowing such devices to be supported
    without having to resort to testing against interface
    number whitelists and/or blacklists in the probe.

    Signed-off-by: Bjørn Mork
    Signed-off-by: Greg Kroah-Hartman

    Bjørn Mork
     

22 May, 2012

1 commit

  • When CONFIG_PM=n, make sure that the usb_[unlocked_][en/dis]able_lpm
    declarations are visible in include/linux/usb.h, and exported from
    drivers/usb/core/hub.c.

    Before this patch, if CONFIG_USB_SUSPEND was turned off, it would cause
    build errors:

    drivers/usb/core/hub.c: In function 'usb_disable_lpm':
    drivers/usb/core/hub.c:3394:2: error: implicit declaration of function 'usb_enable_lpm' [-Werror=implicit-function-declaration]
    drivers/usb/core/hub.c: At top level:
    drivers/usb/core/hub.c:3424:6: warning: conflicting types for 'usb_enable_lpm' [enabled by default]
    drivers/usb/core/hub.c:3394:2: note: previous implicit declaration of 'usb_enable_lpm' was here
    drivers/usb/core/driver.c: In function 'usb_probe_interface':
    drivers/usb/core/driver.c:339:2: error: implicit declaration of function 'usb_unlocked_disable_lpm' [-Werror=implicit-function-declaration]
    drivers/usb/core/driver.c:364:3: error: implicit declaration of function 'usb_unlocked_enable_lpm' [-Werror=implicit-function-declaration]
    drivers/usb/core/message.c: In function 'usb_set_interface':
    drivers/usb/core/message.c:1314:2: error: implicit declaration of function 'usb_disable_lpm' [-Werror=implicit-function-declaration]
    drivers/usb/core/message.c:1323:3: error: implicit declaration of function 'usb_enable_lpm' [-Werror=implicit-function-declaration]
    drivers/usb/core/message.c:1368:2: error: implicit declaration of function 'usb_unlocked_enable_lpm' [-Werror=implicit-function-declaration]

    Signed-off-by: Sarah Sharp
    Reported-by: Stephen Rothwell
    Reported-by: Chen Peter-B29397

    Sarah Sharp
     

19 May, 2012

4 commits

  • There are several places where the USB core needs to disable USB 3.0
    Link PM:
    - usb_bind_interface
    - usb_unbind_interface
    - usb_driver_claim_interface
    - usb_port_suspend/usb_port_resume
    - usb_reset_and_verify_device
    - usb_set_interface
    - usb_reset_configuration
    - usb_set_configuration

    Use the new LPM disable/enable functions to temporarily disable LPM
    around these critical sections.

    We need to protect the critical section around binding and unbinding USB
    interface drivers. USB drivers may want to disable hub-initiated USB
    3.0 LPM, which will change the value of the U1/U2 timeouts that the xHCI
    driver will install. We need to disable LPM completely until the driver
    is bound to the interface, and the driver has a chance to enable
    whatever alternate interface setting it needs in its probe routine.
    Then re-enable USB3 LPM, and recalculate the U1/U2 timeout values.

    We also need to disable LPM in usb_driver_claim_interface,
    because drivers like usbfs can bind to an interface through that
    function. Note, there is no way currently for userspace drivers to
    disable hub-initiated USB 3.0 LPM. Revisit this later.

    When a driver is unbound, the U1/U2 timeouts may change because we are
    unbinding the last driver that needed hub-initiated USB 3.0 LPM to be
    disabled.

    USB LPM must be disabled when a USB device is going to be suspended.
    The USB 3.0 spec does not define a state transition from U1 or U2 into
    U3, so we need to bring the device into U0 by disabling LPM before we
    can place it into U3. Therefore, call usb_unlocked_disable_lpm() in
    usb_port_suspend(), and call usb_unlocked_enable_lpm() in
    usb_port_resume(). If the port suspend fails, make sure to re-enable
    LPM by calling usb_unlocked_enable_lpm(), since usb_port_resume() will
    not be called on a failed port suspend.

    USB 3.0 devices lose their USB 3.0 LPM settings (including whether USB
    device-initiated LPM is enabled) across device suspend. Therefore,
    disable LPM before the device will be reset in
    usb_reset_and_verify_device(), and re-enable LPM after the reset is
    complete and the configuration/alt settings are re-installed.

    The calculated U1/U2 timeout values are heavily dependent on what USB
    device endpoints are currently enabled. When any of the enabled
    endpoints on the device might change, due to a new configuration, or new
    alternate interface setting, we need to first disable USB 3.0 LPM, add
    or delete endpoints from the xHCI schedule, install the new interfaces
    and alt settings, and then re-enable LPM. Do this in usb_set_interface,
    usb_reset_configuration, and usb_set_configuration.

    Basically, there is a call to disable and then enable LPM in all
    functions that lock the bandwidth_mutex. One exception is
    usb_disable_device, because the device is disconnecting or otherwise
    going away, and we should not care about whether USB 3.0 LPM is enabled.

    Signed-off-by: Sarah Sharp

    Sarah Sharp
     
  • There are various functions within the USB core that will need to
    disable USB 3.0 link power states. For example, when a USB device
    driver is being bound to an interface, we need to disable USB 3.0 LPM
    until we know if the driver will allow hub-initiated LPM transitions.
    Another example is when the USB core is switching alternate interface
    settings. The USB 3.0 timeout values are dependent on what endpoints
    are enabled, so we want to ensure that LPM is disabled until the new alt
    setting is fully installed.

    Multiple functions need to disable LPM, and those functions can even be
    nested. For example, usb_bind_interface() could disable LPM, and then
    call into the driver probe function, which may attempt to switch to a
    different alt setting. Therefore, we need to keep a count of the number
    of functions that require LPM to be disabled at any point in time.

    Introduce two new USB core API calls, usb_disable_lpm() and
    usb_enable_lpm(). These functions increment and decrement a new
    variable in the usb_device, lpm_disable_count. If usb_disable_lpm()
    fails, it will call usb_enable_lpm() in order to balance the
    lpm_disable_count.

    These two new functions must be called with the bandwidth_mutex locked.
    If the bandwidth_mutex is not already held by the caller, it should
    instead call usb_unlocked_disable_lpm() and usb_enable_lpm(), which take
    the bandwidth_mutex before calling usb_disable_lpm() and
    usb_enable_lpm(), respectively.

    Introduce a new variable (timeout) in the usb3_lpm_params structure to
    keep track of the currently enabled U1/U2 timeout values. When
    usb_disable_lpm() is called, and the USB device has the U1 or U2
    timeouts set to a non-zero value (meaning either device-initiated or
    hub-initiated LPM is enabled), attempt to disable LPM, regardless of the
    state of the lpm_disable_count. We want to ensure that all callers can
    be guaranteed that LPM is disabled if usb_disable_lpm() returns zero.

    Otherwise the following scenario could occur:

    1. Driver A is being bound to interface 1. usb_probe_interface()
    disables LPM. Driver A doesn't care if hub-initiated LPM is enabled, so
    even though usb_disable_lpm() fails, the probe of the driver continues,
    and the bandwidth mutex is dropped.

    2. Meanwhile, Driver B is being bound to interface 2.
    usb_probe_interface() grabs the bandwidth mutex and calls
    usb_disable_lpm(). That call should attempt to disable LPM, even
    though the lpm_disable_count is set to 1 by Driver A.

    For usb_enable_lpm(), we attempt to enable LPM only when the
    lpm_disable_count is zero. If some step in enabling LPM fails, it will
    only have a minimal impact on power consumption, and all USB device
    drivers should still work properly. Therefore don't bother to return
    any error codes.

    Don't enable device-initiated LPM if the device is unconfigured. The
    USB device will only accept the U1/U2_ENABLE control transfers in the
    configured state. Do enable hub-initiated LPM in that case, since
    devices are allowed to accept the LGO_Ux link commands in any state.

    Don't enable or disable LPM if the device is marked as not being LPM
    capable. This can happen if:
    - the USB device doesn't have a SS BOS descriptor,
    - the device's parent hub has a zeroed bHeaderDecodeLatency value, or
    - the xHCI host doesn't support LPM.

    Signed-off-by: Sarah Sharp
    Cc: Andiry Xu
    Cc: Alan Stern
    Signed-off-by: Sarah Sharp

    Sarah Sharp
     
  • USB 3.0 Link Power Management (LPM) is designed to allow individual
    links in the bus to go into lower power states. There are two ways a
    link can enter a lower power state:

    1. Device-initiated LPM. When a USB device decides it can go into a
    lower power link state, it sends a message to the parent hub, telling it
    to go into either U1 or U2. Device-initiated LPM is good for devices
    that send data to the host, like communications devices.

    2. Hub-initiated LPM. After the link has been idle for a specific
    amount of time, the parent hub will request that the child go into a
    lower power state. The child can refuse that request. For example, a
    USB modem may want to refuse the LPM request if it is in the middle of
    receiving a text message. Hub-initiated LPM is good for devices where
    only the host initiates the data transfer, like USB printers or USB mass
    storage devices.

    Links will be automatically placed into higher power states by the USB
    hubs and roothubs whenever the host starts a USB transmission.

    Introduce a new usb_driver flag, disable_hub_initiated_lpm, that allows
    drivers to disable hub-initiated LPM.

    Signed-off-by: Sarah Sharp
    Cc: Marcel Holtmann
    Cc: Gustavo Padovan
    Cc: Johan Hedberg
    Cc: Hansjoerg Lipp
    Cc: Tilman Schmidt
    Cc: Karsten Keil
    Cc: Oliver Neukum
    Cc: Peter Korsgaard
    Cc: Jan Dumon
    Cc: Petko Manolov
    Cc: Steve Glendinning
    Cc: "John W. Linville"
    Cc: Kalle Valo
    Cc: "Luis R. Rodriguez"
    Cc: Jouni Malinen
    Cc: Vasanthakumar Thiagarajan
    Cc: Senthil Balasubramanian
    Cc: Christian Lamparter
    Cc: Brett Rudley
    Cc: Roland Vossen
    Cc: Arend van Spriel
    Cc: "Franky (Zhenhui) Lin"
    Cc: Kan Yan
    Cc: Dan Williams
    Cc: Jussi Kivilinna
    Cc: Ivo van Doorn
    Cc: Gertjan van Wingerde
    Cc: Helmut Schaa
    Cc: Herton Ronaldo Krzesinski
    Cc: Hin-Tak Leung
    Cc: Larry Finger
    Cc: Chaoming Li
    Cc: Daniel Drake
    Cc: Ulrich Kunitz
    Cc: linux-bluetooth@vger.kernel.org
    Cc: gigaset307x-common@lists.sourceforge.net
    Cc: netdev@vger.kernel.org
    Cc: linux-usb@vger.kernel.org
    Cc: linux-wireless@vger.kernel.org
    Cc: ath9k-devel@lists.ath9k.org
    Cc: libertas-dev@lists.infradead.org
    Cc: users@rt2x00.serialmonkey.com

    Sarah Sharp
     
  • There are several different exit latencies associated with coming out of
    the U1 or U2 lower power link state.

    Device Exit Latency (DEL) is the maximum time it takes for the USB
    device to bring its upstream link into U0. That can be found in the
    SuperSpeed Extended Capabilities BOS descriptor for the device. The
    time it takes for a particular link in the tree to exit to U0 is the
    maximum of either the parent hub's U1/U2 DEL, or the child's U1/U2 DEL.

    Hubs introduce a further delay that effects how long it takes a child
    device to transition to U0. When a USB 3.0 hub receives a header
    packet, it takes some time to decode that header and figure out which
    downstream port the packet was destined for. If the port is not in U0,
    this hub header decode latency will cause an additional delay for
    bringing the child device to U0. This Hub Header Decode Latency is
    found in the USB 3.0 hub descriptor.

    We can use DEL and the header decode latency, along with additional
    latencies imposed by each additional hub tier, to figure out the exit
    latencies for both host-initiated and device-initiated exit to U0.

    The Max Exit Latency (MEL) is the worst-case time it will take for a
    host-initiated exit to U0, based on whether U1 or U2 link states are
    enabled. The ping or packet must traverse the path to the device, and
    each hub along the way incurs the hub header decode latency in order to
    figure out which device the transfer was bound for. We say worst-case,
    because some hubs may not be in the lowest link state that is enabled.
    See the examples in section C.2.2.1.

    Note that "HSD" is a "host specific delay" that the power appendix
    architect has not been able to tell me how to calculate. There's no way
    to get HSD from the xHCI registers either, so I'm simply ignoring it.

    The Path Exit Latency (PEL) is the worst-case time it will take for a
    device-initiate exit to U0 to place all the links from the device to the
    host into U0.

    The System Exit Latency (SEL) is another device-initiated exit latency.
    SEL is useful for USB 3.0 devices that need to send data to the host at
    specific intervals. The device may send an NRDY to indicate it isn't
    ready to send data, then put its link into a lower power state. If it
    needs to have that data transmitted at a specific time, it can use SEL
    to back calculate when it will need to bring the link back into U0 to
    meet its deadlines.

    SEL is the worst-case time from the device-initiated exit to U0, to when
    the device will receive a packet from the host controller. It includes
    PEL, the time it takes for an ERDY to get to the host, a host-specific
    delay for the host to process that ERDY, and the time it takes for the
    packet to traverse the path to the device. See Figure C-2 in the USB
    3.0 bus specification.

    Note: I have not been able to get good answers about what the
    host-specific delay to process the ERDY should be. The Intel HW
    developers say it will be specific to the platform the xHCI host is
    integrated into, and they say it's negligible. Ignore this too.

    Separate from these four exit latencies are the U1/U2 timeout values we
    program into the parent hubs. These timeouts tell the hub to attempt to
    place the device into a lower power link state after the link has been
    idle for that amount of time.

    Create two arrays (one for U1 and one for U2) to store mel, pel, sel,
    and the timeout values. Store the exit latency values in nanosecond
    units, since that's the smallest units used (DEL is in us, but the Hub
    Header Decode Latency is in ns).

    If a USB 3.0 device doesn't have a SuperSpeed Extended Capabilities BOS
    descriptor, it's highly unlikely it will be able to handle LPM requests
    properly. So it's best to disable LPM for devices that don't have this
    descriptor, and any children beneath it, if it's a USB 3.0 hub. Warn
    users when that happens, since it means they have a non-compliant USB
    3.0 device or hub.

    This patch assumes a simplified design where links deep in the tree will
    not have U1 or U2 enabled unless all their parent links have the
    corresponding LPM state enabled. Eventually, we might want to allow a
    different policy, and we can revisit this patch when that happens.

    Signed-off-by: Sarah Sharp
    Cc: Alan Stern

    Sarah Sharp
     

15 May, 2012

2 commits


12 May, 2012

1 commit


02 May, 2012

1 commit

  • On some HCDs usb_unlink_urb() can directly call the
    completion handler. That limits the spinlocks that can
    be taken in the handler to locks not held while calling
    usb_unlink_urb()
    To prevent a race with resubmission, this patch exposes
    usbcore's infrastructure for blocking submission, uses it
    and so drops the lock without causing a race in usbhid.

    Signed-off-by: Oliver Neukum
    Acked-by: Jiri Kosina
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Oliver Neukum
     

30 Apr, 2012

2 commits


26 Apr, 2012

1 commit

  • I thought this had been removed years ago. All in-kernel users of this
    call have now been cleaned up and converted over to use dev_err()
    instead, which is the correct thing to do. Now that there are no users,
    the macro can be removed so no one else accidentally starts to use it.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

19 Apr, 2012

1 commit


14 Mar, 2012

1 commit


11 Feb, 2012

1 commit


10 Feb, 2012

1 commit


24 Jan, 2012

1 commit


10 Jan, 2012

1 commit

  • * 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (232 commits)
    USB: Add USB-ID for Multiplex RC serial adapter to cp210x.c
    xhci: Clean up 32-bit build warnings.
    USB: update documentation for usbmon
    usb: usb-storage doesn't support dynamic id currently, the patch disables the feature to fix an oops
    drivers/usb/class/cdc-acm.c: clear dangling pointer
    drivers/usb/dwc3/dwc3-pci.c: introduce missing kfree
    drivers/usb/host/isp1760-if.c: introduce missing kfree
    usb: option: add ZD Incorporated HSPA modem
    usb: ch9: fix up MaxStreams helper
    USB: usb-skeleton.c: cleanup open_count
    USB: usb-skeleton.c: fix open/disconnect race
    xhci: Properly handle COMP_2ND_BW_ERR
    USB: remove dead code from suspend/resume path
    USB: add quirk for another camera
    drivers: usb: wusbcore: Fix dependency for USB_WUSB
    xhci: Better debugging for critical host errors.
    xhci: Be less verbose during URB cancellation.
    xhci: Remove debugging about ring structure allocation.
    xhci: Remove debugging about toggling cycle bits.
    xhci: Remove debugging for individual transfers.
    ...

    Linus Torvalds
     

09 Jan, 2012

1 commit

  • * 'for-linus2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (165 commits)
    reiserfs: Properly display mount options in /proc/mounts
    vfs: prevent remount read-only if pending removes
    vfs: count unlinked inodes
    vfs: protect remounting superblock read-only
    vfs: keep list of mounts for each superblock
    vfs: switch ->show_options() to struct dentry *
    vfs: switch ->show_path() to struct dentry *
    vfs: switch ->show_devname() to struct dentry *
    vfs: switch ->show_stats to struct dentry *
    switch security_path_chmod() to struct path *
    vfs: prefer ->dentry->d_sb to ->mnt->mnt_sb
    vfs: trim includes a bit
    switch mnt_namespace ->root to struct mount
    vfs: take /proc/*/mounts and friends to fs/proc_namespace.c
    vfs: opencode mntget() mnt_set_mountpoint()
    vfs: spread struct mount - remaining argument of next_mnt()
    vfs: move fsnotify junk to struct mount
    vfs: move mnt_devname
    vfs: move mnt_list to struct mount
    vfs: switch pnode.h macros to struct mount *
    ...

    Linus Torvalds
     

04 Jan, 2012

1 commit


10 Dec, 2011

1 commit

  • Add a new field num_mapped_sgs to struct urb so that we have a place to
    store the number of mapped entries and can also retain the original
    value of entries in num_sgs. Previously, usb_hcd_map_urb_for_dma()
    would overwrite this with the number of mapped entries, which would
    break dma_unmap_sg() because it requires the original number of entries.

    This fixes warnings like the following when using USB storage devices:
    ------------[ cut here ]------------
    WARNING: at lib/dma-debug.c:902 check_unmap+0x4e4/0x695()
    ehci_hcd 0000:00:12.2: DMA-API: device driver frees DMA sg list with different entry count [map count=4] [unmap count=1]
    Modules linked in: ohci_hcd ehci_hcd
    Pid: 0, comm: kworker/0:1 Not tainted 3.2.0-rc2+ #319
    Call Trace:
    [] warn_slowpath_common+0x80/0x98
    [] warn_slowpath_fmt+0x41/0x43
    [] check_unmap+0x4e4/0x695
    [] ? trace_hardirqs_off+0xd/0xf
    [] ? _raw_spin_unlock_irqrestore+0x33/0x50
    [] debug_dma_unmap_sg+0xeb/0x117
    [] usb_hcd_unmap_urb_for_dma+0x71/0x188
    [] unmap_urb_for_dma+0x20/0x22
    [] usb_hcd_giveback_urb+0x5d/0xc0
    [] ehci_urb_done+0xf7/0x10c [ehci_hcd]
    [] qh_completions+0x429/0x4bd [ehci_hcd]
    [] ehci_work+0x95/0x9c0 [ehci_hcd]
    ...
    ---[ end trace f29ac88a5a48c580 ]---
    Mapped at:
    [] debug_dma_map_sg+0x45/0x139
    [] usb_hcd_map_urb_for_dma+0x22e/0x478
    [] usb_hcd_submit_urb+0x63f/0x6fa
    [] usb_submit_urb+0x2c7/0x2de
    [] usb_sg_wait+0x55/0x161

    Signed-off-by: Clemens Ladisch
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Clemens Ladisch
     

18 Nov, 2011

1 commit

  • This patch introduces the module_usb_driver macro which is a convenience
    macro for USB driver modules similar to module_platform_driver. It is
    intended to be used by drivers which init/exit section does nothing but
    register/unregister the USB driver. By using this macro it is possible
    to eliminate a few lines of boilerplate code per USB driver.

    Based on work done by Lars-Peter Clausen for other
    busses (i2c and spi).

    Cc: Lars-Peter Clausen
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

16 Nov, 2011

1 commit


01 Nov, 2011

1 commit

  • The original implementations reference THIS_MODULE in an inline.
    We could include , but it is better to avoid chaining.

    Fortunately someone else already thought of this, and made a similar
    inline into a #define in for device_schedule_callback(),
    [see commit 523ded71de0] so follow that precedent here.

    Also bubble up any __must_check that were used on the prev. wrapper inline
    functions up one to the real __register functions, to preserve any prev.
    sanity checks that were used in those instances.

    Signed-off-by: Paul Gortmaker

    Paul Gortmaker