10 Sep, 2018

1 commit

  • commit 3df6f61fff49632492490fb6e42646b803a9958a upstream.

    Commit ea0212f40c6 (power: auto select CONFIG_SRCU) made the code in
    drivers/base/power/wakeup.c use SRCU instead of RCU, but it forgot to
    select CONFIG_SRCU in Kconfig, which leads to the following build
    error if CONFIG_SRCU is not selected somewhere else:

    drivers/built-in.o: In function `wakeup_source_remove':
    (.text+0x3c6fc): undefined reference to `synchronize_srcu'
    drivers/built-in.o: In function `pm_print_active_wakeup_sources':
    (.text+0x3c7a8): undefined reference to `__srcu_read_lock'
    drivers/built-in.o: In function `pm_print_active_wakeup_sources':
    (.text+0x3c84c): undefined reference to `__srcu_read_unlock'
    drivers/built-in.o: In function `device_wakeup_arm_wake_irqs':
    (.text+0x3d1d8): undefined reference to `__srcu_read_lock'
    drivers/built-in.o: In function `device_wakeup_arm_wake_irqs':
    (.text+0x3d228): undefined reference to `__srcu_read_unlock'
    drivers/built-in.o: In function `device_wakeup_disarm_wake_irqs':
    (.text+0x3d24c): undefined reference to `__srcu_read_lock'
    drivers/built-in.o: In function `device_wakeup_disarm_wake_irqs':
    (.text+0x3d29c): undefined reference to `__srcu_read_unlock'
    drivers/built-in.o:(.data+0x4158): undefined reference to `process_srcu'

    Fix this error by selecting CONFIG_SRCU when PM_SLEEP is enabled.

    Fixes: ea0212f40c6 (power: auto select CONFIG_SRCU)
    Cc: 4.2+ # 4.2+
    Signed-off-by: zhangyi (F)
    [ rjw: Minor subject/changelog fixups ]
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    zhangyi (F)
     

03 Aug, 2018

1 commit

  • [ Upstream commit 62fc00a6611a0014c85763f9def1fc07c15d1302 ]

    The `s2idle_lock' is acquired during suspend while interrupts are
    disabled even on RT. The lock is acquired for short sections only.
    Make it a RAW lock which avoids "sleeping while atomic" warnings on RT.

    Signed-off-by: Sebastian Andrzej Siewior
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Sebastian Andrzej Siewior
     

17 Jul, 2018

1 commit

  • commit fc14eebfc20854a38fd9f1d93a42b1783dad4d17 upstream.

    syzbot is reporting NULL pointer dereference at snapshot_write() [1].
    This is because data->handle is zero-cleared by ioctl(SNAPSHOT_FREE).
    Fix this by checking data_of(data->handle) != NULL before using it.

    [1] https://syzkaller.appspot.com/bug?id=828a3c71bd344a6de8b6a31233d51a72099f27fd

    Signed-off-by: Tetsuo Handa
    Reported-by: syzbot
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Greg Kroah-Hartman

    Tetsuo Handa
     

26 Apr, 2018

1 commit

  • [ Upstream commit 328008a72d38b5bde6491e463405c34a81a65d3e ]

    The declaration for swsusp_arch_resume marks it as 'asmlinkage', but the
    definition in x86-32 does not, and it fails to include the header with the
    declaration. This leads to a warning when building with
    link-time-optimizations:

    kernel/power/power.h:108:23: error: type of 'swsusp_arch_resume' does not match original declaration [-Werror=lto-type-mismatch]
    extern asmlinkage int swsusp_arch_resume(void);
    ^
    arch/x86/power/hibernate_32.c:148:0: note: 'swsusp_arch_resume' was previously declared here
    int swsusp_arch_resume(void)

    This moves the declaration into a globally visible header file and fixes up
    both x86 definitions to match it.

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Thomas Gleixner
    Cc: Len Brown
    Cc: Andi Kleen
    Cc: Nicolas Pitre
    Cc: linux-pm@vger.kernel.org
    Cc: "Rafael J. Wysocki"
    Cc: Pavel Machek
    Cc: Bart Van Assche
    Link: https://lkml.kernel.org/r/20180202145634.200291-2-arnd@arndb.de
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     

20 Dec, 2017

