lkml.org 
[lkml]   [2016]   [Aug]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC/PATCH 1/2] cpuidle: Allow idle-states to be disabled at start
    Date
    From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com>

    Currently all the idle states registered by a cpu-idle driver are
    enabled by default. This patch adds a mechanism which allows the
    driver to hint if an idle-state should start in a disabled state. The
    cpu-idle core will use this hint to appropriately initialize the
    usage->disable knob of the CPU device idle state.

    The state can be enabled at run time by echo'ing a zero to the sysfs
    "disable" control file.

    Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
    ---
    drivers/cpuidle/cpuidle.c | 7 +++++++
    include/linux/cpuidle.h | 7 ++++++-
    2 files changed, 13 insertions(+), 1 deletion(-)

    diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
    index c73207a..b4debc7 100644
    --- a/drivers/cpuidle/cpuidle.c
    +++ b/drivers/cpuidle/cpuidle.c
    @@ -439,7 +439,14 @@ static void __cpuidle_unregister_device(struct cpuidle_device *dev)

    static void __cpuidle_device_init(struct cpuidle_device *dev)
    {
    + struct cpuidle_driver *drv = cpuidle_get_cpu_driver(dev);
    + int i;
    +
    memset(dev->states_usage, 0, sizeof(dev->states_usage));
    + for (i = 0; i < drv->state_count; i++) {
    + if (drv->states[i].disable_use_at_start)
    + dev->states_usage[i].disable = 1;
    + }
    dev->last_residency = 0;
    }

    diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
    index bb31373..f3fe855 100644
    --- a/include/linux/cpuidle.h
    +++ b/include/linux/cpuidle.h
    @@ -44,7 +44,12 @@ struct cpuidle_state {
    int power_usage; /* in mW */
    unsigned int target_residency; /* in US */
    bool disabled; /* disabled on all CPUs */
    -
    + /*
    + * disable_use_at_start: If true, then this idle state will be
    + * disabled by default. It can be enabled at runtime using the
    + * per-cpu cpuidle sysfs control file named "disable".
    + */
    + bool disable_use_at_start;
    int (*enter) (struct cpuidle_device *dev,
    struct cpuidle_driver *drv,
    int index);
    --
    1.9.4
    \
     
     \ /
      Last update: 2016-09-17 09:57    [W:3.652 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site