1. 24 Jan, 2012 2 commits
  2. 03 Jan, 2012 1 commit
  3. 15 Nov, 2011 1 commit
  4. 04 Nov, 2011 1 commit
    • Alan Stern's avatar
      USB: Update last_busy time after autosuspend fails · b2c0a863
      Alan Stern authored
      Originally, the runtime PM core would send an idle notification
      whenever a suspend attempt failed.  The idle callback routine could
      then schedule a delayed suspend for some time later.
      
      However this behavior was changed by commit
      f71648d7
      
       (PM / Runtime: Remove idle
      notification after failing suspend).  No notifications were sent, and
      there was no clear mechanism to retry failed suspends.
      
      This caused problems for the usbhid driver, because it fails
      autosuspend attempts as long as a key is being held down.  A companion
      patch changes the PM core's behavior, but we also need to change the
      USB core.  In particular, this patch (as1493) updates the device's
      last_busy time when an autosuspend fails, so that the PM core will
      retry the autosuspend in the future when the delay time expires
      again.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Tested-by: default avatarHenrik Rydberg <rydberg@euromail.se>
      Cc: <stable@kernel.org>
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      b2c0a863
  5. 31 Oct, 2011 1 commit
  6. 26 Sep, 2011 1 commit
  7. 09 Sep, 2011 1 commit
  8. 19 Aug, 2011 1 commit
  9. 21 Jun, 2011 1 commit
  10. 15 Jun, 2011 1 commit
    • Alan Stern's avatar
      USB: don't let errors prevent system sleep · 0af212ba
      Alan Stern authored
      
      
      This patch (as1464) implements the recommended policy that most errors
      during suspend or hibernation should not prevent the system from going
      to sleep.  In particular, failure to suspend a USB driver or a USB
      device should not prevent the sleep from succeeding:
      
      Failure to suspend a device won't matter, because the device will
      automatically go into suspend mode when the USB bus stops carrying
      packets.  (This might be less true for USB-3.0 devices, but let's not
      worry about them now.)
      
      Failure of a driver to suspend might lead to trouble later on when the
      system wakes up, but it isn't sufficient reason to prevent the system
      from going to sleep.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      CC: <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      0af212ba
  11. 18 Mar, 2011 1 commit
  12. 13 Mar, 2011 1 commit
    • Sarah Sharp's avatar
      usb: Always return 0 or -EBUSY to the runtime PM core. · db7c7c0a
      Sarah Sharp authored
      
      
      The PM core reacts badly when the return code from usb_runtime_suspend()
      is not 0, -EAGAIN, or -EBUSY.  The PM core regards this as a fatal error,
      and refuses to run anymore PM helper functions.  In particular,
      usbfs_open() and other usbfs functions will fail because the PM core will
      return an error code when usb_autoresume_device() is called.  This causes
      libusb and/or lsusb to either hang or segfault.
      
      If a USB device cannot suspend for some reason (e.g. a hub doesn't report
      it has remote wakeup capabilities), we still want lsusb and other
      userspace programs to work.  So return -EBUSY, which will fill people's
      log files with failed tries, but will ensure userspace still works.
      Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
      db7c7c0a
  13. 24 Dec, 2010 1 commit
  14. 16 Nov, 2010 4 commits
  15. 22 Oct, 2010 1 commit
  16. 10 Aug, 2010 2 commits
  17. 30 Jun, 2010 1 commit
    • Alan Stern's avatar
      USB: obey the sysfs power/wakeup setting · 48826626
      Alan Stern authored
      This patch (as1403) is a partial reversion of an earlier change
      (commit 5f677f1d
      
       "USB: fix remote
      wakeup settings during system sleep").  After hearing from a user, I
      realized that remote wakeup should be enabled during system sleep
      whenever userspace allows it, and not only if a driver requests it
      too.
      
      Indeed, there could be a device with no driver, that does nothing but
      generate a wakeup request when the user presses a button.  Such a
      device should be allowed to do its job.
      
      The problem fixed by the earlier patch -- device generating a wakeup
      request for no reason, causing system suspend to abort -- was also
      addressed by a later patch ("USB: don't enable remote wakeup by
      default", accepted but not yet merged into mainline).  The device
      won't be able to generate the bogus wakeup requests because it will be
      disabled for remote wakeup by default.  Hence this reversion will not
      re-introduce any old problems.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Cc: stable <stable@kernel.org> [.34]
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      
      48826626
  18. 04 Jun, 2010 1 commit
  19. 20 May, 2010 4 commits
  20. 22 Apr, 2010 2 commits
    • Alan Stern's avatar
      USB: put claimed interfaces in the "suspended" state · 571dc79d
      Alan Stern authored
      
      
      This patch (as1370) fixes a bug in the USB runtime power management
      code.  When a driver claims an interface, it doesn't expect to need to
      call usb_autopm_get_interface() or usb_autopm_put_interface() for
      runtime PM to work.  Runtime PM can be controlled by the driver's
      primary interface; the additional interfaces it claims shouldn't
      interfere.  As things stand, the claimed interfaces will prevent the
      device from autosuspending.
      
      To fix this problem, the patch sets interfaces to the suspended state
      when they are claimed.
      
      Also, although in theory this shouldn't matter, the patch changes the
      suspend code so that interfaces are suspended in reverse order from
      detection and resuming.  This is how the PM core works, and we ought
      to use the same approach.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Debugged-and-tested-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      571dc79d
    • Alan Stern's avatar
      USB: fix remote wakeup settings during system sleep · 5f677f1d
      Alan Stern authored
      This patch (as1363) changes the way USB remote wakeup is handled
      during system sleeps.  It won't be enabled unless an interface driver
      specifically needs it.  Also, it won't be enabled during the FREEZE or
      QUIESCE phases of hibernation, when the system doesn't respond to
      wakeup events anyway.  Finally, if the device is already
      runtime-suspended with remote wakeup enabled, but wakeup is supposed
      to be disabled for the system sleep, the device gets woken up so that
      it can be suspended again with the proper wakeup setting.
      
      This will fix problems people have reported with certain USB webcams
      that generate wakeup requests when they shouldn't, and as a result
      cause system suspends to fail.  See
      
      	https://bugs.launchpad.net/ubuntu/+source/linux/+bug/515109
      
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Tested-by: default avatarErik Andrén <erik.andren@gmail.com>
      CC: <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      5f677f1d
  21. 30 Mar, 2010 1 commit
    • Tejun Heo's avatar
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo authored
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Guess-its-ok-by: default avatarChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  22. 07 Mar, 2010 1 commit
    • Greg Kroah-Hartman's avatar
      Driver core: create lock/unlock functions for struct device · 8e9394ce
      Greg Kroah-Hartman authored
      
      
      In the future, we are going to be changing the lock type for struct
      device (once we get the lockdep infrastructure properly worked out)  To
      make that changeover easier, and to possibly burry the lock in a
      different part of struct device, let's create some functions to lock and
      unlock a device so that no out-of-core code needs to be changed in the
      future.
      
      This patch creates the device_lock/unlock/trylock() functions, and
      converts all in-tree users to them.
      
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Jean Delvare <khali@linux-fr.org>
      Cc: Dave Young <hidave.darkstar@gmail.com>
      Cc: Ming Lei <tom.leiming@gmail.com>
      Cc: Jiri Kosina <jkosina@suse.cz>
      Cc: Phil Carmody <ext-phil.2.carmody@nokia.com>
      Cc: Arjan van de Ven <arjan@linux.intel.com>
      Cc: Cornelia Huck <cornelia.huck@de.ibm.com>
      Cc: Rafael J. Wysocki <rjw@sisk.pl>
      Cc: Pavel Machek <pavel@ucw.cz>
      Cc: Len Brown <len.brown@intel.com>
      Cc: Magnus Damm <damm@igel.co.jp>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Cc: Randy Dunlap <randy.dunlap@oracle.com>
      Cc: Stefan Richter <stefanr@s5r6.in-berlin.de>
      Cc: David Brownell <dbrownell@users.sourceforge.net>
      Cc: Vegard Nossum <vegard.nossum@gmail.com>
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      Cc: Alex Chiang <achiang@hp.com>
      Cc: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andrew Patterson <andrew.patterson@hp.com>
      Cc: Yu Zhao <yu.zhao@intel.com>
      Cc: Dominik Brodowski <linux@dominikbrodowski.net>
      Cc: Samuel Ortiz <sameo@linux.intel.com>
      Cc: Wolfram Sang <w.sang@pengutronix.de>
      Cc: CHENG Renquan <rqcheng@smu.edu.sg>
      Cc: Oliver Neukum <oliver@neukum.org>
      Cc: Frans Pop <elendil@planet.nl>
      Cc: David Vrabel <david.vrabel@csr.com>
      Cc: Kay Sievers <kay.sievers@vrfy.org>
      Cc: Sarah Sharp <sarah.a.sharp@linux.intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      
      8e9394ce
  23. 02 Mar, 2010 6 commits
    • Alan Stern's avatar
      USB: remove debugging message for uevent constructions · cceffe93
      Alan Stern authored
      
      
      This patch (as1332) removes an unneeded and annoying debugging message
      announcing all USB uevent constructions.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      cceffe93
    • Alan Stern's avatar
      USB: convert to the runtime PM framework · 9bbdf1e0
      Alan Stern authored
      
      
      This patch (as1329) converts the USB stack over to the PM core's
      runtime PM framework.  This involves numerous changes throughout
      usbcore, especially to hub.c and driver.c.  Perhaps the most notable
      change is that CONFIG_USB_SUSPEND now depends on CONFIG_PM_RUNTIME
      instead of CONFIG_PM.
      
      Several fields in the usb_device and usb_interface structures are no
      longer needed.  Some code which used to depend on CONFIG_USB_PM now
      depends on CONFIG_USB_SUSPEND (requiring some rearrangement of header
      files).
      
      The only visible change in behavior should be that following a system
      sleep (resume from RAM or resume from hibernation), autosuspended USB
      devices will be resumed just like everything else.  They won't remain
      suspended.  But if they aren't in use then they will naturally
      autosuspend again in a few seconds.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      9bbdf1e0
    • Alan Stern's avatar
      USB: rearrange functions in driver.c · 0c590e23
      Alan Stern authored
      
      
      This patch (as1328) reorders the functions in drivers/usb/core/driver.c
      so as to put all the routines dependent on CONFIG_PM in one place.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      0c590e23
    • Alan Stern's avatar
      USB: implement usb_enable_autosuspend · 088f7fec
      Alan Stern authored
      
      
      This patch (as1326) adds usb_enable_autosuspend() and
      usb_disable_autosuspend() routines for use by drivers.  If a driver
      knows that its device can handle suspends and resumes correctly, it
      can enable autosuspend all by itself.  This is equivalent to the user
      writing "auto" to the device's power/level attribute.
      
      The implementation differs slightly from what it used to be.  Now
      autosuspend is disabled simply by doing usb_autoresume_device() (to
      increment the usage counter) and enabled by doing
      usb_autosuspend_device() (to decrement the usage counter).
      
      The set_level() attribute method is updated to use the new routines,
      and the USB Power-Management documentation is updated.
      
      The patch adds a usb_enable_autosuspend() call to the hub driver's
      probe routine, allowing the special-case code for hubs in quirks.c to
      be removed.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      088f7fec
    • Alan Stern's avatar
      USB: change locking for device-level autosuspend · 62e299e6
      Alan Stern authored
      
      
      This patch (as1323) changes the locking requirements for
      usb_autosuspend_device(), usb_autoresume_device(), and
      usb_try_autosuspend_device().  This isn't a very important change;
      mainly it's meant to make the locking more uniform.
      
      The most tricky part of the patch involves changes to usbdev_open().
      To avoid an ABBA locking problem, it was necessary to reduce the
      region protected by usbfs_mutex.  Since that mutex now protects only
      against simultaneous open and remove, this posed no difficulty -- its
      scope was larger than necessary.
      
      And it turns out that usbfs_mutex is no longer needed in
      usbdev_release() at all.  The list of usbfs "ps" structures is now
      protected by the device lock instead of by usbfs_mutex.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      62e299e6
    • Alan Stern's avatar
      USB: rearrange code in usb_probe_interface · 0f3dda9f
      Alan Stern authored
      
      
      This patch (as1322) reverses the two outcomes of an "if" statement in
      usb_probe_interface(), to avoid an unnecessary level of indentation.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      0f3dda9f
  24. 26 Feb, 2010 1 commit
    • Alan Stern's avatar
      USB: implement non-tree resume ordering constraints for PCI host controllers · 6d19c009
      Alan Stern authored
      
      
      This patch (as1331) adds non-tree ordering constraints needed for
      proper resume of PCI USB host controllers from hibernation.  The main
      issue is that non-high-speed devices must not be resumed before the
      high-speed root hub, because it is the ehci_bus_resume() routine which
      takes care of handing the device connection over to the companion
      controller.  If the device resume is attempted before the handover
      then the device won't be found and it will be treated as though it had
      disconnected.
      
      The patch adds a new field to the usb_bus structure; for each
      full/low-speed bus this field will contain a pointer to the companion
      high-speed bus (if one exists).  It is used during normal device
      resume; if the hs_companion pointer isn't NULL then we wait for the
      root-hub device on the hs_companion bus.
      
      A secondary issue is that an EHCI controlller shouldn't be resumed
      before any of its companions.  On some machines I have observed
      handovers failing if the companion controller is reinitialized after
      the handover.  Thus, the EHCI resume routine must wait for the
      companion controllers to be resumed.
      
      The patch also fixes a small bug in usb_hcd_pci_probe(); an error path
      jumps to the wrong label, causing a memory leak.
      
      [rjw: Fixed compilation for CONFIG_PM_SLEEP unset.]
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Acked-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
      6d19c009
  25. 11 Dec, 2009 2 commits
    • CHENG Renquan's avatar
      USB: add remove_id sysfs attr for usb drivers · 0c7a2b72
      CHENG Renquan authored
      Accroding commit 0994375e
      
      , which is adding remove_id sysfs attr
      for pci drivers, for management tools dynamically bind/unbind
      a pci/usb devices to a specified drivers; with this patch,
      the management tools can be simplied.
      
      And the original code didn't handle the failure of
      usb_create_newid_file, fixed in this patch.
      Signed-off-by: default avatarCHENG Renquan <rqcheng@smu.edu.sg>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      0c7a2b72
    • Alan Stern's avatar
      USB: prepare for changover to Runtime PM framework · 8e4ceb38
      Alan Stern authored
      
      
      This patch (as1303) revises the USB Power Management infrastructure to
      make it compatible with the new driver-model Runtime PM framework:
      
      	Drivers are no longer allowed to access intf->pm_usage_cnt
      	directly; the PM framework manages its own usage counters.
      
      	usb_autopm_set_interface() is eliminated, because it directly
      	sets intf->pm_usage_cnt.
      
      	usb_autopm_enable() and usb_autopm_disable() are eliminated,
      	because they call usb_autopm_set_interface().
      
      	usb_autopm_get_interface_no_resume() and
      	usb_autopm_put_interface_no_suspend() are added.  They
      	correspond to pm_runtime_get_noresume() and
      	pm_runtime_put_noidle() in the PM framework.
      
      	The power/level attribute no longer accepts "suspend", only
      	"on" and "auto".  The PM framework doesn't allow devices to be
      	forced into a suspended mode.
      
      The hub driver contains the only code that violates the new
      guidelines.  It is updated to use the new interface routines instead.
      Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
      8e4ceb38