1 commit

  • [ Upstream commit 95b982b45122c57da2ee0b46cce70775e1d987af ]

    Problem: This flag does not get cleared currently in the suspend or
    resume path in the following cases:

    * In case some driver's suspend routine returns an error.
    * Successful s2idle case
    * etc?

    Why is this a problem: What happens is that the next suspend attempt
    could fail even though the user did not enable the flag by writing to
    /sys/power/wakeup_count. This is 1 use case how the issue can be seen
    (but similar use case with driver suspend failure can be thought of):

    1. Read /sys/power/wakeup_count
    2. echo count > /sys/power/wakeup_count
    3. echo freeze > /sys/power/wakeup_count
    4. Let the system suspend, and wakeup the system using some wake source
    that calls pm_wakeup_event() e.g. power button or something.
    5. Note that the combined wakeup count would be incremented due
    to the pm_wakeup_event() in the resume path.
    6. After resuming the events_check_enabled flag is still set.

    At this point if the user attempts to freeze again (without writing to
    /sys/power/wakeup_count), the suspend would fail even though there has
    been no wake event since the past resume.

    Address that by clearing the flag just before a resume is completed,
    so that it is always cleared for the corner cases mentioned above.

    Signed-off-by: Rajat Jain
    Acked-by: Pavel Machek
    Signed-off-by: Rafael J. Wysocki
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Rajat Jain
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

29 Sep, 2017

1 commit

  • The role of the ->wake() platform callback for suspend-to-idle is to
    deal with possible spurious wakeups, among other things. The ACPI
    implementation of it, acpi_s2idle_wake(), additionally checks the
    conditions for entering the Low Power S0 Idle state by the platform
    and reports the ones that have not been met.

    However, the ->wake() platform callback is invoked after calling
    dpm_noirq_resume_devices(), which means that the power states of some
    devices may have changed since s2idle_enter() returned, so some unmet
    Low Power S0 Idle conditions may be reported incorrectly as a result
    of that.

    To avoid these false positives, reorder the invocations of the
    dpm_noirq_resume_devices() routine and the ->wake() platform callback
    in s2idle_loop().

    Fixes: 726fb6b4f2a8 (ACPI / PM: Check low power idle constraints for debug only)
    Tested-by: Srinivas Pandruvada
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

13 Sep, 2017

1 commit


08 Sep, 2017

1 commit

  • Pull block layer updates from Jens Axboe:
    "This is the first pull request for 4.14, containing most of the code
    changes. It's a quiet series this round, which I think we needed after
    the churn of the last few series. This contains:

    - Fix for a registration race in loop, from Anton Volkov.

    - Overflow complaint fix from Arnd for DAC960.

    - Series of drbd changes from the usual suspects.

    - Conversion of the stec/skd driver to blk-mq. From Bart.

    - A few BFQ improvements/fixes from Paolo.

    - CFQ improvement from Ritesh, allowing idling for group idle.

    - A few fixes found by Dan's smatch, courtesy of Dan.

    - A warning fixup for a race between changing the IO scheduler and
    device remova. From David Jeffery.

    - A few nbd fixes from Josef.

    - Support for cgroup info in blktrace, from Shaohua.

    - Also from Shaohua, new features in the null_blk driver to allow it
    to actually hold data, among other things.

    - Various corner cases and error handling fixes from Weiping Zhang.

    - Improvements to the IO stats tracking for blk-mq from me. Can
    drastically improve performance for fast devices and/or big
    machines.

    - Series from Christoph removing bi_bdev as being needed for IO
    submission, in preparation for nvme multipathing code.

    - Series from Bart, including various cleanups and fixes for switch
    fall through case complaints"

    * 'for-4.14/block' of git://git.kernel.dk/linux-block: (162 commits)
    kernfs: checking for IS_ERR() instead of NULL
    drbd: remove BIOSET_NEED_RESCUER flag from drbd_{md_,}io_bio_set
    drbd: Fix allyesconfig build, fix recent commit
    drbd: switch from kmalloc() to kmalloc_array()
    drbd: abort drbd_start_resync if there is no connection
    drbd: move global variables to drbd namespace and make some static
    drbd: rename "usermode_helper" to "drbd_usermode_helper"
    drbd: fix race between handshake and admin disconnect/down
    drbd: fix potential deadlock when trying to detach during handshake
    drbd: A single dot should be put into a sequence.
    drbd: fix rmmod cleanup, remove _all_ debugfs entries
    drbd: Use setup_timer() instead of init_timer() to simplify the code.
    drbd: fix potential get_ldev/put_ldev refcount imbalance during attach
    drbd: new disk-option disable-write-same
    drbd: Fix resource role for newly created resources in events2
    drbd: mark symbols static where possible
    drbd: Send P_NEG_ACK upon write error in protocol != C
    drbd: add explicit plugging when submitting batches
    drbd: change list_for_each_safe to while(list_first_entry_or_null)
    drbd: introduce drbd_recv_header_maybe_unplug
    ...

    Linus Torvalds
     

