08 Oct, 2016

1 commit

  • When doing an nmi backtrace of many cores, most of which are idle, the
    output is a little overwhelming and very uninformative. Suppress
    messages for cpus that are idling when they are interrupted and just
    emit one line, "NMI backtrace for N skipped: idling at pc 0xNNN".

    We do this by grouping all the cpuidle code together into a new
    .cpuidle.text section, and then checking the address of the interrupted
    PC to see if it lies within that section.

    This commit suitably tags x86 and tile idle routines, and only adds in
    the minimal framework for other architectures.

    Link: http://lkml.kernel.org/r/1472487169-14923-5-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Acked-by: Peter Zijlstra (Intel)
    Tested-by: Peter Zijlstra (Intel)
    Tested-by: Daniel Thompson [arm]
    Tested-by: Petr Mladek
    Cc: Aaron Tomlin
    Cc: Peter Zijlstra (Intel)
    Cc: "Rafael J. Wysocki"
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Metcalf
     

31 Jul, 2016

1 commit

  • Pull x86 cpufeature updates from Thomas Gleixner:

    - a workaround for the MONITOR instruction erratum of Goldmont CPUs

    - small fixes and cleanups here and there

    * 'x86-cpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    x86/cpu: Add workaround for MONITOR instruction erratum on Goldmont based CPUs
    x86/cpu: Rename "WESTMERE2" family to "NEHALEM_G"
    x86/amd_nb: Clean up init path
    x86/cpufeature: Add helper macro for mask check macros
    x86/cpufeature: Make sure DISABLED/REQUIRED macros are updated
    x86/cpufeature: Update cpufeaure macros

    Linus Torvalds
     

09 Jul, 2016

2 commits

  • Commit 5dcef69486 ("intel_idle: add BXT support") added an 8-element
    lookup array with just a 2-bit value used for lookups. As per the SDM
    that bit field is really 3 bits wide. While this is supposedly benign
    here, future re-use of the code for other CPUs might expose the issue.

    Signed-off-by: Jan Beulich
    Signed-off-by: Rafael J. Wysocki

    Jan Beulich
     
  • Since irtl_ns_units[] has itself zero entries, make sure the caller
    recognized those cases along with the MSR read returning zero, as zero
    is not a valid value for exit_latency and target_residency.

    Signed-off-by: Jan Beulich
    Signed-off-by: Rafael J. Wysocki

    Jan Beulich
     

01 Jul, 2016

1 commit

  • Len Brown noticed something was amiss in our INTEL_FAM6_*
    definitions. It seems like model 0x1F was a Nehalem part,
    marketed as "Intel Core i7 and i5 Processors" (according to the
    SDM). But, although it was a Nehalem 0x1F had some uncore events
    which were shared with Westmere.

    Len also mentioned he thought it was called "Havendale", which
    Wikipedia says was graphics-oriented and canceled:

    https://en.wikipedia.org/wiki/Nehalem_(microarchitecture)

    So either way, it's probably not imporant what we call it, but
    call it Nehalem to be accurate, and add a "G" since it seems
    graphics-related. If it were canceled that would be a good reason
    why it's so sparsely and inconsistently referred to in the code.

    Signed-off-by: Dave Hansen
    Cc: Dave Hansen
    Cc: Len Brown
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/20160629192737.949C41A8@viggo.jf.intel.com
    Signed-off-by: Ingo Molnar

    Dave Hansen
     

23 Jun, 2016

2 commits

  • Denverton is an Intel Atom based micro server which shares the same
    Goldmont architecture as Broxton. The available C-states on
    Denverton is a subset of Broxton with only C1, C1e, and C6.

    Signed-off-by: Jacob Pan
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Jacob Pan
     
  • The Kconfig for this driver is currently declared with:

    config INTEL_IDLE
    bool "Cpuidle Driver for Intel Processors"

    ...meaning that it currently is not being built as a module by anyone.

    This was done in commit 6ce9cd8669fa1195fdc21643370e34523c7ac988
    ("intel_idle: disable module support") since "...the module capability
    is cauing more trouble than it is worth."

    This was done over 5y ago, and Daniel adds that:

    ...the modular support has been removed from almost all the cpuidle
    drivers and the cpuidle framework is no longer assuming driver could
    be unloaded.

    Removing the modular dead code in the driver makes sense as this
    what have been done in the others drivers.

    So lets remove the modular code that is essentially orphaned, so that
    when reading the driver there is no doubt it is builtin-only.

    Since module_init translates to device_initcall in the non-modular
    case, the init ordering remains unchanged with this commit. At a
    later date we might want to consider whether subsys_init or another
    init category seems more appropriate than device_init.

    We replace module.h with moduleparam.h since the file does declare
    some module parameters, and leaving them as such is currently the
    easiest way to remain compatible with existing boot arg use cases.

    Note that MODULE_DEVICE_TABLE is a no-op for non-modular code.

    Also note that we can't remove intel_idle_cpuidle_devices_uninit() as
    that is still used for unwind purposes if the init fails.

    We also delete the MODULE_LICENSE tag etc. since all that information
    is already contained at the top of the file in the comments.

    Signed-off-by: Paul Gortmaker
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Paul Gortmaker
     

