1. 12 Oct, 2007 2 commits
    • Alan Stern's avatar
      USB: remove unnecessary tests in isp116x and sl811 · e39ab592
      Alan Stern authored
      This patch (as962) cleans up some code I forgot to remove earlier in
      the isp116x and sl811 HCDs.  There is no longer any need to check for
      unlink-during-submit; it can't happen since the endpoint queues are
      now under the protection of the HCD-private spinlock.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      CC: David Brownell <david-b@pacbell.net>
      CC: Olav Kongas <ok@artecdesign.ee>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    • Alan Stern's avatar
      USB: make HCDs responsible for managing endpoint queues · e9df41c5
      Alan Stern authored
      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
      Signed-off-by: default avatarAlan 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: default avatarGreg Kroah-Hartman <gregkh@suse.de>
  2. 19 Jul, 2007 1 commit
    • Alan Stern's avatar
      isp116x-hcd: prepare for urb->status · 1b4cd43b
      Alan Stern authored
      This patch (as931b), adapted from a patch by Olav Kongas, makes a small
      set of conservative changes to the isp116x-hcd driver in preparation
      for the removal of urb->status.
      	finish_request() is moved up in the source and is called
      	as soon as the URB is known to have completed, rather than
      	after all the active endpoints have been scanned.
      	The status of a completed URB is kept in a local variable
      	and copied to urb->status only when the URB is about to be
      	given back.
      	-EREMOTEIO error status for control transfers is set after
      	the status stage rather than when the short packet arrives.
      	Some unnecessary uses of urb->lock are removed.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Cc: Olav Kongas <ok@artecdesign.ee>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
  3. 16 Feb, 2007 1 commit
  4. 05 Oct, 2006 1 commit
    • David Howells's avatar
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells authored
      Maintain a per-CPU global "struct pt_regs *" variable which can be used instead
      of passing regs around manually through all ~1800 interrupt handlers in the
      Linux kernel.
      The regs pointer is used in few places, but it potentially costs both stack
      space and code to pass it around.  On the FRV arch, removing the regs parameter
      from all the genirq function results in a 20% speed up of the IRQ exit path
      (ie: from leaving timer_interrupt() to leaving do_IRQ()).
      Where appropriate, an arch may override the generic storage facility and do
      something different with the variable.  On FRV, for instance, the address is
      maintained in GR28 at all times inside the kernel as part of general exception
      Having looked over the code, it appears that the parameter may be handed down
      through up to twenty or so layers of functions.  Consider a USB character
      device attached to a USB hub, attached to a USB controller that posts its
      interrupts through a cascaded auxiliary interrupt controller.  A character
      device driver may want to pass regs to the sysrq handler through the input
      layer which adds another few layers of parameter passing.
      I've build this code with allyesconfig for x86_64 and i386.  I've runtested the
      main part of the code on FRV and i386, though I can't test most of the drivers.
      I've also done partial conversion for powerpc and MIPS - these at least compile
      with minimal configurations.
      This will affect all archs.  Mostly the changes should be relatively easy.
      Take do_IRQ(), store the regs pointer at the beginning, saving the old one:
      	struct pt_regs *old_regs = set_irq_regs(regs);
      And put the old one back at the end:
      Don't pass regs through to generic_handle_irq() or __do_IRQ().
      In timer_interrupt(), this sort of change will be necessary:
      	-	update_process_times(user_mode(regs));
      	-	profile_tick(CPU_PROFILING, regs);
      	+	update_process_times(user_mode(get_irq_regs()));
      	+	profile_tick(CPU_PROFILING);
      I'd like to move update_process_times()'s use of get_irq_regs() into itself,
      except that i386, alone of the archs, uses something other than user_mode().
      Some notes on the interrupt handling in the drivers:
       (*) input_dev() is now gone entirely.  The regs pointer is no longer stored in
           the input_dev struct.
       (*) finish_unlinks() in drivers/usb/host/ohci-q.c needs checking.  It does
           something different depending on whether it's been supplied with a regs
           pointer or not.
       (*) Various IRQ handler function pointers have been moved to type
      Signed-Off-By: default avatarDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
  5. 27 Sep, 2006 2 commits
  6. 02 Jul, 2006 1 commit
  7. 21 Jun, 2006 2 commits
  8. 20 Mar, 2006 2 commits
  9. 31 Jan, 2006 1 commit
  10. 04 Jan, 2006 5 commits
  11. 09 Nov, 2005 1 commit
  12. 29 Oct, 2005 1 commit
  13. 28 Oct, 2005 5 commits
    • Alan Stern's avatar
      [PATCH] USB: Rename hcd->hub_suspend to hcd->bus_suspend · 0c0382e3
      Alan Stern authored
      This patch (as580) is perhaps the only result from the long discussion I
      had with David about his changes to the root-hub suspend/resume code.  It
      renames the hub_suspend and hub_resume methods in struct usb_hcd to
      bus_suspend and bus_resume.  These are more descriptive names, since the
      methods really do suspend or resume an entire USB bus, and less likely to
      be confused with the hub_suspend and hub_resume routines in hub.c.
      It also takes David's advice about removing the layer of bus glue, where
      those methods are called.  And it implements a related change that David
      made to the other HCDs but forgot to put into dummy_hcd.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    • David Brownell's avatar
      [PATCH] ISP116x PM updates · ccdcf77a
      David Brownell authored
      This makes the isp116x driver stop using usb_suspend_device() and
      usb_resume_device() ... usbcore now calls to the root hub methods,
      removing the need for this.  It also switches from keventd to khubd
      for remote wakeup.  (Compile tested.)
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
       drivers/usb/host/isp116x-hcd.c |   29 ++++-------------------------
       drivers/usb/host/isp116x.h     |    1 -
       2 files changed, 4 insertions(+), 26 deletions(-)
    • David Brownell's avatar
      [PATCH] remove usb_suspend_device() parameter · 390a8c34
      David Brownell authored
      This patch removes the extra usb_suspend_device() parameter.  The original
      reason to pass that parameter was so that this routine could suspend any
      active children.  A previous patch removed that functionality ... leaving
      no reason to pass the parameter.  A close analogy is pci_set_power_state,
      which doesn't need a pm_message_t either.
      On the internal code path that comes through the driver model, the parameter
      is now used to distinguish cases where USB devices need to "freeze" but not
      suspend.   It also checks for an error case that's accessible through sysfs:
      attempting to suspend a device before its interfaces (or for hubs, ports).
      Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
       drivers/usb/core/hub.c         |   34 +++++++++++++++++++++-------------
       drivers/usb/core/usb.c         |   23 +++++++++++++++++++++--
       drivers/usb/host/ehci-hcd.c    |    2 +-
       drivers/usb/host/isp116x-hcd.c |    2 +-
       drivers/usb/host/ohci-pci.c    |    2 +-
       include/linux/usb.h            |    2 +-
       6 files changed, 46 insertions(+), 19 deletions(-)
    • Russell King's avatar
      [PATCH] DRIVER MODEL: Get rid of the obsolete tri-level suspend/resume callbacks · 9480e307
      Russell King authored
      In PM v1, all devices were called at SUSPEND_DISABLE level.  Then
      all devices were called at SUSPEND_SAVE_STATE level, and finally
      SUSPEND_POWER_DOWN level.  However, with PM v2, to maintain
      compatibility for platform devices, I arranged for the PM v2
      suspend/resume callbacks to call the old PM v1 suspend/resume
      callbacks three times with each level in order so that existing
      drivers continued to work.
      Since this is obsolete infrastructure which is no longer necessary,
      we can remove it.  Here's an (untested) patch to do exactly that.
      Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    • Al Viro's avatar
      [PATCH] gfp_t: drivers/usb · 55016f10
      Al Viro authored
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  14. 17 Oct, 2005 1 commit
    • Olav Kongas's avatar
      [PATCH] isp116x-hcd: fix handling of short transfers · e9b765de
      Olav Kongas authored
      Increased use of scatter-gather by usb-storage driver after 2.6.13 has
      exposed a buggy codepath in isp116x-hcd, which was probably never
      visited before: bug happened only for those urbs, for which
      URB_SHORT_NOT_OK was set AND short transfer occurred.
      The fix attached was tested in 2 ways: (a) it fixed failing
      initialization of a flash drive with an embedded hub; (b) the fix was
      tested with 'usbtest' against a modified g_zero driver (on top of
      net2280), which generated short bulk IN transfers of various lengths
      including multiples and non-multiples of max_packet_length.
      Signed-off-by: default avatarOlav Kongas <ok@artecdesign.ee>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
  15. 08 Sep, 2005 6 commits
  16. 07 Sep, 2005 1 commit
  17. 04 Aug, 2005 1 commit
  18. 12 Jul, 2005 2 commits
  19. 27 Jun, 2005 3 commits