07 Sep, 2017

1 commit

  • Cpusets vs. suspend-resume is _completely_ broken. And it got noticed
    because it now resulted in non-cpuset usage breaking too.

    On suspend cpuset_cpu_inactive() doesn't call into
    cpuset_update_active_cpus() because it doesn't want to move tasks about,
    there is no need, all tasks are frozen and won't run again until after
    we've resumed everything.

    But this means that when we finally do call into
    cpuset_update_active_cpus() after resuming the last frozen cpu in
    cpuset_cpu_active(), the top_cpuset will not have any difference with
    the cpu_active_mask and this it will not in fact do _anything_.

    So the cpuset configuration will not be restored. This was largely
    hidden because we would unconditionally create identity domains and
    mobile users would not in fact use cpusets much. And servers what do use
    cpusets tend to not suspend-resume much.

    An addition problem is that we'd not in fact wait for the cpuset work to
    finish before resuming the tasks, allowing spurious migrations outside
    of the specified domains.

    Fix the rebuild by introducing cpuset_force_rebuild() and fix the
    ordering with cpuset_wait_for_hotplug().

    Reported-by: Andy Lutomirski
    Signed-off-by: Peter Zijlstra (Intel)
    Cc:
    Cc: Andy Lutomirski
    Cc: Linus Torvalds
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Rafael J. Wysocki
    Cc: Tejun Heo
    Cc: Thomas Gleixner
    Fixes: deb7aa308ea2 ("cpuset: reorganize CPU / memory hotplug handling")
    Link: http://lkml.kernel.org/r/20170907091338.orwxrqkbfkki3c24@hirez.programming.kicks-ass.net
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

04 Sep, 2017

1 commit

  • * pm-sleep:
    ACPI / PM: Check low power idle constraints for debug only
    PM / s2idle: Rename platform operations structure
    PM / s2idle: Rename ->enter_freeze to ->enter_s2idle
    PM / s2idle: Rename freeze_state enum and related items
    PM / s2idle: Rename PM_SUSPEND_FREEZE to PM_SUSPEND_TO_IDLE
    ACPI / PM: Prefer suspend-to-idle over S3 on some systems
    platform/x86: intel-hid: Wake up Dell Latitude 7275 from suspend-to-idle
    PM / suspend: Define pr_fmt() in suspend.c
    PM / suspend: Use mem_sleep_labels[] strings in messages
    PM / sleep: Put pm_test under CONFIG_PM_SLEEP_DEBUG
    PM / sleep: Check pm_wakeup_pending() in __device_suspend_noirq()
    PM / core: Add error argument to dpm_show_time()
    PM / core: Split dpm_suspend_noirq() and dpm_resume_noirq()
    PM / s2idle: Rearrange the main suspend-to-idle loop
    PM / timekeeping: Print debug messages when requested
    PM / sleep: Mark suspend/hibernation start and finish
    PM / sleep: Do not print debug messages by default
    PM / suspend: Export pm_suspend_target_state

    Rafael J. Wysocki
     

24 Aug, 2017

1 commit

  • This way we don't need a block_device structure to submit I/O. The
    block_device has different life time rules from the gendisk and
    request_queue and is usually only available when the block device node
    is open. Other callers need to explicitly create one (e.g. the lightnvm
    passthrough code, or the new nvme multipathing code).

    For the actual I/O path all that we need is the gendisk, which exists
    once per block device. But given that the block layer also does
    partition remapping we additionally need a partition index, which is
    used for said remapping in generic_make_request.

    Note that all the block drivers generally want request_queue or
    sometimes the gendisk, so this removes a layer of indirection all
    over the stack.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Jens Axboe

    Christoph Hellwig
     

18 Aug, 2017

