17 Oct, 2010

1 commit

  • If the device which fails to resume is part of a loadable kernel module
    it won't be checked at startup against the magic number stored in the
    RTC.

    Add a read-only sysfs attribute /sys/power/pm_trace_dev_match which
    contains a list of newline separated devices (usually just the one)
    which currently match the last magic number. This allows the device
    which is failing to resume to be found after the modules are loaded
    again.

    Signed-off-by: James Hogan
    Signed-off-by: Rafael J. Wysocki

    James Hogan
     

27 Feb, 2010

1 commit

  • Theoretically, the total time of system sleep transitions (suspend
    to RAM, hibernation) can be reduced by running suspend and resume
    callbacks of device drivers in parallel with each other. However,
    there are dependencies between devices such that we're not allowed
    to suspend the parent of a device before suspending the device
    itself. Analogously, we're not allowed to resume a device before
    resuming its parent.

    The most straightforward way to take these dependencies into accout
    is to start the async threads used for suspending and resuming
    devices at the core level, so that async_schedule() is called for
    each suspend and resume callback supposed to be executed
    asynchronously.

    For this purpose, introduce a new device flag, power.async_suspend,
    used to mark the devices whose suspend and resume callbacks are to be
    executed asynchronously (ie. in parallel with the main suspend/resume
    thread and possibly in parallel with each other) and helper function
    device_enable_async_suspend() allowing one to set power.async_suspend
    for given device (power.async_suspend is unset by default for all
    devices). For each device with the power.async_suspend flag set the
    PM core will use async_schedule() to execute its suspend and resume
    callbacks.

    The async threads started for different devices as a result of
    calling async_schedule() are synchronized with each other and with
    the main suspend/resume thread with the help of completions, in the
    following way:
    (1) There is a completion, power.completion, for each device object.
    (2) Each device's completion is reset before calling async_schedule()
    for the device or, in the case of devices with the
    power.async_suspend flags unset, before executing the device's
    suspend and resume callbacks.
    (3) During suspend, right before running the bus type, device type
    and device class suspend callbacks for the device, the PM core
    waits for the completions of all the device's children to be
    completed.
    (4) During resume, right before running the bus type, device type and
    device class resume callbacks for the device, the PM core waits
    for the completion of the device's parent to be completed.
    (5) The PM core completes power.completion for each device right
    after the bus type, device type and device class suspend (or
    resume) callbacks executed for the device have returned.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

25 May, 2008

1 commit


22 Jul, 2007

1 commit

  • Signed-off-by: Nigel Cunningham
    Cc: Randy Dunlap
    Cc: "Rafael J. Wysocki"
    Cc: Pavel Machek
    Acked-by: Linus Torvalds
    Signed-off-by: Andrew Morton
    Signed-off-by: Andi Kleen
    Signed-off-by: Linus Torvalds

    Nigel Cunningham
     

26 Sep, 2006

1 commit

  • Add the pm_trace attribute in /sys/power which has to be explicitly set to
    one to really enable the "PM tracing" code compiled in when CONFIG_PM_TRACE
    is set (which modifies the machine's CMOS clock in unpredictable ways).

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Pavel Machek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rafael J. Wysocki
     

25 Jun, 2006

1 commit

  • Considering that there isn't a lot of hw we can depend on during resume,
    this is about as good as it gets.

    This is x86-only for now, although the basic concept (and most of the
    code) will certainly work on almost any platform.

    Signed-off-by: Linus Torvalds

    Linus Torvalds