1. 18 10月, 2008 3 次提交
  2. 24 9月, 2008 1 次提交
  3. 22 7月, 2008 1 次提交
    • D
      USB: ehci-hcd unlink speedups · b9638011
      David Brownell 提交于
      This patch fixes some performance bugs observed with some workloads
      when unlinking EHCI queue header (QH) descriptors from the async ring
      (control/bulk schedule).
      
      The mechanism intended to defer unlinking an empty QH (so there is no
      penalty in common cases where it's quickly reused) was not working as
      intended.  Sometimes the unlink was scheduled:
      
       - too quickly ... which can be a *strong* negative effect, since
         that QH becomes unavailable for immediate re-use;
      
       - too slowly ... wasting DMA cycles, usually a minor issue except
         for increased bus contention and power usage;
      
      Plus there was an extreme case of "too slowly":  a logical error in the
      IAA watchdog-timer conversion meant that sometimes the unlink never
      got scheduled.
      
      The fix replaces a simple counter with a timestamp derived from the
      controller's 8 KHz microframe counter, and adjusts the timer usage
      for some issues associated with HZ being less than 8K.
      
      (Based on a patch originally by Alan Stern, and good troubleshooting
      from  Leonid.)
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: Leonid <leonidv11@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b9638011
  4. 30 5月, 2008 2 次提交
    • G
      Revert "USB: EHCI: fix performance regression" · bb7e6984
      Greg Kroah-Hartman 提交于
      This reverts commit fa38dfcc.
      
      It wasn't really a regression and David and Alan are still working
      through the issues reported.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      bb7e6984
    • A
      USB: EHCI: fix performance regression · fa38dfcc
      Alan Stern 提交于
      This patch (as1099) fixes a performance regression in ehci-hcd.  The
      fundamental problem is that queue headers get removed from the
      schedule too quickly, since the code checks for a counter advancing
      rather than making an actual time-based check.  The latency involved
      in removing the queue header and then relinking it can severely
      degrade certain kinds of workloads.
      
      The patch replaces a simple counter with a timestamp derived from the
      controller's uframe value.  In addition, the delay for unlinking an
      idle queue header is increased from 5 ms to 10 ms; since some
      controllers (nVidia) have a latency of up to 1 ms for unlinking, this
      reduces the relative impact from 20% to 10%.
      
      Finally, a logical error left over from the IAA watchdog-timer
      conversion is corrected.  Now the driver will always either unlink an
      idle queue header or set up a timer to unlink it later.  The old code
      would sometimes fail to do either.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: David Brownell <david-b@pacbell.net>
      Cc: Leonid <leonidv11@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      fa38dfcc
  5. 25 4月, 2008 5 次提交
  6. 28 3月, 2008 1 次提交
  7. 11 3月, 2008 1 次提交
    • D
      USB: fix ehci unlink regressions · e82cc128
      David Brownell 提交于
      The recent EHCI driver update to split the IAA watchdog timer out from
      the other timers made several things work better, but not everything;
      and it created a couple new issues in bugzilla.  Ergo this patch:
      
        - Handle a should-be-rare SMP race between the watchdog firing
          and (very late) IAA interrupts;
      
        - Remove a shouldn't-have-been-added WARN_ON() test;
      
        - Guard against one observed OOPS;
      
        - If this watchdog fires during clean HC shutdown, it should act
          as a NOP instead of interfering with the shutdown sequence;
      
        - Guard against silicon errata hypothesized by some vendors:
            * IAA status latch broken, but IAAD cleared OK;
            * IAAD wasn't cleared when IAA status got reported;
      
      The WARN_ON is in bugzilla as 10168; the OOPS as 10078; these are
      both regressions.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Tested-by: NGordon Farquharson <gordonfarquharson@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e82cc128
  8. 22 2月, 2008 2 次提交
  9. 02 2月, 2008 6 次提交
  10. 29 11月, 2007 1 次提交
    • D
      USB: fix up EHCI startup synchronization · 1cb52658
      David Brownell 提交于
      A recent patch added software synchronization during EHCI startup,
      so ports aren't switched away from the companion controllers after
      resets have started.  This patch adds a short delay letting hardware
      finish that port switching before any new resets begin ... so both
      ends of that hardware race window are closed.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Cc: Dave Miller <davem@davemloft.net>
      Cc: Dely Sy <dely.l.sy@intel.com>
      Cc: stable <stable@kernel.org>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      1cb52658
  11. 13 10月, 2007 2 次提交
    • A
      USB: mutual exclusion for EHCI init and port resets · 32fe0198
      Alan Stern 提交于
      This patch (as999) fixes a problem that sometimes shows up when host
      controller driver modules are loaded in the wrong order.  If ehci-hcd
      happens to initialize an EHCI controller while the companion OHCI or
      UHCI controller is in the middle of a port reset, the reset can fail
      and the companion may get very confused.  The patch adds an
      rw-semaphore and uses it to keep EHCI initialization and port resets
      mutually exclusive.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Acked-by: NDavid Brownell <david-b@pacbell.net>
      Cc: David Miller <davem@davemloft.net>
      Cc: Dely L Sy <dely.l.sy@intel.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      32fe0198
    • A
      USB: make HCDs responsible for managing endpoint queues · e9df41c5
      Alan Stern 提交于
      This patch (as954) implements a suggestion of David Brownell's.  Now
      the host controller drivers are responsible for linking and unlinking
      URBs to/from their endpoint queues.  This eliminates the possiblity of
      strange situations where usbcore thinks an URB is linked but the HCD
      thinks it isn't.  It also means HCDs no longer have to check for URBs
      being dequeued before they were fully enqueued.
      
      In addition to the core changes, this requires changing every host
      controller driver and the root-hub URB handler.  For the most part the
      required changes are fairly small; drivers have to call
      usb_hcd_link_urb_to_ep() in their urb_enqueue method,
      usb_hcd_check_unlink_urb() in their urb_dequeue method, and
      usb_hcd_unlink_urb_from_ep() before giving URBs back.  A few HCDs make
      matters more complicated by the way they split up the flow of control.
      
      In addition some method interfaces get changed.  The endpoint argument
      for urb_enqueue is now redundant so it is removed.  The unlink status
      is required by usb_hcd_check_unlink_urb(), so it has been added to
      urb_dequeue.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: David Brownell <david-b@pacbell.net>
      CC: Olav Kongas <ok@artecdesign.ee>
      CC: Tony Olech <tony.olech@elandigitalsystems.com>
      CC: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e9df41c5
  12. 21 8月, 2007 1 次提交
    • L
      Revert "USB: EHCI cpufreq fix" · 8eb891fc
      Linus Torvalds 提交于
      This reverts commit 196705c9.  It was
      reported to cause a regression by Daniel Exner, and Arjan van de Ven
      points out that we actually already have infrastructure in place for
      setting limits on acceptable DMA latency that would be the much more
      correct fix for the problem with some Broadcom EHCI controllers.
      
      Fixed up trivial conflicts due to the changes to support big-endian host
      controller descriptors in drivers/usb/host/{ehci-sched.c,ehci.h}.
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      8eb891fc
  13. 13 7月, 2007 7 次提交
  14. 09 5月, 2007 1 次提交
  15. 12 4月, 2007 1 次提交
    • A
      EHCI: fix remote wakeup regression in 2.6.21-rc · 61e8b858
      Alan Stern 提交于
      There is one significant difference between the behavior of root hubs
      (as embodied in host controller hardware) and external hubs: When a
      remote-wakeup signal is received, an external hub sends an interrupt
      message at the _end_ of the resume sequence but a root hub generates
      and interrupt at the _beginning_ of the resume sequence.  The host
      system must poll for the end of the sequence.
      
      When ehci-hcd was converted to interrupt-driven operation instead of
      using polling, the remaining need for this particular poll was
      overlooked.  This patch (as894) fixes the problem.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      61e8b858
  16. 17 2月, 2007 2 次提交
  17. 16 2月, 2007 1 次提交
  18. 08 2月, 2007 2 次提交
    • M
      USB: switch ehci-hcd to new polling scheme · 1d619f12
      Marcelo Tosatti 提交于
      Switch ehci-hcd to use the new polling scheme, which reports root
      hub status changes via the interrupt handler, in an asynchronous
      fashion. Doing so disables polling for status changes (whose handler is
      rh_timer_func).
      
      Tested on a Geode GX machine, which is now capable of running at =~ 5
      timer interrupts per second (in the -rt tree), resulting in significant
      power savings.
      Signed-off-by: NMarcelo Tosatti <mtosatti@redhat.com>
      Cc: David Brownell <david-b@pacbell.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      1d619f12
    • A
      EHCI: force high-speed devices to run at full speed · 57e06c11
      Alan Stern 提交于
      This patch (as710) adds a sysfs class-device attribute file named
      "companion" for EHCI controllers.  The file contains a list of port
      numbers that are dedicated to the companion controller; by writing a
      port number to the file the user can force a high-speed device
      attached directly to the computer to run at full speed.  (As far as I
      know it is not possible to do this for a device attached to an
      external hub.)  A port is removed from the file by writing the
      negative of its port number.
      
      Several users have asked for this facility and it seems like a useful
      thing to have.  Every now and then one runs across a device which
      behaves much better at full speed than at high speed.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: David Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      57e06c11