1 commit

  • For SoC to achieve its lowest power platform idle state a set of hardware
    preconditions must be met. These preconditions or constraints can be
    obtained by issuing a device specific method (_DSM) with function "1".
    Refer to the document provided in the link below.

    Here during initialization (from attach() callback of LPS0 device), invoke
    function 1 to get the device constraints. Each enabled constraint is
    stored in a table.

    The devices in this table are used to check whether they were in required
    minimum state, while entering suspend. This check is done from platform
    freeze wake() callback, only when /sys/power/pm_debug_messages attribute
    is non zero.

    If any constraint is not met and device is ACPI power managed then it
    prints the device information to kernel logs.

    Also if debug is enabled in acpi/sleep.c, the constraint table and state
    of each device on wake is dumped in kernel logs.

    Since pm_debug_messages_on setting is used as condition to check
    constraints outside kernel/power/main.c, pm_debug_messages_on is changed
    to a global variable.

    Link: http://www.uefi.org/sites/default/files/resources/Intel_ACPI_Low_Power_S0_Idle.pdf
    Signed-off-by: Srinivas Pandruvada
    Signed-off-by: Rafael J. Wysocki

    Srinivas Pandruvada
     

11 Aug, 2017

4 commits

  • Rename struct platform_freeze_ops to platform_s2idle_ops to make it
    clear that the callbacks in it are used during suspend-to-idle
    suspend/resume transitions and rename the related functions,
    variables and so on accordingly.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • Rename the freeze_state enum representing the suspend-to-idle state
    machine states to s2idle_states and rename the related variables and
    functions accordingly.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • To make it clear that the symbol in question refers to
    suspend-to-idle, rename it from PM_SUSPEND_FREEZE to
    PM_SUSPEND_TO_IDLE.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • As Tetsuo points out:
    "Commit 385386cff4c6 ("mm: vmstat: move slab statistics from zone to
    node counters") broke "Slab:" field of /proc/meminfo . It shows nearly
    0kB"

    In addition to /proc/meminfo, this problem also affects the slab
    counters OOM/allocation failure info dumps, can cause early -ENOMEM from
    overcommit protection, and miscalculate image size requirements during
    suspend-to-disk.

    This is because the patch in question switched the slab counters from
    the zone level to the node level, but forgot to update the global
    accessor functions to read the aggregate node data instead of the
    aggregate zone data.

    Use global_node_page_state() to access the global slab counters.

    Fixes: 385386cff4c6 ("mm: vmstat: move slab statistics from zone to node counters")
    Link: http://lkml.kernel.org/r/20170801134256.5400-1-hannes@cmpxchg.org
    Signed-off-by: Johannes Weiner
    Reported-by: Tetsuo Handa
    Acked-by: Michal Hocko
    Cc: Josef Bacik
    Cc: Vladimir Davydov
    Cc: Stefan Agner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Johannes Weiner
     

05 Aug, 2017

1 commit

  • Modify the ACPI system sleep support setup code to select
    suspend-to-idle as the default system sleep state if
    (1) the ACPI_FADT_LOW_POWER_S0 flag is set in the FADT and
    (2) the Low Power Idle S0 _DSM interface has been discovered and
    (3) the default sleep state was not selected from the kernel command
    line.

    The main motivation for this change is that systems where the (1) and
    (2) conditions are met typically ship with OSes that don't exercise
    the S3 path in the platform firmware which remains untested and turns
    out to be non-functional at least in some cases.

    Signed-off-by: Rafael J. Wysocki
    Tested-by: Mario Limonciello

    Rafael J. Wysocki
     

25 Jul, 2017

5 commits


23 Jul, 2017

1 commit

  • The messages printed by tk_debug_account_sleep_time() are basically
    useful for system sleep debugging, so print them only when the other
    debug messages from the core suspend/hibernate code are enabled.

    While at it, make it clear that the messages from
    tk_debug_account_sleep_time() are about timekeeping suspend
    duration, because in general timekeeping may be suspeded and
    resumed for multiple times during one system suspend-resume cycle.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

22 Jul, 2017