08 Jun, 2016

1 commit

  • Use the new INTEL_FAM6_* macros for intel_idle.c. Also fix up
    some of the macros to be consistent with how some of the
    intel_idle code refers to the model.

    There's on oddity here: model 0x1F is uniquely referred to here
    and nowhere else that I could find. 0x1E/0x1F are just spelled
    out as "Intel Core i7 and i5 Processors" in the SDM or as "Intel
    processors based on the Nehalem, Westmere microarchitectures" in
    the RDPMC section. Comments between tables 19-19 and 19-20 in
    the SDM seem to point to 0x1F being some kind of Westmere, so
    let's call it "WESTMERE2".

    Signed-off-by: Dave Hansen
    Acked-by: Rafael J. Wysocki
    Cc: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Dave Hansen
    Cc: Denys Vlasenko
    Cc: H. Peter Anvin
    Cc: Len Brown
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: jacob.jun.pan@intel.com
    Cc: linux-pm@vger.kernel.org
    Link: http://lkml.kernel.org/r/20160603001932.EE978EB9@viggo.jf.intel.com
    Signed-off-by: Ingo Molnar

    Dave Hansen
     

09 Apr, 2016

1 commit

  • Broxton has all the HSW C-states, except C3.
    BXT C-state timing is slightly different.

    Here we trust the IRTL MSRs as authority
    on maximum C-state latency, and override the driver's tables
    with the values found in the associated IRTL MSRs.
    Further we set the target_residency to 1x maximum latency,
    trusting the hardware demotion logic.

    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Len Brown
     

08 Apr, 2016

12 commits

  • KBL is similar to SKL

    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Len Brown
     
  • SKX is similar to BDX

    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Len Brown
     
  • This driver registers cpuidle devices when a CPU comes online, but it
    leaves the registrations in place when a CPU goes offline. The module
    exit code only unregisters the currently online CPUs, leaving the
    devices for offline CPUs dangling.

    This patch changes the driver to clean up all registrations on exit,
    even those from CPUs that are offline.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • If a cpuidle registration error occurs during the hot plug notifier
    callback, we should really inform the hot plug machinery instead of
    just ignoring the error. This patch changes the callback to properly
    return on error.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • The helper function, intel_idle_cpu_init, registers one new device
    with the cpuidle layer. If the registration should fail, that
    function immediately calls intel_idle_cpuidle_devices_uninit() to
    unregister every last CPU's device. However, it makes no sense to do
    so, when called from the hot plug notifier callback.

    This patch moves the call to intel_idle_cpuidle_devices_uninit()
    outside of the helper function to the one call site that actually
    needs to perform the de-registrations.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • This driver sets the broadcast tick quite early on during probe and does
    not clean up again in cast of failure. This patch moves the setup call
    after the registration, placing the on_each_cpu() calls within the global
    CPU lock region.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • The helper function, intel_idle_cpuidle_devices_uninit, frees the
    globally allocated per-CPU data. However, this function is invoked
    from the hot plug notifier callback at a time when freeing that data
    is not safe.

    If the call to cpuidle_register_driver() should fail (say, due to lack
    of memory), then the driver will free its per-CPU region. On the
    *next* CPU_ONLINE event, the driver will happily use the region again
    and even free it again if the failure repeats.

    This patch fixes the issue by moving the call to free_percpu() outside
    of the helper function at the two call sites that actually need to
    free the per-CPU data.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • In the module_init() method, if the per-CPU allocation fails, then the
    active cpuidle registration is not cleaned up. This patch fixes the
    issue by attempting the allocation before registration, and then
    cleaning it up again on registration failure.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • In the module_exit() method, this driver first frees its per-CPU
    pointer, then unregisters a callback making use of the pointer.
    Furthermore, the function, intel_idle_cpuidle_devices_uninit, is racy
    against CPU hot plugging as it calls for_each_online_cpu().

    This patch corrects the issues by unregistering first on the exit path
    while holding the hot plug lock.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • The function, intel_idle_cpuidle_driver_init, makes calls on each CPU
    to auto_demotion_disable() and c1e_promotion_disable(). These calls
    are redundant, as intel_idle_cpu_init() does the same calls just a bit
    later on. They are also premature, as the driver registration may yet
    fail.

    This patch removes the redundant code.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • The function, intel_idle_cpuidle_driver_init, delivers no error codes
    at all. This patch changes the function to return 'void' instead of
    returning zero.

    Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     
  • Signed-off-by: Richard Cochran
    Signed-off-by: Len Brown
    Signed-off-by: Rafael J. Wysocki

    Richard Cochran
     

