lkml.org 
[lkml]   [2011]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [linux-pm] [PATCH 08/18] cpuidle: create bootparam "cpuidle.off=1"

    On Saturday 02 April 2011 11:52 AM, Len Brown wrote:
    > From: Len Brown <len.brown@intel.com>
    >
    > useful for disabling cpuidle to fall back
    > to architecture-default idle loop
    >
    > cpuidle drivers and governors will fail to register.
    > on x86 they'll say so:
    >
    > intel_idle: intel_idle yielding to (null)
    > ACPI: acpi_idle yielding to (null)
    >
    > Signed-off-by: Len Brown <len.brown@intel.com>
    > ---
    > Documentation/kernel-parameters.txt | 3 +++
    > drivers/cpuidle/cpuidle.c | 10 ++++++++++
    > drivers/cpuidle/cpuidle.h | 1 +
    > drivers/cpuidle/driver.c | 3 +++
    > drivers/cpuidle/governor.c | 3 +++
    > 5 files changed, 20 insertions(+), 0 deletions(-)
    >
    > diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
    > index f4a04c0..08e8a22 100644
    > --- a/Documentation/kernel-parameters.txt
    > +++ b/Documentation/kernel-parameters.txt
    > @@ -546,6 +546,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
    > /proc/<pid>/coredump_filter.
    > See also Documentation/filesystems/proc.txt.
    >
    > + cpuidle.off=1 [CPU_IDLE]
    > + disable the cpuidle sub-system
    > +
    > cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
    > Format:
    > <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
    > diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
    > index bf50924..faae2c3 100644
    > --- a/drivers/cpuidle/cpuidle.c
    > +++ b/drivers/cpuidle/cpuidle.c
    > @@ -28,6 +28,12 @@ LIST_HEAD(cpuidle_detected_devices);
    > static void (*pm_idle_old)(void);
    >
    > static int enabled_devices;
    > +static int off __read_mostly;
    > +
    > +int cpuidle_disabled(void)
    > +{
    > + return off;
    > +}
    >
    > #if defined(CONFIG_ARCH_HAS_CPU_IDLE_WAIT)
    > static void cpuidle_kick_cpus(void)
    > @@ -427,6 +433,9 @@ static int __init cpuidle_init(void)
    > {
    > int ret;
    >
    > + if (cpuidle_disabled())
    > + return -ENODEV;
    > +
    > pm_idle_old = pm_idle;
    >
    > ret = cpuidle_add_class_sysfs(&cpu_sysdev_class);
    > @@ -438,4 +447,5 @@ static int __init cpuidle_init(void)
    > return 0;
    > }
    >
    > +module_param(off, int, 0444);
    > core_initcall(cpuidle_init);
    > diff --git a/drivers/cpuidle/cpuidle.h b/drivers/cpuidle/cpuidle.h
    > index 33e50d5..38c3fd8 100644
    > --- a/drivers/cpuidle/cpuidle.h
    > +++ b/drivers/cpuidle/cpuidle.h
    > @@ -13,6 +13,7 @@ extern struct list_head cpuidle_governors;
    > extern struct list_head cpuidle_detected_devices;
    > extern struct mutex cpuidle_lock;
    > extern spinlock_t cpuidle_driver_lock;
    > +extern int cpuidle_disabled(void);
    >
    > /* idle loop */
    > extern void cpuidle_install_idle_handler(void);
    > diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c
    > index fd1601e..3f7e3ce 100644
    > --- a/drivers/cpuidle/driver.c
    > +++ b/drivers/cpuidle/driver.c
    > @@ -26,6 +26,9 @@ int cpuidle_register_driver(struct cpuidle_driver *drv)
    > if (!drv)
    > return -EINVAL;
    >
    > + if (cpuidle_disabled())
    > + return -ENODEV;
    > +
    > spin_lock(&cpuidle_driver_lock);
    > if (cpuidle_curr_driver) {
    > spin_unlock(&cpuidle_driver_lock);
    > diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c
    > index 724c164..ea2f8e7 100644
    > --- a/drivers/cpuidle/governor.c
    > +++ b/drivers/cpuidle/governor.c
    > @@ -81,6 +81,9 @@ int cpuidle_register_governor(struct cpuidle_governor *gov)
    > if (!gov || !gov->select)
    > return -EINVAL;
    >
    > + if (cpuidle_disabled())
    > + return -ENODEV;
    > +
    > mutex_lock(&cpuidle_lock);
    > if (__cpuidle_find_governor(gov->name) == NULL) {
    > ret = 0;

    Hi Len,
    We would like to know as to when the patch that completely removes
    pm_idle for x86 "cpuidle: stop using pm_idle" and that which introduces
    bootparam cpuidle.off "cpuidle: create bootparam cpuidle.off=1"
    be pushed ? Are there any dependencies that needs to be addressed
    before queuing it up for the next merge window ? If yes, can you please
    let us know what the dependencies are. We need these patches for running
    cpuidle driver for pseries.
    https://lkml.org/lkml/2011/6/7/375

    Thanks
    - Deepthi








    \
     
     \ /
      Last update: 2011-07-15 13:31    [W:0.035 / U:93.300 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site