3 commits

  • Regardless of whether or not debug messages from the core system
    suspend/hibernation code are enabled, it is useful to know when
    system-wide transitions start and finish (or fail), so print "info"
    messages at these points.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Mark Salyzyn

    Rafael J. Wysocki
     
  • Debug messages from the system suspend/hibernation infrastructure can
    fill up the entire kernel log buffer in some cases and anyway they
    are only useful for debugging. They depend on CONFIG_PM_DEBUG, but
    that is set as a rule as some generally useful diagnostic facilities
    depend on it too.

    For this reason, avoid printing those messages by default, but make
    it possible to turn them on as needed with the help of a new sysfs
    attribute under /sys/power/.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     
  • Have the core suspend/resume framework store the system-wide suspend
    state (suspend_state_t) we are about to enter, and expose it to drivers
    via pm_suspend_target_state in order to retrieve that. The state is
    assigned in suspend_devices_and_enter().

    This is useful for platform specific drivers that may need to take a
    slightly different suspend/resume path based on the system's
    suspend/resume state being entered.

    Signed-off-by: Florian Fainelli
    Acked-by: Pavel Machek
    Signed-off-by: Rafael J. Wysocki

    Florian Fainelli
     

11 Jul, 2017

2 commits

  • Pull more power management updates from Rafael Wysocki:
    "These revert one recent change in the generic power domains
    framework, fix a recently introduced build issue in there and
    constify attribute_group structures in some places.

    Specifics:

    - Revert a recent change in the generic power domains (genpd)
    framework that led to regressions and turned out the be misguided
    (Rafael Wysocki).

    - Fix a recently introduced build issue in the generic power domains
    (genpd) framework (Arnd Bergmann).

    - Constify attribute_group structures in the PM core, the cpufreq
    stats code and in intel_pstate (Arvind Yadav)"

    * tag 'pm-extra-4.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
    cpufreq: intel_pstate: constify attribute_group structures
    cpufreq: cpufreq_stats: constify attribute_group structures
    PM / sleep: constify attribute_group structures
    PM / Domains: provide pm_genpd_poweroff_noirq() stub
    Revert "PM / Domains: Handle safely genpd_syscore_switch() call on non-genpd device"

    Linus Torvalds
     
  • * pm-domains:
    PM / Domains: provide pm_genpd_poweroff_noirq() stub
    Revert "PM / Domains: Handle safely genpd_syscore_switch() call on non-genpd device"

    * pm-sleep:
    PM / sleep: constify attribute_group structures

    * pm-cpufreq:
    cpufreq: intel_pstate: constify attribute_group structures
    cpufreq: cpufreq_stats: constify attribute_group structures

    Rafael J. Wysocki
     

07 Jul, 2017

1 commit

  • This header always exists, so doesn't require an ifdef around its
    inclusion. When CONFIG_ARCH_HAS_SET_MEMORY=y it includes the asm
    header, otherwise it provides empty versions of the set_memory_xx()
    routines.

    Link: http://lkml.kernel.org/r/1498717781-29151-2-git-send-email-mpe@ellerman.id.au
    Signed-off-by: Michael Ellerman
    Acked-by: Kees Cook
    Acked-by: Laura Abbott
    Cc: Daniel Borkmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Michael Ellerman
     

05 Jul, 2017