24 Mar, 2016

2 commits

  • Enables "Intel(R) Xeon Phi(TM) Processor x200 Product Family" support,
    formerly code-named KNL. It is based on modified Intel Atom Silvermont
    microarchitecture.

    Signed-off-by: Dasaratharaman Chandramouli
    [micah.barany@intel.com: adjusted values of residency and latency]
    Signed-off-by: Micah Barany
    [hubert.chrzaniuk@intel.com: removed deprecated CPUIDLE_FLAG_TIME_VALID flag]
    Signed-off-by: Hubert Chrzaniuk
    Signed-off-by: Pawel Karczewski
    Signed-off-by: Len Brown

    Dasaratharaman Chandramouli
     
  • Some SKL-H configurations require "intel_idle.max_cstate=7" to boot.
    While that is an effective workaround, it disables C10.

    This patch detects the problematic configuration,
    and disables C8 and C9, keeping C10 enabled.

    Note that enabling SGX in BIOS SETUP can also prevent this issue,
    if the system BIOS provides that option.

    https://bugzilla.kernel.org/show_bug.cgi?id=109081
    "Freezes with Intel i7 6700HQ (Skylake), unless intel_idle.max_cstate=7"

    Signed-off-by: Len Brown
    Cc: stable@vger.kernel.org

    Len Brown
     

11 Sep, 2015

1 commit


16 Aug, 2015

1 commit

  • Skylake Client CPU idle Power states (C-states)
    are similar to the previous generation, Broadwell.
    However, Skylake does get its own table with updated
    worst-case latency and average energy-break-even residency values.

    Signed-off-by: Len Brown

    Len Brown
     

27 Jul, 2015

1 commit

  • intel_idle uses a NULL "enter" field in a cpuidle state
    to recognize the invalid entry terminating a variable-length array.

    Linux-4.0 added support for the system-wide "freeze" state
    in cpuidle drivers via the new "enter_freeze" field.

    The natural way to expose a deep idle state for freeze,
    but not for run-time idle is to supply "enter_freeze" without "enter";
    so we update the driver to accept such states.

    Signed-off-by: Len Brown

    Len Brown
     

15 Apr, 2015

