1. 04 12月, 2009 1 次提交
  2. 23 9月, 2009 9 次提交
  3. 08 8月, 2009 1 次提交
    • A
      USB: EHCI: fix two new bugs related to Clear-TT-Buffer · 7a0f0d95
      Alan Stern 提交于
      This patch (as1273) fixes two(!) bugs introduced by the new
      Clear-TT-Buffer implementation in ehci-hcd.
      
      	It is now possible for an idle QH to have some URBs on its
      	queue -- this will happen if a Clear-TT-Buffer is pending for
      	the QH's endpoint.  Consequently we should not issue a warning
      	when someone tries to unlink an URB from an idle QH; instead
      	we should process the request immediately.
      
      	The refcounts for QHs could get messed up, because
      	submit_async() would increment the refcount when calling
      	qh_link_async() and qh_link_async() would then refuse to link
      	the QH into the schedule if a Clear-TT-Buffer was pending.
      	Instead we should increment the refcount only when the QH
      	actually is added to the schedule.  The current code tries to
      	be clever by leaving the refcount alone if an unlink is
      	immediately followed by a relink; the patch changes this to an
      	unconditional decrement and increment (although they occur in
      	the opposite order).
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: David Brownell <david-b@pacbell.net>
      Tested-by: NManuel Lauss <manuel.lauss@gmail.com>
      Tested-by: NMatthijs Kooijman <matthijs@stdin.nl>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      
      7a0f0d95
  4. 13 7月, 2009 2 次提交
    • A
      USB: EHCI: use the new clear_tt_buffer interface · 914b7012
      Alan Stern 提交于
      This patch (as1256) changes ehci-hcd and all the other drivers in the
      EHCI family to make use of the new clear_tt_buffer callbacks.  When a
      Clear-TT-Buffer request is in progress for a QH, the QH is not allowed
      to be linked into the async schedule until the request is finished.
      At that time, if there are any URBs queued for the QH, it is linked
      into the async schedule.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      914b7012
    • A
      USB: EHCI: update toggle state for linked QHs · a455212d
      Alan Stern 提交于
      This is an update to the "usb-ehci-update-toggle-state-for-linked-qhs"
      patch.  Since an HCD's endpoint_reset method can be called in
      interrupt context, it mustn't assume that interrupts are enabled or
      that it can sleep.
      
      So we revert to the original way of refreshing QHs' toggle bits.  Now
      the endpoint_reset method merely clears the toggle flag in the device
      structure (as was done before) and starts an async QH unlink.  When the
      QH is linked again, after the unlink finishes and an URB is queued,
      the qh_refresh() routine will update the QH's toggle bit.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Tested-by: NDavid <david@unsolicited.net>
      CC: David Brownell <david-b@pacbell.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
      a455212d
  5. 16 6月, 2009 2 次提交
    • A
      USB: EHCI: update toggle state for linked QHs · b18ffd49
      Alan Stern 提交于
      This patch (as1245) fixes a bug in ehci-hcd.  When an URB is queued
      for an endpoint whose QH is already in the LINKED state, the QH
      doesn't get refreshed.  As a result, if usb_clear_halt() was called
      during the time that the QH was linked but idle, the data toggle value
      in the QH doesn't get reset.
      
      The symptom is that after a clear_halt, data gets lost and transfers
      time out.  This problem is starting to show up now because the
      "ehci-hcd unlink speedups" patch causes QHs with no queued URBs to
      remain linked for a suitable time.
      
      The patch utilizes the new endpoint_reset mechanism to fix the
      problem.  When an endpoint is reset, the new method forcibly unlinks
      the QH (if necessary) and safely updates the toggle value.  This
      allows qh_update() to be simplified and avoids using usb_device's
      toggle bits in a rather unintuitive way.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: David Brownell <david-b@pacbell.net>
      Tested-by: NDavid <david@unsolicited.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b18ffd49
    • G
      USB: EHCI: use the new usb debugfs directory · 08f4e586
      Greg Kroah-Hartman 提交于
      All usb debugfs files should be behind the usb directory, not at the
      root of debugfs.
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      08f4e586
  6. 07 4月, 2009 1 次提交
  7. 25 3月, 2009 1 次提交
  8. 28 2月, 2009 1 次提交
  9. 14 11月, 2008 1 次提交
    • A
      USB: EHCI: fix handling of dead controllers · 67b2e029
      Alan Stern 提交于
      This patch (as1165) makes a few small changes in the logic used by
      ehci-hcd when it encounters a controller error:
      
      	Instead of printing out the masked status, it prints the
      	original status as read directly from the hardware.
      
      	It doesn't check for the STS_HALT status bit before taking
      	action.  The mere fact that the STS_FATAL bit is set means
      	that something bad has happened and the controller needs to
      	be reset.  With the old code this test could never succeed
      	because the STS_HALT bit was masked out from the status.
      
      I anticipate that this will prevent the occasional "irq X: nobody cared"
      problem people encounter when their EHCI controllers die.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Cc: David Brownell <david-b@pacbell.net>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      67b2e029
  10. 21 10月, 2008 1 次提交
  11. 18 10月, 2008 5 次提交
  12. 24 9月, 2008 1 次提交
  13. 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
  14. 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
  15. 25 4月, 2008 5 次提交
  16. 28 3月, 2008 1 次提交
  17. 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
  18. 22 2月, 2008 2 次提交
  19. 02 2月, 2008 2 次提交