2 commits

  • Pull power management updates from Rafael Wysocki:
    "The big ticket items here are the rework of suspend-to-idle in order
    to add proper support for power button wakeup from it on recent Dell
    laptops and the rework of interfaces exporting the current CPU
    frequency on x86.

    In addition to that, support for a few new pieces of hardware is
    added, the PCI/ACPI device wakeup infrastructure is simplified
    significantly and the wakeup IRQ framework is fixed to unbreak the IRQ
    bus locking infrastructure.

    Also, there are some functional improvements for intel_pstate, tools
    updates and small fixes and cleanups all over.

    Specifics:

    - Rework suspend-to-idle to allow it to take wakeup events signaled
    by the EC into account on ACPI-based platforms in order to properly
    support power button wakeup from suspend-to-idle on recent Dell
    laptops (Rafael Wysocki).

    That includes the core suspend-to-idle code rework, support for the
    Low Power S0 _DSM interface, and support for the ACPI INT0002
    Virtual GPIO device from Hans de Goede (required for USB keyboard
    wakeup from suspend-to-idle to work on some machines).

    - Stop trying to export the current CPU frequency via /proc/cpuinfo
    on x86 as that is inaccurate and confusing (Len Brown).

    - Rework the way in which the current CPU frequency is exported by
    the kernel (over the cpufreq sysfs interface) on x86 systems with
    the APERF and MPERF registers by always using values read from
    these registers, when available, to compute the current frequency
    regardless of which cpufreq driver is in use (Len Brown).

    - Rework the PCI/ACPI device wakeup infrastructure to remove the
    questionable and artificial distinction between "devices that can
    wake up the system from sleep states" and "devices that can
    generate wakeup signals in the working state" from it, which allows
    the code to be simplified quite a bit (Rafael Wysocki).

    - Fix the wakeup IRQ framework by making it use SRCU instead of RCU
    which doesn't allow sleeping in the read-side critical sections,
    but which in turn is expected to be allowed by the IRQ bus locking
    infrastructure (Thomas Gleixner).

    - Modify some computations in the intel_pstate driver to avoid
    rounding errors resulting from them (Srinivas Pandruvada).

    - Reduce the overhead of the intel_pstate driver in the HWP
    (hardware-managed P-states) mode and when the "performance" P-state
    selection algorithm is in use by making it avoid registering
    scheduler callbacks in those cases (Len Brown).

    - Rework the energy_performance_preference sysfs knob in intel_pstate
    by changing the values that correspond to different symbolic hint
    names used by it (Len Brown).

    - Make it possible to use more than one cpuidle driver at the same
    time on ARM (Daniel Lezcano).

    - Make it possible to prevent the cpuidle menu governor from using
    the 0 state by disabling it via sysfs (Nicholas Piggin).

    - Add support for FFH (Fixed Functional Hardware) MWAIT in ACPI C1 on
    AMD systems (Yazen Ghannam).

    - Make the CPPC cpufreq driver take the lowest nonlinear performance
    information into account (Prashanth Prakash).

    - Add support for hi3660 to the cpufreq-dt driver, fix the imx6q
    driver and clean up the sfi, exynos5440 and intel_pstate drivers
    (Colin Ian King, Krzysztof Kozlowski, Octavian Purdila, Rafael
    Wysocki, Tao Wang).

    - Fix a few minor issues in the generic power domains (genpd)
    framework and clean it up somewhat (Krzysztof Kozlowski, Mikko
    Perttunen, Viresh Kumar).

    - Fix a couple of minor issues in the operating performance points
    (OPP) framework and clean it up somewhat (Viresh Kumar).

    - Fix a CONFIG dependency in the hibernation core and clean it up
    slightly (Balbir Singh, Arvind Yadav, BaoJun Luo).

    - Add rk3228 support to the rockchip-io adaptive voltage scaling
    (AVS) driver (David Wu).

    - Fix an incorrect bit shift operation in the RAPL power capping
    driver (Adam Lessnau).

    - Add support for the EPP field in the HWP (hardware managed
    P-states) control register, HWP.EPP, to the x86_energy_perf_policy
    tool and update msr-index.h with HWP.EPP values (Len Brown).

    - Fix some minor issues in the turbostat tool (Len Brown).

    - Add support for AMD family 0x17 CPUs to the cpupower tool and fix a
    minor issue in it (Sherry Hurwitz).

    - Assorted cleanups, mostly related to the constification of some
    data structures (Arvind Yadav, Joe Perches, Kees Cook, Krzysztof
    Kozlowski)"

    * tag 'pm-4.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (69 commits)
    cpufreq: Update scaling_cur_freq documentation
    cpufreq: intel_pstate: Clean up after performance governor changes
    PM: hibernate: constify attribute_group structures.
    cpuidle: menu: allow state 0 to be disabled
    intel_idle: Use more common logging style
    PM / Domains: Fix missing default_power_down_ok comment
    PM / Domains: Fix unsafe iteration over modified list of domains
    PM / Domains: Fix unsafe iteration over modified list of domain providers
    PM / Domains: Fix unsafe iteration over modified list of device links
    PM / Domains: Handle safely genpd_syscore_switch() call on non-genpd device
    PM / Domains: Call driver's noirq callbacks
    PM / core: Drop run_wake flag from struct dev_pm_info
    PCI / PM: Simplify device wakeup settings code
    PCI / PM: Drop pme_interrupt flag from struct pci_dev
    ACPI / PM: Consolidate device wakeup settings code
    ACPI / PM: Drop run_wake from struct acpi_device_wakeup_flags
    PM / QoS: constify *_attribute_group.
    PM / AVS: rockchip-io: add io selectors and supplies for rk3228
    powercap/RAPL: prevent overridding bits outside of the mask
    PM / sysfs: Constify attribute groups
    ...

    Linus Torvalds
     
  • attribute_groups are not supposed to change at runtime. All functions
    working with attribute_groups provided by work with const
    attribute_group. So mark the non-const structs as const.

    File size before:
    text data bss dec hex filename
    3802 624 32 4458 116a kernel/power/main.o

    File size After adding 'const':
    text data bss dec hex filename
    3866 560 32 4458 116a kernel/power/main.o

    Signed-off-by: Arvind Yadav
    Acked-by: Pavel Machek
    Signed-off-by: Rafael J. Wysocki

    Arvind Yadav
     

