1. 11 8月, 2010 5 次提交
    • A
      USB: UHCI: add support for Intel's wakeup flags · 0d436b42
      Alan Stern 提交于
      This patch (as1396) adds code to uhci-hcd to support the
      vendor-specific wakeup settings found in Intel's ICHx hardware.  A
      couple of unnecessary memory barriers are removed.  And the root hub
      isn't put back into the "suspended" state if power was lost during a
      system sleep -- there's not much point in doing so because the root hub
      will be resumed shortly.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      0d436b42
    • A
      USB: controller resume should check the root hub · ee0b9be8
      Alan Stern 提交于
      This patch (as1394) adds code to ehci-hcd, ohci-hcd, and uhci-hcd for
      automatically resuming the root hub when the controller is resumed, if
      the root hub has a wakeup request pending on some port.
      
      During resume from system sleep this doesn't matter, because the root
      hubs will naturally be resumed along with every other device in the
      system.  However it _will_ matter for runtime PM: If the controller is
      suspended and a remote wakeup request is received then the controller
      will autoresume, but we need to ensure that the root hub also
      autoresumes.  Otherwise the wakeup request would be ignored, the
      controller would go back to sleep, and the cycle would repeat a large
      number of times (I saw this happen before the patch was written).
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ee0b9be8
    • A
      USB: add do_wakeup parameter for PCI HCD suspend · 4147200d
      Alan Stern 提交于
      This patch (as1385) adds a "do_wakeup" parameter to the pci_suspend
      method used by PCI-based host controller drivers.  ehci-hcd in
      particular needs to know whether or not to enable wakeup when
      suspending a controller.  Although that information is currently
      available through device_may_wakeup(), when support is added for
      runtime suspend this will no longer be true.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      4147200d
    • A
      USB: convert usb_hcd bitfields into atomic flags · 541c7d43
      Alan Stern 提交于
      This patch (as1393) converts several of the single-bit fields in
      struct usb_hcd to atomic flags.  This is for safety's sake; not all
      CPUs can update bitfield values atomically, and these flags are used
      in multiple contexts.
      
      The flag fields that are set only during registration or removal can
      remain as they are, since non-atomic accesses at those times will not
      cause any problems.
      
      (Strictly speaking, the authorized_default flag should become atomic
      as well.  I didn't bother with it because it gets changed only via
      sysfs.  It can be done later, if anyone wants.)
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      541c7d43
    • A
      USB: UHCI: acquire spinlock before calling start_rh() · ba297edd
      Alan Stern 提交于
      This patch (as1392) fixes a bug in uhci-hcd: The start_rh() routine is
      supposed to be called with the private spinlock held.  If an IRQ comes
      in at just the wrong time, the driver will think the controller has
      died when in fact it simply hasn't start yet.
      
      The patch also addresses some issues that may prevent an URB from
      being unlinked after the controller has stopped.  This is an abnormal
      occurrence (ordinarily the controller stops only when the entire bus
      is suspended and hence there are no active URBs), so the pathways
      haven't gotten much testing.  These two changes may be a little more
      than is strictly necessary, but clearly they won't hurt.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      ba297edd
  2. 21 5月, 2010 1 次提交
  3. 03 3月, 2010 1 次提交
    • P
      USB: fix crash in uhci_scan_schedule · d23356da
      Pete Zaitcev 提交于
      When hardware is removed on a Stratus, the system may crash like this:
      
      ACPI: PCI interrupt for device 0000:7c:00.1 disabled
      Trying to free nonexistent resource <00000000a8000000-00000000afffffff>
      Trying to free nonexistent resource <00000000a4800000-00000000a480ffff>
      uhci_hcd 0000:7e:1d.0: remove, state 1
      usb usb2: USB disconnect, address 1
      usb 2-1: USB disconnect, address 2
      Unable to handle kernel paging request at 0000000000100100 RIP:
       [<ffffffff88021950>] :uhci_hcd:uhci_scan_schedule+0xa2/0x89c
      
       #4 [ffff81011de17e50] uhci_scan_schedule at ffffffff88021918
       #5 [ffff81011de17ed0] uhci_irq at ffffffff88023cb8
       #6 [ffff81011de17f10] usb_hcd_irq at ffffffff801f1c1f
       #7 [ffff81011de17f20] handle_IRQ_event at ffffffff8001123b
       #8 [ffff81011de17f50] __do_IRQ at ffffffff800ba749
      
      This occurs because an interrupt scans uhci->skelqh, which is
      being freed. We do the right thing: disable the interrupts in the
      device, and do not do any processing if the interrupt is shared
      with other source, but it's possible that another CPU gets
      delayed somewhere (e.g. loops) until we started freeing.
      
      The agreed-upon solution is to wait for interrupts to play out
      before proceeding. No other bareers are neceesary.
      
      A backport of this patch was tested on a 2.6.18 based kernel.
      Testing of 2.6.32-based kernels is under way, but it takes us
      forever (months) to turn this around. So I think it's a good
      patch and we should keep it.
      
      Tracked in RH bz#516851
      Signed-Off-By: NPete Zaitcev <zaitcev@redhat.com>
      Cc: stable <stable@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      d23356da
  4. 21 1月, 2010 1 次提交
  5. 16 9月, 2009 1 次提交
  6. 16 6月, 2009 3 次提交
  7. 18 2月, 2009 1 次提交
  8. 28 1月, 2009 1 次提交
    • R
      USB: Fix suspend-resume of PCI USB controllers · a15d95a0
      Rafael J. Wysocki 提交于
      Commit a0d4922d
      (USB: fix up suspend and resume for PCI host controllers) attempted
      to fix the suspend-resume of PCI USB controllers, but unfortunately
      it did that incorrectly and interrupts are left enabled by the USB
      controllers' ->suspend_late() callback as a result.  This leads to
      serious problems during suspend which are very difficult to debug.
      
      Fix the issue by removing the ->suspend_late() callback of PCI
      USB controllers and moving the code from there to the ->suspend()
      callback executed with interrupts enabled.  Additionally, make
      the ->resume() callback of PCI USB controllers execute
      pci_enable_wake(dev, PCI_D0, false) to disable wake-up from the
      full power state (PCI_D0).
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      Tested-by: NAndrey Borzenkov <arvidjaar@mail.ru>
      Tested-by: N"Jeff Chua" <jeff.chua.linux@gmail.com>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: "Zdenek Kabelac" <zdenek.kabelac@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a15d95a0
  9. 08 1月, 2009 1 次提交
    • A
      USB: fix up suspend and resume for PCI host controllers · a0d4922d
      Alan Stern 提交于
      This patch (as1192) rearranges the USB PCI host controller suspend and
      resume and resume routines:
      
      	Use pci_wake_from_d3() for enabling and disabling wakeup,
      	instead of pci_enable_wake().
      
      	Carry out the actual state change while interrupts are
      	disabled.
      
      	Change the order of the preparations to agree with the
      	general recommendation for PCI devices, instead of
      	messing around with the wakeup settings while the device
      	is in D3.
      
      		In .suspend:
      			Call the underlying driver to disable IRQ
      				generation;
      			pci_wake_from_d3(device_may_wakeup());
      			pci_disable_device();
      
      		In .suspend_late:
      			pci_save_state();
      			pci_set_power_state(D3hot);
      			(for PPC_PMAC) Disable ASIC clocks
      
      		In .resume_early:
      			(for PPC_PMAC) Enable ASIC clocks
      			pci_set_power_state(D0);
      			pci_restore_state();
      
      		In .resume:
      			pci_enable_device();
      			pci_set_master();
      			pci_wake_from_d3(0);
      			Call the underlying driver to reenable IRQ
      				generation
      
      	Add the necessary .suspend_late and .resume_early method
      	pointers to the PCI host controller drivers.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      CC: Rafael J. Wysocki <rjw@sisk.pl>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      a0d4922d
  10. 18 10月, 2008 2 次提交
  11. 03 5月, 2008 1 次提交
    • A
      USB: UHCI: disable remote wakeup when it's not needed · d8f12ab5
      Alan Stern 提交于
      This patch (as1084b) fixes the way uhci-hcd handles polling and
      remote wakeups for its root hubs.  When remote wakeup is disabled,
      neither interrupts nor polling should be enabled during a root-hub
      suspend.  Likewise, if interrupts are enabled during suspend then
      polling isn't needed.
      
      Furthermore the EGSM (Enter Global Suspend Mode) bit shouldn't be set
      in the Command register unless remote wakeup is enabled.  Apparently
      some controllers will issue a remote-wakeup interrupt whenever EGSM
      is on, even if Resume-Detect interrupts are supposedly disabled.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      d8f12ab5
  12. 25 4月, 2008 3 次提交
    • H
      USB: replace remaining __FUNCTION__ occurrences · 441b62c1
      Harvey Harrison 提交于
      __FUNCTION__ is gcc-specific, use __func__
      Signed-off-by: NHarvey Harrison <harvey.harrison@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      441b62c1
    • A
      USB: HCDs use the do_remote_wakeup flag · 58a97ffe
      Alan Stern 提交于
      When a USB device is suspended, whether or not it is enabled for
      remote wakeup depends on the device_may_wakeup() setting.  The setting
      is then saved in the do_remote_wakeup flag.
      
      Later on, however, the device_may_wakeup() value can change because of
      user activity.  So when testing whether a suspended device is or
      should be enabled for remote wakeup, we should always test
      do_remote_wakeup instead of device_may_wakeup().  This patch (as1076)
      makes that change for root hubs in several places.
      
      The patch also adjusts uhci-hcd so that when an autostopped controller
      is suspended, the remote wakeup setting agrees with the value recorded
      in the root hub's do_remote_wakeup flag.
      
      And the patch adjusts ehci-hcd so that wakeup events on selectively
      suspended ports (i.e., the bus itself isn't suspended) don't turn on
      the PME# wakeup signal.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      58a97ffe
    • A
      USB: clarify usage of hcd->suspend/resume methods · 7be7d741
      Alan Stern 提交于
      The .suspend and .resume method pointers in struct usb_hcd have not
      been fully understood by host-controller driver writers.  They are
      meant for use with PCI controllers; other platform-specific drivers
      generally should not refer to them.
      
      To try and clarify matters, this patch (as1065) renames those methods
      to .pci_suspend and .pci_resume.  It eliminates corresponding dead code
      and bogus references in the ohci-ssb and u132-hcd drivers.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      7be7d741
  13. 18 12月, 2007 1 次提交
  14. 10 10月, 2007 1 次提交
    • J
      drivers/firmware: const-ify DMI API and internals · 1855256c
      Jeff Garzik 提交于
      Three main sets of changes:
      
      1) dmi_get_system_info() return value should have been marked const,
         since callers should not be changing that data.
      
      2) const-ify DMI internals, since DMI firmware tables should,
         whenever possible, be marked const to ensure we never ever write to
         that data area.
      
      3) const-ify DMI API, to enable marking tables const where possible
         in low-level drivers.
      
      And if we're really lucky, this might enable some additional
      optimizations on the part of the compiler.
      
      The bulk of the changes are #2 and #3, which are interrelated.  #1 could
      have been a separate patch, but it was so small compared to the others,
      it was easier to roll it into this changeset.
      Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
      1855256c
  15. 20 7月, 2007 1 次提交
    • P
      mm: Remove slab destructors from kmem_cache_create(). · 20c2df83
      Paul Mundt 提交于
      Slab destructors were no longer supported after Christoph's
      c59def9f change. They've been
      BUGs for both slab and slub, and slob never supported them
      either.
      
      This rips out support for the dtor pointer from kmem_cache_create()
      completely and fixes up every single callsite in the kernel (there were
      about 224, not including the slab allocator definitions themselves,
      or the documentation references).
      Signed-off-by: NPaul Mundt <lethal@linux-sh.org>
      20c2df83
  16. 13 7月, 2007 1 次提交
    • A
      USB: Don't resume root hub if the controller is suspended · cfa59dab
      Alan Stern 提交于
      Root hubs can't be resumed if their parent controller device is still
      suspended.  This patch (as925) adds a check for that condition in
      hcd_bus_resume() and prevents it from being treated as a fatal
      controller failure.
      
      ehci-hcd is updated to add the corresponding test.  Unnecessary
      debugging messages are removed from uhci-hcd and dummy-hcd.  The
      error return code from dummy-hcd is changed to -ESHUTDOWN, the same as
      the others.  ohci-hcd doesn't need any changes.
      
      Suspend handling in the non-PCI host drivers is somewhat hit-and-miss.
      This patch shouldn't have any effect on them.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      cfa59dab
  17. 27 3月, 2007 1 次提交
  18. 24 2月, 2007 2 次提交
  19. 15 2月, 2007 1 次提交
    • T
      [PATCH] remove many unneeded #includes of sched.h · cd354f1a
      Tim Schmielau 提交于
      After Al Viro (finally) succeeded in removing the sched.h #include in module.h
      recently, it makes sense again to remove other superfluous sched.h includes.
      There are quite a lot of files which include it but don't actually need
      anything defined in there.  Presumably these includes were once needed for
      macros that used to live in sched.h, but moved to other header files in the
      course of cleaning it up.
      
      To ease the pain, this time I did not fiddle with any header files and only
      removed #includes from .c-files, which tend to cause less trouble.
      
      Compile tested against 2.6.20-rc2 and 2.6.20-rc2-mm2 (with offsets) on alpha,
      arm, i386, ia64, mips, powerpc, and x86_64 with allnoconfig, defconfig,
      allmodconfig, and allyesconfig as well as a few randconfigs on x86_64 and all
      configs in arch/arm/configs on arm.  I also checked that no new warnings were
      introduced by the patch (actually, some warnings are removed that were emitted
      by unnecessarily included header files).
      Signed-off-by: NTim Schmielau <tim@physik3.uni-rostock.de>
      Acked-by: NRussell King <rmk+kernel@arm.linux.org.uk>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      cd354f1a
  20. 08 2月, 2007 1 次提交
  21. 06 1月, 2007 2 次提交
  22. 21 12月, 2006 1 次提交
    • A
      UHCI: module parameter to ignore overcurrent changes · 5f8364b7
      Alan Stern 提交于
      Certain boards seem to like to issue false overcurrent notifications,
      for example on ports that don't have anything connected to them.  This
      looks like a hardware error, at the level of noise to those ports'
      overcurrent input signals (or non-debounced VBUS comparators).  This
      surfaces to users as truly massive amounts of syslog spam from khubd
      (which is appropriate for real hardware problems, except for the
      volume from multiple ports).
      
      Using this new "ignore_oc" flag helps such systems work more sanely,
      by preventing such indications from getting to khubd (and spamming
      syslog).  The downside is of course that true overcurrent errors will
      be masked; they'll appear as spontaneous disconnects, without the
      diagnostics that will let users troubleshoot issues like
      short-circuited cables.  In addition, controllers with no devices
      attached will be forced to poll for new devices rather than relying on
      interrupts, since each overcurrent event would generate a new
      interrupt.
      
      This patch (as826) is essentially a copy of David Brownell's ignore_oc
      patch for ehci-hcd, ported to uhci-hcd.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      5f8364b7
  23. 08 12月, 2006 1 次提交
  24. 18 10月, 2006 1 次提交
  25. 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
  26. 27 9月, 2006 1 次提交
  27. 26 9月, 2006 1 次提交
  28. 01 7月, 2006 1 次提交
  29. 22 6月, 2006 1 次提交
    • A
      [PATCH] UHCI: Improve FSBR-off timing · c5e3b741
      Alan Stern 提交于
      This patch (as707) improves the FSBR operation in uhci-hcd by turning it
      off more quickly when it isn't needed.  FSBR puts a noticeable load on a
      computer's PCI bus, so it should be disabled as soon as possible when it
      isn't in use.  The patch leaves it running for only 10 ms after the last
      URB stops using it, on the theory that this should be long enough for a
      driver to submit another URB if it wants keep FSBR going.
      Signed-off-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      c5e3b741