1. 13 7月, 2007 1 次提交
    • M
      USB: Fix NEC OHCI chip silicon bug · d576bb9f
      Michael Hanselmann 提交于
      This patch fixes a silicon bug in some NEC OHCI chips. The bug appears
      at random times and is very, very difficult to reproduce. Without the
      following patch, Linux would shut the chip and its associated devices
      down. In Apple PowerBooks this leads to an unusable keyboard and mouse
      (SSH still working). The idea of restarting the chip is taken from
      public Darwin code.
      Signed-off-by: NMichael Hanselmann <linux-kernel@hansmi.ch>
      Cc: David Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      d576bb9f
  2. 09 6月, 2007 1 次提交
  3. 21 12月, 2006 2 次提交
  4. 02 12月, 2006 5 次提交
  5. 17 11月, 2006 2 次提交
  6. 05 10月, 2006 1 次提交
    • D
      IRQ: Maintain regs pointer globally rather than passing to IRQ handlers · 7d12e780
      David Howells 提交于
      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
      handling.
      
      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:
      
      	set_irq_regs(old_regs);
      
      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
           irq_handler_t.
      Signed-Off-By: NDavid Howells <dhowells@redhat.com>
      (cherry picked from 1b16e7ac850969f38b375e511e3fa2f474a33867 commit)
      7d12e780
  7. 29 9月, 2006 3 次提交
  8. 28 9月, 2006 2 次提交
  9. 13 7月, 2006 1 次提交
  10. 21 3月, 2006 1 次提交
    • D
      [PATCH] USB: ohci uses driver model wakeup flags · 6a9062f3
      David Brownell 提交于
      This makes OHCI use the driver model wakeup control bits for its root hub
      (e.g. disable on amd756, because of chip erratum) and for the controller
      itself.  It no longer uses the hcd glue bits with those roles, and depends
      on the previous patch making the root hub available earlier.
      
      Note that on most platforms (boot code properly setting the RWC bit) this
      gives a partial workaround for the way PCI isn't currently flagging devices
      that support PME# signals.  (Because of odd PCI init sequencing on PPC.)
      That's because many OHCI controllers support "legacy PCI PM" ... without
      involving any PCI PM capability.
      
      USB wakeup from STR, if it works on your system, may still involve
      tweaking things by hand in /proc/acpi/wakeup.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      6a9062f3
  11. 05 1月, 2006 1 次提交
    • A
      [PATCH] USB: Remove USB private semaphore · 9ad3d6cc
      Alan Stern 提交于
      This patch (as605) removes the private udev->serialize semaphore,
      relying instead on the locking provided by the embedded struct device's
      semaphore.  The changes are confined to the core, except that the
      usb_trylock_device routine now uses the return convention of
      down_trylock rather than down_read_trylock (they return opposite values
      for no good reason).
      
      A couple of other associated changes are included as well:
      
      	Now that we aren't concerned about HCDs that avoid using the
      	hcd glue layer, usb_disconnect no longer needs to acquire the
      	usb_bus_lock -- that can be done by usb_remove_hcd where it
      	belongs.
      
      	Devices aren't locked over the same scope of code in
      	usb_new_device and hub_port_connect_change as they used to be.
      	This shouldn't cause any trouble.
      
      Along with the preceding driver core patch, this needs a lot of testing.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      9ad3d6cc
  12. 30 11月, 2005 1 次提交
    • B
      [PATCH] USB: Fix USB suspend/resume crasher (#2) · 8de98402
      Benjamin Herrenschmidt 提交于
      This patch closes the IRQ race and makes various other OHCI & EHCI code
      path safer vs. suspend/resume.
      I've been able to (finally !) successfully suspend and resume various
      Mac models, with or without USB mouse plugged, or plugging while asleep,
      or unplugging while asleep etc... all without a crash.
      
      Alan, please verify the UHCI bit I did, I only verified that it builds.
      It's very simple so I wouldn't expect any issue there. If you aren't
      confident, then just drop the hunks that change uhci-hcd.c
      
      I also made the patch a little bit more "safer" by making sure the store
      to the interrupt register that disables interrupts is not posted before
      I set the flag and drop the spinlock.
      
      Without this patch, you cannot reliably sleep/wakeup any recent Mac, and
      I suspect PCs have some more sneaky issues too (they don't frankly crash
      with machine checks because x86 tend to silently swallow PCI errors but
      that won't last afaik, at least PCI Express will blow up in those
      situations, but the USB code may still misbehave).
      Signed-off-by: NBenjamin Herrenschmidt <benh@kernel.crashing.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      8de98402
  13. 29 10月, 2005 3 次提交
    • A
      [PATCH] USB: Rename hcd->hub_suspend to hcd->bus_suspend · 0c0382e3
      Alan Stern 提交于
      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: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      0c0382e3
    • D
      [PATCH] OHCI PM updates · f197b2c5
      David Brownell 提交于
      This simplifies the OHCI root hub suspend logic:
      
       - Uses new usbcore root hub calls to make autosuspend work again:
      	* Uses a newish usbcore root hub wakeup mechanism,
      	  making requests to khubd not keventd.
      	* Uses an even newer sibling suspend hook.
      
       - Expect someone always made usbcore call ohci_hub_suspend() before bus
         glue fires; and that ohci_hub_resume() is only called after that bus
         glue ran.  Previously, only CONFIG_USB_SUSPEND promised those things.
         (Includes updates to PCI and OMAP bus glue.)
      
       - Handle a not-noticed-before special case during resume from one of
         the swsusp snapshots when using "usb-handoff":  the controller isn't
         left in RESET state.  (A bug to fix in the usb-handoff code...)
      
      Also cleans up a minor debug printk glitch, and switches an mdelay over
      to an msleep (how did that stick around for so long?).
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
       drivers/usb/host/ohci-dbg.c  |    4 ----
       drivers/usb/host/ohci-hcd.c  |    2 +-
       drivers/usb/host/ohci-hub.c  |   42 ++++++++++++------------------------------
       drivers/usb/host/ohci-mem.c  |    1 -
       drivers/usb/host/ohci-omap.c |   36 ++++++++++++------------------------
       drivers/usb/host/ohci-pci.c  |   40 ++++++++--------------------------------
       drivers/usb/host/ohci.h      |    1 -
       7 files changed, 33 insertions(+), 93 deletions(-)
      f197b2c5
    • D
      [PATCH] remove some USB_SUSPEND dependencies · 8ad7fe16
      David Brownell 提交于
      This simplifies some of the PM-related #ifdeffing by recognizing
      that USB_SUSPEND depends on PM.  Also, OHCI drivers were often
      testing for USB_SUSPEND when they should have tested just PM.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      
       drivers/usb/core/hcd.c          |    2 ++
       drivers/usb/host/ohci-hcd.c     |    2 +-
       drivers/usb/host/ohci-hub.c     |    4 ++--
       drivers/usb/host/ohci-omap.c    |    2 +-
       drivers/usb/host/ohci-pci.c     |    2 +-
       drivers/usb/host/ohci-ppc-soc.c |    4 ++--
       drivers/usb/host/ohci-pxa27x.c  |    2 +-
       drivers/usb/host/ohci-s3c2410.c |    3 +--
       drivers/usb/host/ohci-sa1111.c  |    2 +-
       9 files changed, 12 insertions(+), 11 deletions(-)
      8ad7fe16
  14. 13 9月, 2005 1 次提交
  15. 13 7月, 2005 1 次提交
    • K
      [PATCH] USB: coverity: (desc->bitmap)[] overrun fix · b2134bcd
      KAMBAROV, ZAUR 提交于
      The length of the array desc->bitmap is 3, and not 4:
      
      Definitions involved:
      
      In drivers/usb/core/hcd.h
      
      464  	#define bitmap 	DeviceRemovable
      
      In drivers/usb/host/ohci-hub.c
      
      395  		struct usb_hub_descriptor	*desc
      
      In drivers/usb/core/hub.h
      
      130  	struct usb_hub_descriptor {
      131  		__u8  bDescLength;
      132  		__u8  bDescriptorType;
      133  		__u8  bNbrPorts;
      134  		__u16 wHubCharacteristics;
      135  		__u8  bPwrOn2PwrGood;
      136  		__u8  bHubContrCurrent;
      137  		    	/* add 1 bit for hub status change; round to bytes */
      138  		__u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8];
      139  		__u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8];
      140  	} __attribute__ ((packed));
      
      In include/linux/usb.h
      
      306  	#define USB_MAXCHILDREN		(16)
      
      This defect was found automatically by Coverity Prevent, a static analysis
      tool.
      
      (akpm: this code should be shot.  Field `bitmap' doesn't exist in struct
      usb_hub_descriptor.  And this .c file is #included in
      drivers/usb/host/ohci-hcd.c, and someone somewhere #defines `bitmap' to
      `DeviceRemovable'.
      
      >From a maintainability POV it would be better to memset the whole array
      beforehand - I changed the patch to do that)
      Signed-off-by: NZaur Kambarov <zkambarov@coverity.com>
      Cc: <linux-usb-devel@lists.sourceforge.net?
      Signed-off-by: NAndrew Morton <akpm@osdl.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      b2134bcd
  16. 17 4月, 2005 1 次提交
    • L
      Linux-2.6.12-rc2 · 1da177e4
      Linus Torvalds 提交于
      Initial git repository build. I'm not bothering with the full history,
      even though we have it. We can create a separate "historical" git
      archive of that later if we want to, and in the meantime it's about
      3.2GB when imported into git - space that would just make the early
      git days unnecessarily complicated, when we don't have a lot of good
      infrastructure for it.
      
      Let it rip!
      1da177e4