03 Jul, 2017

1 commit

  • * acpi-pm:
    PM / core: Drop run_wake flag from struct dev_pm_info
    PCI / PM: Simplify device wakeup settings code
    PCI / PM: Drop pme_interrupt flag from struct pci_dev
    ACPI / PM: Consolidate device wakeup settings code
    ACPI / PM: Drop run_wake from struct acpi_device_wakeup_flags
    ACPI / sleep: EC-based wakeup from suspend-to-idle on recent systems
    platform: x86: intel-hid: Wake up the system from suspend-to-idle
    platform: x86: intel-vbtn: Wake up the system from suspend-to-idle
    ACPI / PM: Ignore spurious SCI wakeups from suspend-to-idle
    platform/x86: Add driver for ACPI INT0002 Virtual GPIO device
    PCI / PM: Restore PME Enable if skipping wakeup setup
    PM / sleep: Print timing information if debug is enabled
    ACPI / PM: Clean up device wakeup enable/disable code
    ACPI / PM: Change log level of wakeup-related message
    USB / PCI / PM: Allow the PCI core to do the resume cleanup
    ACPI / PM: Run wakeup notify handlers synchronously

    Conflicts:
    drivers/base/power/main.c

    Rafael J. Wysocki
     

30 Jun, 2017

1 commit

  • attribute_groups are not supposed to change at runtime. All functions
    working with attribute_groups provided by work with const
    attribute_group. So mark the non-const structs as const.

    File size before:
    text data bss dec hex filename
    6332 488 308 7128 1bd8 kernel/power/hibernate.o

    File size After adding 'const':
    text data bss dec hex filename
    6396 424 308 7128 1bd8 kernel/power/hibernate.o

    Signed-off-by: Arvind Yadav
    Acked-by: Pavel Machek
    Signed-off-by: Rafael J. Wysocki

    Arvind Yadav
     

27 Jun, 2017

2 commits


15 Jun, 2017

1 commit

  • The ACPI SCI (System Control Interrupt) is set up as a wakeup IRQ
    during suspend-to-idle transitions and, consequently, any events
    signaled through it wake up the system from that state. However,
    on some systems some of the events signaled via the ACPI SCI while
    suspended to idle should not cause the system to wake up. In fact,
    quite often they should just be discarded.

    Arguably, systems should not resume entirely on such events, but in
    order to decide which events really should cause the system to resume
    and which are spurious, it is necessary to resume up to the point
    when ACPI SCIs are actually handled and processed, which is after
    executing dpm_resume_noirq() in the system resume path.

    For this reasons, add a loop around freeze_enter() in which the
    platforms can process events signaled via multiplexed IRQ lines
    like the ACPI SCI and add suspend-to-idle hooks that can be
    used for this purpose to struct platform_freeze_ops.

    In the ACPI case, the ->wake hook is used for checking if the SCI
    has triggered while suspended and deferring the interrupt-induced
    system wakeup until the events signaled through it are actually
    processed sufficiently to decide whether or not the system should
    resume. In turn, the ->sync hook allows all of the relevant event
    queues to be flushed so as to prevent events from being missed due
    to race conditions.

    In addition to that, some ACPI code processing wakeup events needs
    to be modified to use the "hard" version of wakeup triggers, so that
    it will cause a system resume to happen on device-induced wakeup
    events even if the "soft" mechanism to prevent the system from
    suspending is not enabled. However, to preserve the existing
    behavior with respect to suspend-to-RAM, this only is done in
    the suspend-to-idle case and only if an SCI has occurred while
    suspended.

    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

12 Jun, 2017

1 commit

  • We've already got a few conflicts and upcoming work depends on some of the
    changes that have gone into mainline as regression fixes for this series.

    Pull in 4.12-rc5 to resolve these conflicts and make it easier on down stream
    trees to continue working on 4.13 changes.

    Signed-off-by: Jens Axboe

    Jens Axboe
     

09 Jun, 2017

2 commits