1 commit

  • Pull power management and ACPI updates from Rafael Wysocki:
    "These are mostly fixes and cleanups all over, although there are a few
    items that sort of fall into the new feature category.

    First off, we have new callbacks for PM domains that should help us to
    handle some issues related to device initialization in a better way.

    There also is some consolidation in the unified device properties API
    area allowing us to use that inferface for accessing data coming from
    platform initialization code in addition to firmware-provided data.

    We have some new device/CPU IDs in a few drivers, support for new
    chips and a new cpufreq driver too.

    Specifics:

    - Generic PM domains support update including new PM domain callbacks
    to handle device initialization better (Russell King, Rafael J
    Wysocki, Kevin Hilman)

    - Unified device properties API update including a new mechanism for
    accessing data provided by platform initialization code (Rafael J
    Wysocki, Adrian Hunter)

    - ARM cpuidle update including ARM32/ARM64 handling consolidation
    (Daniel Lezcano)

    - intel_idle update including support for the Silvermont Core in the
    Baytrail SOC and for the Airmont Core in the Cherrytrail and
    Braswell SOCs (Len Brown, Mathias Krause)

    - New cpufreq driver for Hisilicon ACPU (Leo Yan)

    - intel_pstate update including support for the Knights Landing chip
    (Dasaratharaman Chandramouli, Kristen Carlson Accardi)

    - QorIQ cpufreq driver update (Tang Yuantian, Arnd Bergmann)

    - powernv cpufreq driver update (Shilpasri G Bhat)

    - devfreq update including Tegra support changes (Tomeu Vizoso,
    MyungJoo Ham, Chanwoo Choi)

    - powercap RAPL (Running-Average Power Limit) driver update including
    support for Intel Broadwell server chips (Jacob Pan, Mathias Krause)

    - ACPI device enumeration update related to the handling of the
    special PRP0001 device ID allowing DT-style 'compatible' property
    to be used for ACPI device identification (Rafael J Wysocki)

    - ACPI EC driver update including limited _DEP support (Lan Tianyu,
    Lv Zheng)

    - ACPI backlight driver update including a new mechanism to allow
    native backlight handling to be forced on non-Windows 8 systems and
    a new quirk for Lenovo Ideapad Z570 (Aaron Lu, Hans de Goede)

    - New Windows Vista compatibility quirk for Sony VGN-SR19XN (Chen Yu)

    - Assorted ACPI fixes and cleanups (Aaron Lu, Martin Kepplinger,
    Masanari Iida, Mika Westerberg, Nan Li, Rafael J Wysocki)

    - Fixes related to suspend-to-idle for the iTCO watchdog driver and
    the ACPI core system suspend/resume code (Rafael J Wysocki, Chen Yu)

    - PM tracing support for the suspend phase of system suspend/resume
    transitions (Zhonghui Fu)

    - Configurable delay for the system suspend/resume testing facility
    (Brian Norris)

    - PNP subsystem cleanups (Peter Huewe, Rafael J Wysocki)"

    * tag 'pm+acpi-4.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (74 commits)
    ACPI / scan: Fix NULL pointer dereference in acpi_companion_match()
    ACPI / scan: Rework modalias creation when "compatible" is present
    intel_idle: mark cpu id array as __initconst
    powercap / RAPL: mark rapl_ids array as __initconst
    powercap / RAPL: add ID for Broadwell server
    intel_pstate: Knights Landing support
    intel_pstate: remove MSR test
    cpufreq: fix qoriq uniprocessor build
    ACPI / scan: Take the PRP0001 position in the list of IDs into account
    ACPI / scan: Simplify acpi_match_device()
    ACPI / scan: Generalize of_compatible matching
    device property: Introduce firmware node type for platform data
    device property: Make it possible to use secondary firmware nodes
    PM / watchdog: iTCO: stop watchdog during system suspend
    cpufreq: hisilicon: add acpu driver
    ACPI / EC: Call acpi_walk_dep_device_list() after installing EC opregion handler
    cpufreq: powernv: Report cpu frequency throttling
    intel_idle: Add support for the Airmont Core in the Cherrytrail and Braswell SOCs
    intel_idle: Update support for Silvermont Core in Baytrail SOC
    PM / devfreq: tegra: Register governor on module init
    ...

    Linus Torvalds
     

11 Apr, 2015

2 commits


03 Apr, 2015

2 commits


01 Apr, 2015

2 commits

  • Support C-states for the Airmont core in the Cherrytrail and Braswell SOCs.
    The states are similar to those of Silvermont in Baytrail,
    except both flavors of C6 states are faster.

    Signed-off-by: Len Brown
    Cc: Kumar P Mahesh
    Cc: Alan Cox
    Cc: Mika Westerberg

    Len Brown
     
  • On some Silvermont-Core/Baytrail-SOC systems,
    C1E latency is higher than original specifications.
    Although C1E is still enumerated in CPUID.MWAIT.EDX,
    we delete the state from intel_idle to avoid latency impact.

    Under some conditions, the latency of the C6N-BYT and C6S-BYT states
    may exceed the specified values of 40 and 140 usec, respectively.
    Increase those values to 300 and 500 usec; to assure
    that the hardware does not violate constraints that may be set
    by the Linux PM_QOS sub-system.

    Also increase the C7-BYT target residency to 4.0 ms from 1.5 ms.

    Signed-off-by: Len Brown
    Cc: Kumar P Mahesh
    Cc: Alan Cox
    Cc: Mika Westerberg
    Cc:

    Len Brown
     

16 Feb, 2015

1 commit


11 Feb, 2015

1 commit


13 Nov, 2014

1 commit

  • The only place where the time is invalid is when the ACPI_CSTATE_FFH entry
    method is not set. Otherwise for all the drivers, the time can be correctly
    measured.

    Instead of duplicating the CPUIDLE_FLAG_TIME_VALID flag in all the drivers
    for all the states, just invert the logic by replacing it by the flag
    CPUIDLE_FLAG_TIME_INVALID, hence we can set this flag only for the acpi idle
    driver, remove the former flag from all the drivers and invert the logic with
    this flag in the different governor.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: Rafael J. Wysocki

    Daniel Lezcano
     

16 Aug, 2014

2 commits


22 Apr, 2014

1 commit


08 Apr, 2014

1 commit

  • * pm-cpuidle:
    cpuidle: sysfs: Export target residency information
    intel_idle: fine-tune IVT residency targets
    tools/power turbostat: Run on Broadwell
    tools/power turbostat: simplify output, add Avg_MHz
    intel_idle: Add CPU model 54 (Atom N2000 series)
    intel_idle: support Bay Trail
    intel_idle: allow sparse sub-state numbering, for Bay Trail
    ACPI idle: permit sparse C-state sub-state numbers

    Rafael J. Wysocki