* [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params @ 2012-01-13 12:59 Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen ` (8 more replies) 0 siblings, 9 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross The inspiration for this patch series is the N9 CPU frequency boost upon input events: http://www.spinics.net/lists/cpufreq/msg00667.html and the related changes in git://codeaurora.org/kernel/msm.git tree. Those patches modify the ondemand cpufreq governor. This patch series adds minimum and maximum CPU frequency as PM QoS parameters and modifies the cpufreq core to enforce the PM QoS limits. There is also an example module for boosting the frequency upon input events. I've been testing these changes against Ubuntu 3.2 kernel on a Dell E6420 with the ACPI cpufreq driver. The patches are against linux-next/master, compile tested against it. V2: * split min and max to separate commits * handle PM QoS min above max as max * handle PM QoS max below min as min --Antti Alex Frid (1): PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen (7): PM QoS: Add CPU frequency minimum as PM QoS param cpufreq: Export user_policy min/max cpufreq: Preserve sysfs min/max request cpufreq: Enforce PM QoS minimum limit input: CPU frequency booster PM QoS: Add CPU frequency maximum as PM QoS param cpufreq: Enforce PM QoS maximum frequency drivers/cpufreq/cpufreq.c | 59 +++++++++++++- drivers/input/Kconfig | 9 ++ drivers/input/Makefile | 1 + drivers/input/input-cfboost.c | 174 +++++++++++++++++++++++++++++++++++++++++ include/linux/pm_qos.h | 19 ++++- kernel/power/qos.c | 55 ++++++++++---- 6 files changed, 295 insertions(+), 22 deletions(-) create mode 100644 drivers/input/input-cfboost.c -- 1.7.4.1 ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-15 4:37 ` mark gross 2012-01-13 12:59 ` [PATCH v2 2/8] PM QoS: Add CPU frequency minimum as PM QoS param Antti P Miettinen ` (7 subsequent siblings) 8 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross From: Alex Frid <afrid@nvidia.com> - Replace class ID #define with enumeration - Loop through PM QoS objects during initialization (rather than initializing them one-by-one) Signed-off-by: Alex Frid <afrid@nvidia.com> Reviewed-by: Antti Miettinen <amiettinen@nvidia.com> Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com> Reviewed-by: Scott Williams <scwilliams@nvidia.com> Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com> --- include/linux/pm_qos.h | 14 +++++++++----- kernel/power/qos.c | 23 ++++++++++------------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index e5bbcba..5ac91d8 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -9,12 +9,16 @@ #include <linux/miscdevice.h> #include <linux/device.h> -#define PM_QOS_RESERVED 0 -#define PM_QOS_CPU_DMA_LATENCY 1 -#define PM_QOS_NETWORK_LATENCY 2 -#define PM_QOS_NETWORK_THROUGHPUT 3 +enum { + PM_QOS_RESERVED = 0, + PM_QOS_CPU_DMA_LATENCY, + PM_QOS_NETWORK_LATENCY, + PM_QOS_NETWORK_THROUGHPUT, + + /* insert new class ID */ + PM_QOS_NUM_CLASSES, +}; -#define PM_QOS_NUM_CLASSES 4 #define PM_QOS_DEFAULT_VALUE -1 #define PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) diff --git a/kernel/power/qos.c b/kernel/power/qos.c index 995e3bd..d6d6dbd 100644 --- a/kernel/power/qos.c +++ b/kernel/power/qos.c @@ -469,21 +469,18 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, static int __init pm_qos_power_init(void) { int ret = 0; + int i; - ret = register_pm_qos_misc(&cpu_dma_pm_qos); - if (ret < 0) { - printk(KERN_ERR "pm_qos_param: cpu_dma_latency setup failed\n"); - return ret; - } - ret = register_pm_qos_misc(&network_lat_pm_qos); - if (ret < 0) { - printk(KERN_ERR "pm_qos_param: network_latency setup failed\n"); - return ret; + BUILD_BUG_ON(ARRAY_SIZE(pm_qos_array) != PM_QOS_NUM_CLASSES); + + for (i = 1; i < PM_QOS_NUM_CLASSES; i++) { + ret = register_pm_qos_misc(pm_qos_array[i]); + if (ret < 0) { + printk(KERN_ERR "pm_qos_param: %s setup failed\n", + pm_qos_array[i]->name); + return ret; + } } - ret = register_pm_qos_misc(&network_throughput_pm_qos); - if (ret < 0) - printk(KERN_ERR - "pm_qos_param: network_throughput setup failed\n"); return ret; } -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge 2012-01-13 12:59 ` [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen @ 2012-01-15 4:37 ` mark gross 0 siblings, 0 replies; 31+ messages in thread From: mark gross @ 2012-01-15 4:37 UTC (permalink / raw) To: Antti P Miettinen; +Cc: davej, cpufreq, pavel, rjw, len.brown, linux-pm, mgross looks ok. Signed-off-by: markgross <markgross@thegnar.org> --mark On Fri, Jan 13, 2012 at 02:59:12PM +0200, Antti P Miettinen wrote: > From: Alex Frid <afrid@nvidia.com> > > - Replace class ID #define with enumeration > - Loop through PM QoS objects during initialization (rather than > initializing them one-by-one) > > Signed-off-by: Alex Frid <afrid@nvidia.com> > Reviewed-by: Antti Miettinen <amiettinen@nvidia.com> > Reviewed-by: Diwakar Tundlam <dtundlam@nvidia.com> > Reviewed-by: Scott Williams <scwilliams@nvidia.com> > Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com> > --- > include/linux/pm_qos.h | 14 +++++++++----- > kernel/power/qos.c | 23 ++++++++++------------- > 2 files changed, 19 insertions(+), 18 deletions(-) > > diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h > index e5bbcba..5ac91d8 100644 > --- a/include/linux/pm_qos.h > +++ b/include/linux/pm_qos.h > @@ -9,12 +9,16 @@ > #include <linux/miscdevice.h> > #include <linux/device.h> > > -#define PM_QOS_RESERVED 0 > -#define PM_QOS_CPU_DMA_LATENCY 1 > -#define PM_QOS_NETWORK_LATENCY 2 > -#define PM_QOS_NETWORK_THROUGHPUT 3 > +enum { > + PM_QOS_RESERVED = 0, > + PM_QOS_CPU_DMA_LATENCY, > + PM_QOS_NETWORK_LATENCY, > + PM_QOS_NETWORK_THROUGHPUT, > + > + /* insert new class ID */ > + PM_QOS_NUM_CLASSES, > +}; > > -#define PM_QOS_NUM_CLASSES 4 > #define PM_QOS_DEFAULT_VALUE -1 > > #define PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) > diff --git a/kernel/power/qos.c b/kernel/power/qos.c > index 995e3bd..d6d6dbd 100644 > --- a/kernel/power/qos.c > +++ b/kernel/power/qos.c > @@ -469,21 +469,18 @@ static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, > static int __init pm_qos_power_init(void) > { > int ret = 0; > + int i; > > - ret = register_pm_qos_misc(&cpu_dma_pm_qos); > - if (ret < 0) { > - printk(KERN_ERR "pm_qos_param: cpu_dma_latency setup failed\n"); > - return ret; > - } > - ret = register_pm_qos_misc(&network_lat_pm_qos); > - if (ret < 0) { > - printk(KERN_ERR "pm_qos_param: network_latency setup failed\n"); > - return ret; > + BUILD_BUG_ON(ARRAY_SIZE(pm_qos_array) != PM_QOS_NUM_CLASSES); > + > + for (i = 1; i < PM_QOS_NUM_CLASSES; i++) { > + ret = register_pm_qos_misc(pm_qos_array[i]); > + if (ret < 0) { > + printk(KERN_ERR "pm_qos_param: %s setup failed\n", > + pm_qos_array[i]->name); > + return ret; > + } > } > - ret = register_pm_qos_misc(&network_throughput_pm_qos); > - if (ret < 0) > - printk(KERN_ERR > - "pm_qos_param: network_throughput setup failed\n"); > > return ret; > } > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 2/8] PM QoS: Add CPU frequency minimum as PM QoS param 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-15 4:46 ` mark gross 2012-01-13 12:59 ` [PATCH v2 3/8] cpufreq: Export user_policy min/max Antti P Miettinen ` (6 subsequent siblings) 8 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Add minimum CPU frequency as PM QoS parameter. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- include/linux/pm_qos.h | 3 +++ kernel/power/qos.c | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletions(-) diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 5ac91d8..54a0d00 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -14,8 +14,10 @@ enum { PM_QOS_CPU_DMA_LATENCY, PM_QOS_NETWORK_LATENCY, PM_QOS_NETWORK_THROUGHPUT, + PM_QOS_CPU_FREQ_MIN, /* insert new class ID */ + PM_QOS_NUM_CLASSES, }; @@ -25,6 +27,7 @@ enum { #define PM_QOS_NETWORK_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE 0 #define PM_QOS_DEV_LAT_DEFAULT_VALUE 0 +#define PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE 0 struct pm_qos_request { struct plist_node node; diff --git a/kernel/power/qos.c b/kernel/power/qos.c index d6d6dbd..07d761a 100644 --- a/kernel/power/qos.c +++ b/kernel/power/qos.c @@ -101,11 +101,26 @@ static struct pm_qos_object network_throughput_pm_qos = { }; +static BLOCKING_NOTIFIER_HEAD(cpu_freq_min_notifier); +static struct pm_qos_constraints cpu_freq_min_constraints = { + .list = PLIST_HEAD_INIT(cpu_freq_min_constraints.list), + .target_value = PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE, + .default_value = PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE, + .type = PM_QOS_MAX, + .notifiers = &cpu_freq_min_notifier, +}; +static struct pm_qos_object cpu_freq_min_pm_qos = { + .constraints = &cpu_freq_min_constraints, + .name = "cpu_freq_min", +}; + + static struct pm_qos_object *pm_qos_array[] = { &null_pm_qos, &cpu_dma_pm_qos, &network_lat_pm_qos, - &network_throughput_pm_qos + &network_throughput_pm_qos, + &cpu_freq_min_pm_qos, }; static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 2/8] PM QoS: Add CPU frequency minimum as PM QoS param 2012-01-13 12:59 ` [PATCH v2 2/8] PM QoS: Add CPU frequency minimum as PM QoS param Antti P Miettinen @ 2012-01-15 4:46 ` mark gross 0 siblings, 0 replies; 31+ messages in thread From: mark gross @ 2012-01-15 4:46 UTC (permalink / raw) To: Antti P Miettinen; +Cc: davej, cpufreq, pavel, rjw, len.brown, linux-pm, mgross For some reason git am doesn't work with this so I had to use patch by hand. On Fri, Jan 13, 2012 at 02:59:13PM +0200, Antti P Miettinen wrote: > Add minimum CPU frequency as PM QoS parameter. > > Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> > --- > include/linux/pm_qos.h | 3 +++ > kernel/power/qos.c | 17 ++++++++++++++++- > 2 files changed, 19 insertions(+), 1 deletions(-) > > diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h > index 5ac91d8..54a0d00 100644 > --- a/include/linux/pm_qos.h > +++ b/include/linux/pm_qos.h > @@ -14,8 +14,10 @@ enum { > PM_QOS_CPU_DMA_LATENCY, > PM_QOS_NETWORK_LATENCY, > PM_QOS_NETWORK_THROUGHPUT, > + PM_QOS_CPU_FREQ_MIN, > > /* insert new class ID */ > + > PM_QOS_NUM_CLASSES, > }; > > @@ -25,6 +27,7 @@ enum { > #define PM_QOS_NETWORK_LAT_DEFAULT_VALUE (2000 * USEC_PER_SEC) > #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE 0 > #define PM_QOS_DEV_LAT_DEFAULT_VALUE 0 > +#define PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE 0 Perhaps "#define PM_QOS_CPU_FREQ_MIN_DEFAULT_KHZ 0" might be more descriptive. Its nice to have the code a bit self documenting and we are missing any comments on what units the FREQ are in. (they are in the same units that cpufreq uses. KHz) Also we need to update the Documentation/power/pm_qos_interface.txt to explain cpu_freq_min's units. other than this (and the git am issue) this looks good to me. --mark > > struct pm_qos_request { > struct plist_node node; > diff --git a/kernel/power/qos.c b/kernel/power/qos.c > index d6d6dbd..07d761a 100644 > --- a/kernel/power/qos.c > +++ b/kernel/power/qos.c > @@ -101,11 +101,26 @@ static struct pm_qos_object network_throughput_pm_qos = { > }; > > > +static BLOCKING_NOTIFIER_HEAD(cpu_freq_min_notifier); > +static struct pm_qos_constraints cpu_freq_min_constraints = { > + .list = PLIST_HEAD_INIT(cpu_freq_min_constraints.list), > + .target_value = PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE, > + .default_value = PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE, > + .type = PM_QOS_MAX, > + .notifiers = &cpu_freq_min_notifier, > +}; > +static struct pm_qos_object cpu_freq_min_pm_qos = { > + .constraints = &cpu_freq_min_constraints, > + .name = "cpu_freq_min", > +}; > + > + > static struct pm_qos_object *pm_qos_array[] = { > &null_pm_qos, > &cpu_dma_pm_qos, > &network_lat_pm_qos, > - &network_throughput_pm_qos > + &network_throughput_pm_qos, > + &cpu_freq_min_pm_qos, > }; > > static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 3/8] cpufreq: Export user_policy min/max 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 2/8] PM QoS: Add CPU frequency minimum as PM QoS param Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 4/8] cpufreq: Preserve sysfs min/max request Antti P Miettinen ` (5 subsequent siblings) 8 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Add sysfs nodes for user_policy min and max settings. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- drivers/cpufreq/cpufreq.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 622013f..f115888 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -363,6 +363,8 @@ show_one(cpuinfo_transition_latency, cpuinfo.transition_latency); show_one(scaling_min_freq, min); show_one(scaling_max_freq, max); show_one(scaling_cur_freq, cur); +show_one(policy_min_freq, user_policy.min); +show_one(policy_max_freq, user_policy.max); static int __cpufreq_set_policy(struct cpufreq_policy *data, struct cpufreq_policy *policy); @@ -581,6 +583,8 @@ cpufreq_freq_attr_rw(scaling_min_freq); cpufreq_freq_attr_rw(scaling_max_freq); cpufreq_freq_attr_rw(scaling_governor); cpufreq_freq_attr_rw(scaling_setspeed); +cpufreq_freq_attr_ro(policy_min_freq); +cpufreq_freq_attr_ro(policy_max_freq); static struct attribute *default_attrs[] = { &cpuinfo_min_freq.attr, @@ -594,6 +598,8 @@ static struct attribute *default_attrs[] = { &scaling_driver.attr, &scaling_available_governors.attr, &scaling_setspeed.attr, + &policy_min_freq.attr, + &policy_max_freq.attr, NULL }; -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH v2 4/8] cpufreq: Preserve sysfs min/max request 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen ` (2 preceding siblings ...) 2012-01-13 12:59 ` [PATCH v2 3/8] cpufreq: Export user_policy min/max Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 5/8] cpufreq: Enforce PM QoS minimum limit Antti P Miettinen ` (4 subsequent siblings) 8 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Store the value received via sysfs as the user_policy min/max value instead of the currently enforced min/max. This allows restoring the user min/max values when constraints on enforced min/max change. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- drivers/cpufreq/cpufreq.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index f115888..127e37a 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -388,7 +388,7 @@ static ssize_t store_##file_name \ return -EINVAL; \ \ ret = __cpufreq_set_policy(policy, &new_policy); \ - policy->user_policy.object = policy->object; \ + policy->user_policy.object = new_policy.object; \ \ return ret ? ret : count; \ } -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH v2 5/8] cpufreq: Enforce PM QoS minimum limit 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen ` (3 preceding siblings ...) 2012-01-13 12:59 ` [PATCH v2 4/8] cpufreq: Preserve sysfs min/max request Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-15 4:51 ` mark gross 2012-01-13 12:59 ` [PATCH v2 6/8] input: CPU frequency booster Antti P Miettinen ` (3 subsequent siblings) 8 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Observe PM QoS CPU frequency minimum in addition to policy settings. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- drivers/cpufreq/cpufreq.c | 41 +++++++++++++++++++++++++++++++++++++++-- 1 files changed, 39 insertions(+), 2 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 127e37a..c2c1c62 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -29,6 +29,7 @@ #include <linux/completion.h> #include <linux/mutex.h> #include <linux/syscore_ops.h> +#include <linux/pm_qos.h> #include <trace/events/power.h> @@ -1633,9 +1634,16 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, struct cpufreq_policy *policy) { int ret = 0; + unsigned int pmin = policy->min; + unsigned int pmax = policy->max; + unsigned int qmin = min(pm_qos_request(PM_QOS_CPU_FREQ_MIN), + data->max); - pr_debug("setting new policy for CPU %u: %u - %u kHz\n", policy->cpu, - policy->min, policy->max); + pr_debug("setting new policy for CPU %u: %u/%u - %u kHz\n", + policy->cpu, pmin, qmin, pmax); + + /* clamp the new policy to PM QoS limits */ + policy->min = max(pmin, qmin); memcpy(&policy->cpuinfo, &data->cpuinfo, sizeof(struct cpufreq_cpuinfo)); @@ -1710,6 +1718,9 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, } error_out: + /* restore the limits that the policy requested */ + policy->min = pmin; + policy->max = pmax; return ret; } @@ -1903,9 +1914,32 @@ int cpufreq_unregister_driver(struct cpufreq_driver *driver) } EXPORT_SYMBOL_GPL(cpufreq_unregister_driver); +static int cpu_freq_notify(struct notifier_block *b, + unsigned long l, void *v); + +static struct notifier_block min_freq_notifier = { + .notifier_call = cpu_freq_notify, +}; + +static int cpu_freq_notify(struct notifier_block *b, + unsigned long l, void *v) +{ + int cpu; + pr_debug("PM QoS min %lu\n", l); + for_each_online_cpu(cpu) { + struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); + if (policy) { + cpufreq_update_policy(policy->cpu); + cpufreq_cpu_put(policy); + } + } + return NOTIFY_OK; +} + static int __init cpufreq_core_init(void) { int cpu; + int rc; for_each_possible_cpu(cpu) { per_cpu(cpufreq_policy_cpu, cpu) = -1; @@ -1915,6 +1949,9 @@ static int __init cpufreq_core_init(void) cpufreq_global_kobject = kobject_create_and_add("cpufreq", &cpu_subsys.dev_root->kobj); BUG_ON(!cpufreq_global_kobject); register_syscore_ops(&cpufreq_syscore_ops); + rc = pm_qos_add_notifier(PM_QOS_CPU_FREQ_MIN, + &min_freq_notifier); + BUG_ON(rc); return 0; } -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 5/8] cpufreq: Enforce PM QoS minimum limit 2012-01-13 12:59 ` [PATCH v2 5/8] cpufreq: Enforce PM QoS minimum limit Antti P Miettinen @ 2012-01-15 4:51 ` mark gross 0 siblings, 0 replies; 31+ messages in thread From: mark gross @ 2012-01-15 4:51 UTC (permalink / raw) To: Antti P Miettinen; +Cc: davej, cpufreq, pavel, rjw, len.brown, linux-pm, mgross git am doesn't work with most of your patchset for me. Tested-by: markgross <markgross@thegnar.org> seems to work on my i5 laptop. Looks good to me. --mark On Fri, Jan 13, 2012 at 02:59:16PM +0200, Antti P Miettinen wrote: > Observe PM QoS CPU frequency minimum in addition > to policy settings. > > Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> > --- > drivers/cpufreq/cpufreq.c | 41 +++++++++++++++++++++++++++++++++++++++-- > 1 files changed, 39 insertions(+), 2 deletions(-) > > diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c > index 127e37a..c2c1c62 100644 > --- a/drivers/cpufreq/cpufreq.c > +++ b/drivers/cpufreq/cpufreq.c > @@ -29,6 +29,7 @@ > #include <linux/completion.h> > #include <linux/mutex.h> > #include <linux/syscore_ops.h> > +#include <linux/pm_qos.h> > > #include <trace/events/power.h> > > @@ -1633,9 +1634,16 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, > struct cpufreq_policy *policy) > { > int ret = 0; > + unsigned int pmin = policy->min; > + unsigned int pmax = policy->max; > + unsigned int qmin = min(pm_qos_request(PM_QOS_CPU_FREQ_MIN), > + data->max); > > - pr_debug("setting new policy for CPU %u: %u - %u kHz\n", policy->cpu, > - policy->min, policy->max); > + pr_debug("setting new policy for CPU %u: %u/%u - %u kHz\n", > + policy->cpu, pmin, qmin, pmax); > + > + /* clamp the new policy to PM QoS limits */ > + policy->min = max(pmin, qmin); > > memcpy(&policy->cpuinfo, &data->cpuinfo, > sizeof(struct cpufreq_cpuinfo)); > @@ -1710,6 +1718,9 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, > } > > error_out: > + /* restore the limits that the policy requested */ > + policy->min = pmin; > + policy->max = pmax; > return ret; > } > > @@ -1903,9 +1914,32 @@ int cpufreq_unregister_driver(struct cpufreq_driver *driver) > } > EXPORT_SYMBOL_GPL(cpufreq_unregister_driver); > > +static int cpu_freq_notify(struct notifier_block *b, > + unsigned long l, void *v); > + > +static struct notifier_block min_freq_notifier = { > + .notifier_call = cpu_freq_notify, > +}; > + > +static int cpu_freq_notify(struct notifier_block *b, > + unsigned long l, void *v) > +{ > + int cpu; > + pr_debug("PM QoS min %lu\n", l); > + for_each_online_cpu(cpu) { > + struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); > + if (policy) { > + cpufreq_update_policy(policy->cpu); > + cpufreq_cpu_put(policy); > + } > + } > + return NOTIFY_OK; > +} > + > static int __init cpufreq_core_init(void) > { > int cpu; > + int rc; > > for_each_possible_cpu(cpu) { > per_cpu(cpufreq_policy_cpu, cpu) = -1; > @@ -1915,6 +1949,9 @@ static int __init cpufreq_core_init(void) > cpufreq_global_kobject = kobject_create_and_add("cpufreq", &cpu_subsys.dev_root->kobj); > BUG_ON(!cpufreq_global_kobject); > register_syscore_ops(&cpufreq_syscore_ops); > + rc = pm_qos_add_notifier(PM_QOS_CPU_FREQ_MIN, > + &min_freq_notifier); > + BUG_ON(rc); > > return 0; > } > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 6/8] input: CPU frequency booster 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen ` (4 preceding siblings ...) 2012-01-13 12:59 ` [PATCH v2 5/8] cpufreq: Enforce PM QoS minimum limit Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 7/8] PM QoS: Add CPU frequency maximum as PM QoS param Antti P Miettinen ` (2 subsequent siblings) 8 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Inspired by cpufreq ondemand governor changes at git://codeaurora.org/kernel/msm.git tree in commits: 2a6181bc76c6ce46ca0fa8e547be42acd534cf0e 1cca8861d8fda4e05f6b0c59c60003345c15454d 96a9aeb02bf5b3fbbef47e44460750eb275e9f1b b600449501cf15928440f87eff86b1f32d14214e 88a65c7ae04632ffee11f9fc628d7ab017c06b83 Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- drivers/input/Kconfig | 9 ++ drivers/input/Makefile | 1 + drivers/input/input-cfboost.c | 174 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+), 0 deletions(-) create mode 100644 drivers/input/input-cfboost.c diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig index 001b147..3859f78 100644 --- a/drivers/input/Kconfig +++ b/drivers/input/Kconfig @@ -161,6 +161,15 @@ config INPUT_APMPOWER To compile this driver as a module, choose M here: the module will be called apm-power. +config INPUT_CFBOOST + tristate "CPU frequency booster" + depends on INPUT && CPU_FREQ + help + Say Y here if you want to boost frequency upon input events; + + To compile this driver as a module, choose M here: the + module will be called input-cfboost. + comment "Input Device Drivers" source "drivers/input/keyboard/Kconfig" diff --git a/drivers/input/Makefile b/drivers/input/Makefile index 0c78949..6cad177 100644 --- a/drivers/input/Makefile +++ b/drivers/input/Makefile @@ -24,3 +24,4 @@ obj-$(CONFIG_INPUT_TOUCHSCREEN) += touchscreen/ obj-$(CONFIG_INPUT_MISC) += misc/ obj-$(CONFIG_INPUT_APMPOWER) += apm-power.o +obj-$(CONFIG_INPUT_CFBOOST) += input-cfboost.o diff --git a/drivers/input/input-cfboost.c b/drivers/input/input-cfboost.c new file mode 100644 index 0000000..bef3ec5 --- /dev/null +++ b/drivers/input/input-cfboost.c @@ -0,0 +1,174 @@ +/* + * drivers/input/input-cfboost.c + * + * Copyright (C) 2012 NVIDIA Corporation + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include <linux/slab.h> +#include <linux/jiffies.h> +#include <linux/printk.h> +#include <linux/workqueue.h> +#include <linux/input.h> +#include <linux/module.h> +#include <linux/pm_qos.h> + +/* This module listens to input events and sets a temporary frequency + * floor upon input event detection. This is based on changes to + * cpufreq ondemand governor by: + * + * Tero Kristo <tero.kristo@nokia.com> + * Brian Steuer <bsteuer@codeaurora.org> + * David Ng <dave@codeaurora.org> + * + * at git://codeaurora.org/kernel/msm.git tree, commits: + * + * 2a6181bc76c6ce46ca0fa8e547be42acd534cf0e + * 1cca8861d8fda4e05f6b0c59c60003345c15454d + * 96a9aeb02bf5b3fbbef47e44460750eb275e9f1b + * b600449501cf15928440f87eff86b1f32d14214e + * 88a65c7ae04632ffee11f9fc628d7ab017c06b83 + */ + +MODULE_AUTHOR("Antti P Miettinen <amiettinen@nvidia.com>"); +MODULE_DESCRIPTION("Input event CPU frequency booster"); +MODULE_LICENSE("GPL v2"); + + +static struct pm_qos_request qos_req; +static struct work_struct boost; +static struct delayed_work unboost; +static unsigned int boost_freq; /* kHz */ +module_param(boost_freq, uint, 0644); +static unsigned long boost_time = 500; /* ms */ +module_param(boost_time, ulong, 0644); +static struct workqueue_struct *cfb_wq; + +static void cfb_boost(struct work_struct *w) +{ + cancel_delayed_work_sync(&unboost); + pm_qos_update_request(&qos_req, boost_freq); + queue_delayed_work(cfb_wq, &unboost, msecs_to_jiffies(boost_time)); +} + +static void cfb_unboost(struct work_struct *w) +{ + pm_qos_update_request(&qos_req, PM_QOS_DEFAULT_VALUE); +} + +static void cfb_input_event(struct input_handle *handle, unsigned int type, + unsigned int code, int value) +{ + if (!work_pending(&boost)) + queue_work(cfb_wq, &boost); +} + +static int cfb_input_connect(struct input_handler *handler, + struct input_dev *dev, + const struct input_device_id *id) +{ + struct input_handle *handle; + int error; + + handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL); + if (!handle) + return -ENOMEM; + + handle->dev = dev; + handle->handler = handler; + handle->name = "icfboost"; + + error = input_register_handle(handle); + if (error) + goto err2; + + error = input_open_device(handle); + if (error) + goto err1; + + return 0; +err1: + input_unregister_handle(handle); +err2: + kfree(handle); + return error; +} + +static void cfb_input_disconnect(struct input_handle *handle) +{ + input_close_device(handle); + input_unregister_handle(handle); + kfree(handle); +} + +/* XXX make configurable */ +static const struct input_device_id cfb_ids[] = { + { /* touch screen */ + .flags = INPUT_DEVICE_ID_MATCH_EVBIT | + INPUT_DEVICE_ID_MATCH_KEYBIT, + .evbit = { BIT_MASK(EV_ABS) }, + .keybit = {[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH) }, + }, + { /* mouse */ + .flags = INPUT_DEVICE_ID_MATCH_EVBIT | + INPUT_DEVICE_ID_MATCH_KEYBIT, + .evbit = { BIT_MASK(EV_REL) }, + .keybit = {[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MOUSE) }, + }, + { }, +}; + +static struct input_handler cfb_input_handler = { + .event = cfb_input_event, + .connect = cfb_input_connect, + .disconnect = cfb_input_disconnect, + .name = "icfboost", + .id_table = cfb_ids, +}; + +static int __init cfboost_init(void) +{ + int ret; + + cfb_wq = create_workqueue("icfb-wq"); + if (!cfb_wq) + return -ENOMEM; + INIT_WORK(&boost, cfb_boost); + INIT_DELAYED_WORK(&unboost, cfb_unboost); + ret = input_register_handler(&cfb_input_handler); + if (ret) { + destroy_workqueue(cfb_wq); + return ret; + } + pm_qos_add_request(&qos_req, PM_QOS_CPU_FREQ_MIN, + PM_QOS_DEFAULT_VALUE); + return 0; +} + +static void __exit cfboost_exit(void) +{ + /* stop input events */ + input_unregister_handler(&cfb_input_handler); + /* cancel pending work requests */ + cancel_work_sync(&boost); + cancel_delayed_work_sync(&unboost); + /* clean up */ + destroy_workqueue(cfb_wq); + pm_qos_remove_request(&qos_req); +} + +module_init(cfboost_init); +module_exit(cfboost_exit); -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PATCH v2 7/8] PM QoS: Add CPU frequency maximum as PM QoS param 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen ` (5 preceding siblings ...) 2012-01-13 12:59 ` [PATCH v2 6/8] input: CPU frequency booster Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-15 4:51 ` mark gross 2012-01-13 12:59 ` [PATCH v2 8/8] cpufreq: Enforce PM QoS maximum frequency Antti P Miettinen 2012-01-13 15:24 ` [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params mark gross 8 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Add maximum CPU frequency as PM QoS parameter. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- include/linux/pm_qos.h | 2 ++ kernel/power/qos.c | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 0 deletions(-) diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 54a0d00..7b8d08b 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -15,6 +15,7 @@ enum { PM_QOS_NETWORK_LATENCY, PM_QOS_NETWORK_THROUGHPUT, PM_QOS_CPU_FREQ_MIN, + PM_QOS_CPU_FREQ_MAX, /* insert new class ID */ @@ -28,6 +29,7 @@ enum { #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE 0 #define PM_QOS_DEV_LAT_DEFAULT_VALUE 0 #define PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE 0 +#define PM_QOS_CPU_FREQ_MAX_DEFAULT_VALUE LONG_MAX struct pm_qos_request { struct plist_node node; diff --git a/kernel/power/qos.c b/kernel/power/qos.c index 07d761a..04b744b 100644 --- a/kernel/power/qos.c +++ b/kernel/power/qos.c @@ -115,12 +115,27 @@ static struct pm_qos_object cpu_freq_min_pm_qos = { }; +static BLOCKING_NOTIFIER_HEAD(cpu_freq_max_notifier); +static struct pm_qos_constraints cpu_freq_max_constraints = { + .list = PLIST_HEAD_INIT(cpu_freq_max_constraints.list), + .target_value = PM_QOS_CPU_FREQ_MAX_DEFAULT_VALUE, + .default_value = PM_QOS_CPU_FREQ_MAX_DEFAULT_VALUE, + .type = PM_QOS_MIN, + .notifiers = &cpu_freq_max_notifier, +}; +static struct pm_qos_object cpu_freq_max_pm_qos = { + .constraints = &cpu_freq_max_constraints, + .name = "cpu_freq_max", +}; + + static struct pm_qos_object *pm_qos_array[] = { &null_pm_qos, &cpu_dma_pm_qos, &network_lat_pm_qos, &network_throughput_pm_qos, &cpu_freq_min_pm_qos, + &cpu_freq_max_pm_qos, }; static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 7/8] PM QoS: Add CPU frequency maximum as PM QoS param 2012-01-13 12:59 ` [PATCH v2 7/8] PM QoS: Add CPU frequency maximum as PM QoS param Antti P Miettinen @ 2012-01-15 4:51 ` mark gross 0 siblings, 0 replies; 31+ messages in thread From: mark gross @ 2012-01-15 4:51 UTC (permalink / raw) To: Antti P Miettinen; +Cc: davej, cpufreq, pavel, rjw, len.brown, linux-pm, mgross I don't think this belongs in cpufreq. --mark On Fri, Jan 13, 2012 at 02:59:18PM +0200, Antti P Miettinen wrote: > Add maximum CPU frequency as PM QoS parameter. > > Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> > --- > include/linux/pm_qos.h | 2 ++ > kernel/power/qos.c | 15 +++++++++++++++ > 2 files changed, 17 insertions(+), 0 deletions(-) > > diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h > index 54a0d00..7b8d08b 100644 > --- a/include/linux/pm_qos.h > +++ b/include/linux/pm_qos.h > @@ -15,6 +15,7 @@ enum { > PM_QOS_NETWORK_LATENCY, > PM_QOS_NETWORK_THROUGHPUT, > PM_QOS_CPU_FREQ_MIN, > + PM_QOS_CPU_FREQ_MAX, > > /* insert new class ID */ > > @@ -28,6 +29,7 @@ enum { > #define PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE 0 > #define PM_QOS_DEV_LAT_DEFAULT_VALUE 0 > #define PM_QOS_CPU_FREQ_MIN_DEFAULT_VALUE 0 > +#define PM_QOS_CPU_FREQ_MAX_DEFAULT_VALUE LONG_MAX > > struct pm_qos_request { > struct plist_node node; > diff --git a/kernel/power/qos.c b/kernel/power/qos.c > index 07d761a..04b744b 100644 > --- a/kernel/power/qos.c > +++ b/kernel/power/qos.c > @@ -115,12 +115,27 @@ static struct pm_qos_object cpu_freq_min_pm_qos = { > }; > > > +static BLOCKING_NOTIFIER_HEAD(cpu_freq_max_notifier); > +static struct pm_qos_constraints cpu_freq_max_constraints = { > + .list = PLIST_HEAD_INIT(cpu_freq_max_constraints.list), > + .target_value = PM_QOS_CPU_FREQ_MAX_DEFAULT_VALUE, > + .default_value = PM_QOS_CPU_FREQ_MAX_DEFAULT_VALUE, > + .type = PM_QOS_MIN, > + .notifiers = &cpu_freq_max_notifier, > +}; > +static struct pm_qos_object cpu_freq_max_pm_qos = { > + .constraints = &cpu_freq_max_constraints, > + .name = "cpu_freq_max", > +}; > + > + > static struct pm_qos_object *pm_qos_array[] = { > &null_pm_qos, > &cpu_dma_pm_qos, > &network_lat_pm_qos, > &network_throughput_pm_qos, > &cpu_freq_min_pm_qos, > + &cpu_freq_max_pm_qos, > }; > > static ssize_t pm_qos_power_write(struct file *filp, const char __user *buf, > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 8/8] cpufreq: Enforce PM QoS maximum frequency 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen ` (6 preceding siblings ...) 2012-01-13 12:59 ` [PATCH v2 7/8] PM QoS: Add CPU frequency maximum as PM QoS param Antti P Miettinen @ 2012-01-13 12:59 ` Antti P Miettinen 2012-01-13 15:24 ` [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params mark gross 8 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 12:59 UTC (permalink / raw) To: davej, cpufreq, pavel, rjw, len.brown, linux-pm; +Cc: mgross Observe PM QoS CPU frequency maximum in addition to policy settings. Signed-off-by: Antti P Miettinen <amiettinen@nvidia.com> --- drivers/cpufreq/cpufreq.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index c2c1c62..d233a8b 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -1638,12 +1638,15 @@ static int __cpufreq_set_policy(struct cpufreq_policy *data, unsigned int pmax = policy->max; unsigned int qmin = min(pm_qos_request(PM_QOS_CPU_FREQ_MIN), data->max); + unsigned int qmax = max(pm_qos_request(PM_QOS_CPU_FREQ_MAX), + data->min); - pr_debug("setting new policy for CPU %u: %u/%u - %u kHz\n", - policy->cpu, pmin, qmin, pmax); + pr_debug("setting new policy for CPU %u: %u/%u - %u/%u kHz\n", + policy->cpu, pmin, qmin, pmax, qmax); /* clamp the new policy to PM QoS limits */ policy->min = max(pmin, qmin); + policy->max = min(pmax, qmax); memcpy(&policy->cpuinfo, &data->cpuinfo, sizeof(struct cpufreq_cpuinfo)); @@ -1920,12 +1923,16 @@ static int cpu_freq_notify(struct notifier_block *b, static struct notifier_block min_freq_notifier = { .notifier_call = cpu_freq_notify, }; +static struct notifier_block max_freq_notifier = { + .notifier_call = cpu_freq_notify, +}; static int cpu_freq_notify(struct notifier_block *b, unsigned long l, void *v) { int cpu; - pr_debug("PM QoS min %lu\n", l); + pr_debug("PM QoS %s %lu\n", + b == &min_freq_notifier ? "min" : "max", l); for_each_online_cpu(cpu) { struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); if (policy) { @@ -1952,6 +1959,9 @@ static int __init cpufreq_core_init(void) rc = pm_qos_add_notifier(PM_QOS_CPU_FREQ_MIN, &min_freq_notifier); BUG_ON(rc); + rc = pm_qos_add_notifier(PM_QOS_CPU_FREQ_MAX, + &max_freq_notifier); + BUG_ON(rc); return 0; } -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen ` (7 preceding siblings ...) 2012-01-13 12:59 ` [PATCH v2 8/8] cpufreq: Enforce PM QoS maximum frequency Antti P Miettinen @ 2012-01-13 15:24 ` mark gross 2012-01-13 16:17 ` Antti P Miettinen 8 siblings, 1 reply; 31+ messages in thread From: mark gross @ 2012-01-13 15:24 UTC (permalink / raw) To: Antti P Miettinen; +Cc: davej, cpufreq, pavel, rjw, len.brown, linux-pm, mgross just a quick note: ever since I lost my mgross@linux.intel.com email I've started using markgross@thegnar.org On Fri, Jan 13, 2012 at 02:59:11PM +0200, Antti P Miettinen wrote: > The inspiration for this patch series is the N9 CPU frequency boost > upon input events: > > http://www.spinics.net/lists/cpufreq/msg00667.html > > and the related changes in git://codeaurora.org/kernel/msm.git tree. > Those patches modify the ondemand cpufreq governor. This patch series > adds minimum and maximum CPU frequency as PM QoS parameters and > modifies the cpufreq core to enforce the PM QoS limits. There is also > an example module for boosting the frequency upon input events. > > I've been testing these changes against Ubuntu 3.2 kernel on a Dell > E6420 with the ACPI cpufreq driver. The patches are against > linux-next/master, compile tested against it. I'll test it this weekend as well. FWIW if this works the way I hope it does then, its a feature we need for different reasons than interactivity. So thanks for working on this! > > V2: > * split min and max to separate commits > * handle PM QoS min above max as max > * handle PM QoS max below min as min A qos to constrain how slow the cpu goes is ok. A qos to constrain how fast it is allowed to go is not a PM_QOS thing. I'll review the patchset later today. Thanks! --mark > > --Antti > > Alex Frid (1): > PM QoS: Simplify PM QoS expansion/merge > > Antti P Miettinen (7): > PM QoS: Add CPU frequency minimum as PM QoS param > cpufreq: Export user_policy min/max > cpufreq: Preserve sysfs min/max request > cpufreq: Enforce PM QoS minimum limit > input: CPU frequency booster > PM QoS: Add CPU frequency maximum as PM QoS param > cpufreq: Enforce PM QoS maximum frequency > > drivers/cpufreq/cpufreq.c | 59 +++++++++++++- > drivers/input/Kconfig | 9 ++ > drivers/input/Makefile | 1 + > drivers/input/input-cfboost.c | 174 +++++++++++++++++++++++++++++++++++++++++ > include/linux/pm_qos.h | 19 ++++- > kernel/power/qos.c | 55 ++++++++++---- > 6 files changed, 295 insertions(+), 22 deletions(-) > create mode 100644 drivers/input/input-cfboost.c > > -- > 1.7.4.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-pm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-13 15:24 ` [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params mark gross @ 2012-01-13 16:17 ` Antti P Miettinen 0 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-13 16:17 UTC (permalink / raw) To: cpufreq; +Cc: linux-pm mark gross <markgross@thegnar.org> writes: > just a quick note: ever since I lost my mgross@linux.intel.com email > I've started using markgross@thegnar.org Sorry - I picked the @linux.intel.com address from git blame. Hmm.. is the mark.gross@intelc.om in MAINTAINERS still valid? > FWIW if this works the way I hope it does then, its a feature we need > for different reasons than interactivity. So thanks for working on > this! Thanks - I appreciate the feedback! >> V2: >> * split min and max to separate commits >> * handle PM QoS min above max as max >> * handle PM QoS max below min as min > > A qos to constrain how slow the cpu goes is ok. > A qos to constrain how fast it is allowed to go is not a PM_QOS thing. Thanks - I appreciate the feedback :-) As I said earlier, I think the maximum frequency can act as a level of energy efficiency request. If a workload knows that a certain level of performance is adequate, the maximum frequency request can prevent e.g. ondemand unnecessarily raising the frequency. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params @ 2012-01-16 6:59 Antti P Miettinen 2012-01-16 21:38 ` Rafael J. Wysocki 2012-01-18 3:44 ` mark gross 0 siblings, 2 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-16 6:59 UTC (permalink / raw) To: linux-pm [did not reach linux-pm as I sent to wrong address, sorry for duplicates] The inspiration for this patch series is the N9 CPU frequency boost upon input events: http://www.spinics.net/lists/cpufreq/msg00667.html and the related changes in git://codeaurora.org/kernel/msm.git tree. Those patches modify the ondemand cpufreq governor. This patch series adds minimum and maximum CPU frequency as PM QoS parameters and modifies the cpufreq core to enforce the PM QoS limits. There is also an example module for boosting the frequency upon input events. I've been testing these changes against Ubuntu 3.2 kernel on a Dell E6420 with the ACPI cpufreq driver. The patches are against linux-next/master, compile tested against it. V2: * split min and max to separate commits * handle PM QoS min above max as max * handle PM QoS max below min as min --Antti Alex Frid (1): PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen (7): PM QoS: Add CPU frequency minimum as PM QoS param cpufreq: Export user_policy min/max cpufreq: Preserve sysfs min/max request cpufreq: Enforce PM QoS minimum limit input: CPU frequency booster PM QoS: Add CPU frequency maximum as PM QoS param cpufreq: Enforce PM QoS maximum frequency drivers/cpufreq/cpufreq.c | 59 +++++++++++++- drivers/input/Kconfig | 9 ++ drivers/input/Makefile | 1 + drivers/input/input-cfboost.c | 174 +++++++++++++++++++++++++++++++++++++++++ include/linux/pm_qos.h | 19 ++++- kernel/power/qos.c | 55 ++++++++++---- 6 files changed, 295 insertions(+), 22 deletions(-) create mode 100644 drivers/input/input-cfboost.c -- 1.7.4.1 ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-16 6:59 Antti P Miettinen @ 2012-01-16 21:38 ` Rafael J. Wysocki 2012-01-17 6:14 ` Antti P Miettinen 2012-01-18 3:13 ` mark gross 2012-01-18 3:44 ` mark gross 1 sibling, 2 replies; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-16 21:38 UTC (permalink / raw) To: Antti P Miettinen; +Cc: linux-pm, cpufreq, mark gross Hi, On Monday, January 16, 2012, Antti P Miettinen wrote: > [did not reach linux-pm as I sent to wrong address, sorry for > duplicates] > > The inspiration for this patch series is the N9 CPU frequency boost > upon input events: > > http://www.spinics.net/lists/cpufreq/msg00667.html > > and the related changes in git://codeaurora.org/kernel/msm.git tree. > Those patches modify the ondemand cpufreq governor. This patch series > adds minimum and maximum CPU frequency as PM QoS parameters and > modifies the cpufreq core to enforce the PM QoS limits. If that hasn't been clear enough so far, I'm still not convinced that using PM QoS for that is a good idea. First off, frequency as a unit of throughput is questionable to say the least, because it isn't portable from one system to another. Moreover, even on a given system it isn't particularly clear what the exact correspondence between frequency and throughput actually is. Second, it's not particularly clear what the meaning of the "min" frequency is supposed to be in terms of throughput. Moreover, you make cpufreq export user_policy.min and user_policy.max regardless of the new PM QoS parameters, so it looks like you could use those new attributes to set the min/max as well. Thanks, Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-16 21:38 ` Rafael J. Wysocki @ 2012-01-17 6:14 ` Antti P Miettinen 2012-01-17 6:25 ` [linux-pm] " Mansoor, Illyas 2012-01-17 21:27 ` [linux-pm] " Rafael J. Wysocki 2012-01-18 3:13 ` mark gross 1 sibling, 2 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-17 6:14 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: > If that hasn't been clear enough so far, I'm still not convinced that using > PM QoS for that is a good idea. > > First off, frequency as a unit of throughput is questionable to say the least, > because it isn't portable from one system to another. Moreover, even on a > given system it isn't particularly clear what the exact correspondence > between frequency and throughput actually is. > > Second, it's not particularly clear what the meaning of the "min" frequency > is supposed to be in terms of throughput. > > Moreover, you make cpufreq export user_policy.min and user_policy.max > regardless of the new PM QoS parameters, so it looks like you could use those > new attributes to set the min/max as well. > > Thanks, > Rafael Thanks - yes - I've understood you are not convinced :-) Is there any reason why the mapping from application oriented performance requirement metric to hardware oriented performance setting metric would need to be inside kernel? As I've said (and Mark Gross seems to agree) the performance requirements are likely to be system specific and probably obtained via trial and error or some kind of adaptive iteration. Wouldn't it be better to leave this complexity outside PM QoS core or even outside kernel if possible? The change to cpufreq core just adds two read-only files to be able to inspect user_policy.min/max in addition to the currently enforced policy->min/max. Yes - there has been the possibility of using the sysfs min for setting a frequency floor but this is problematic when there are multiple clients. You'd need some kind of arbitration and book keeping to set/restore the minimum. And PM QoS provides exactly this mechanism. I think the kernel needs to be extended to handle more PM constraints and PM QoS is the closest thing I know for this kind of functionality. However, I'm open to suggestions about alternative approaches. I think we need e.g. more than just min/max "reduction operators". Ideas, anyone? --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* RE: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-17 6:14 ` Antti P Miettinen @ 2012-01-17 6:25 ` Mansoor, Illyas 2012-01-17 9:54 ` Antti P Miettinen 2012-01-17 21:27 ` [linux-pm] " Rafael J. Wysocki 1 sibling, 1 reply; 31+ messages in thread From: Mansoor, Illyas @ 2012-01-17 6:25 UTC (permalink / raw) To: Antti P Miettinen, linux-pm; +Cc: cpufreq > -----Original Message----- > From: linux-pm-bounces@lists.linux-foundation.org [mailto:linux-pm- > bounces@lists.linux-foundation.org] On Behalf Of Antti P Miettinen > Sent: Tuesday, January 17, 2012 11:45 AM > To: linux-pm@lists.linux-foundation.org > Cc: cpufreq@vger.kernel.org > Subject: Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS > params > > "Rafael J. Wysocki" <rjw@sisk.pl> writes: > > If that hasn't been clear enough so far, I'm still not convinced that > > using PM QoS for that is a good idea. > > > > First off, frequency as a unit of throughput is questionable to say > > the least, because it isn't portable from one system to another. > > Moreover, even on a given system it isn't particularly clear what the > > exact correspondence between frequency and throughput actually is. > > > > Second, it's not particularly clear what the meaning of the "min" > > frequency is supposed to be in terms of throughput. > > > > Moreover, you make cpufreq export user_policy.min and user_policy.max > > regardless of the new PM QoS parameters, so it looks like you could > > use those new attributes to set the min/max as well. > > > > Thanks, > > Rafael > > Thanks - yes - I've understood you are not convinced :-) > > Is there any reason why the mapping from application oriented performance > requirement metric to hardware oriented performance setting metric would > need to be inside kernel? As I've said (and Mark Gross seems to agree) the > performance requirements are likely to be system specific and probably obtained > via trial and error or some kind of adaptive iteration. Wouldn't it be better to > leave this complexity outside PM QoS core or even outside kernel if possible? > > The change to cpufreq core just adds two read-only files to be able to inspect > user_policy.min/max in addition to the currently enforced > policy->min/max. Yes - there has been the possibility of using the sysfs > min for setting a frequency floor but this is problematic when there are multiple > clients. You'd need some kind of arbitration and book keeping to set/restore the > minimum. And PM QoS provides exactly this mechanism. > > I think the kernel needs to be extended to handle more PM constraints and PM > QoS is the closest thing I know for this kind of functionality. However, I'm open to > suggestions about alternative approaches. I think we need e.g. more than just > min/max "reduction operators". Ideas, anyone? How about a notion of platform agnostic freq metric that can then me normalized to The platform available freq's like for example a value 100 that denotes top freq, that Way PM QoS can then ajust the application requested number to platform available Freq. Just like the On-Demand power_savebias option that uses 0 for the highest freq -Illyas ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-17 6:25 ` [linux-pm] " Mansoor, Illyas @ 2012-01-17 9:54 ` Antti P Miettinen 0 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-17 9:54 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Mansoor, Illyas" <illyas.mansoor@intel.com> writes: > How about a notion of platform agnostic freq metric that can then me > normalized to The platform available freq's like for example a value > 100 that denotes top freq, that Way PM QoS can then ajust the > application requested number to platform available Freq. That will not necessarily help the PM QoS client in choosing the appropriate performance level. On one platform the appropriate level for a given situation might be 5% of max, on another 75%. I think the hairy issue is that there are so many application oriented performance metrics (MIPS, FLOPS, FPS, milliseconds..). --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-17 6:14 ` Antti P Miettinen 2012-01-17 6:25 ` [linux-pm] " Mansoor, Illyas @ 2012-01-17 21:27 ` Rafael J. Wysocki 2012-01-18 7:52 ` Antti P Miettinen 1 sibling, 1 reply; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-17 21:27 UTC (permalink / raw) To: linux-pm; +Cc: Antti P Miettinen, cpufreq On Tuesday, January 17, 2012, Antti P Miettinen wrote: > "Rafael J. Wysocki" <rjw@sisk.pl> writes: > > If that hasn't been clear enough so far, I'm still not convinced that using > > PM QoS for that is a good idea. > > > > First off, frequency as a unit of throughput is questionable to say the least, > > because it isn't portable from one system to another. Moreover, even on a > > given system it isn't particularly clear what the exact correspondence > > between frequency and throughput actually is. > > > > Second, it's not particularly clear what the meaning of the "min" frequency > > is supposed to be in terms of throughput. > > > > Moreover, you make cpufreq export user_policy.min and user_policy.max > > regardless of the new PM QoS parameters, so it looks like you could use those > > new attributes to set the min/max as well. > > > > Thanks, > > Rafael > > Thanks - yes - I've understood you are not convinced :-) > > Is there any reason why the mapping from application oriented > performance requirement metric to hardware oriented performance setting > metric would need to be inside kernel? As I've said (and Mark Gross > seems to agree) the performance requirements are likely to be system > specific and probably obtained via trial and error or some kind of > adaptive iteration. Wouldn't it be better to leave this complexity > outside PM QoS core or even outside kernel if possible? If I understand you correctly, you want to have an iterface for specifying min and max frequencies from user space. I can understand that. At least I can see some use cases for that. Now, the question is if using the PM QoS framework is the right way to do that. > The change to cpufreq core just adds two read-only files to be able to > inspect user_policy.min/max in addition to the currently enforced > policy->min/max. Yes - there has been the possibility of using the sysfs > min for setting a frequency floor but this is problematic when there are > multiple clients. You'd need some kind of arbitration and book keeping > to set/restore the minimum. And PM QoS provides exactly this mechanism. Just as I suspected. :-) OK, so what's your anticipated usage model of this? > I think the kernel needs to be extended to handle more PM constraints > and PM QoS is the closest thing I know for this kind of > functionality. However, I'm open to suggestions about alternative > approaches. I think we need e.g. more than just min/max "reduction > operators". Ideas, anyone? I first need to know who those multiple clients are going to be. Thanks, Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-17 21:27 ` [linux-pm] " Rafael J. Wysocki @ 2012-01-18 7:52 ` Antti P Miettinen 2012-01-18 23:10 ` [linux-pm] " Rafael J. Wysocki 0 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-18 7:52 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: [..] > If I understand you correctly, you want to have an iterface for specifying > min and max frequencies from user space. I can understand that. At least > I can see some use cases for that. > > Now, the question is if using the PM QoS framework is the right way to do > that. > >> The change to cpufreq core just adds two read-only files to be able to >> inspect user_policy.min/max in addition to the currently enforced >> policy->min/max. Yes - there has been the possibility of using the sysfs >> min for setting a frequency floor but this is problematic when there are >> multiple clients. You'd need some kind of arbitration and book keeping >> to set/restore the minimum. And PM QoS provides exactly this mechanism. > > Just as I suspected. :-) > > OK, so what's your anticipated usage model of this? We've been experimenting with hooking the frequency boost to e.g. touch screen UI events and application launch. I believe there are also some specific applications that would want to either set a frequency floor or ceiling in some situations. >> I think the kernel needs to be extended to handle more PM constraints >> and PM QoS is the closest thing I know for this kind of >> functionality. However, I'm open to suggestions about alternative >> approaches. I think we need e.g. more than just min/max "reduction >> operators". Ideas, anyone? > > I first need to know who those multiple clients are going to be. > > Thanks, > Rafael For the touch screen UI, the boost could be implemented as a kernel module hooked with suitable event filter to the input event stream. Another possibility is the UI framework in user space. Some specific user space applications would also be clients. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 7:52 ` Antti P Miettinen @ 2012-01-18 23:10 ` Rafael J. Wysocki 2012-01-19 6:41 ` Antti P Miettinen 0 siblings, 1 reply; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-18 23:10 UTC (permalink / raw) To: Antti P Miettinen; +Cc: linux-pm, cpufreq, mark gross On Wednesday, January 18, 2012, Antti P Miettinen wrote: > "Rafael J. Wysocki" <rjw@sisk.pl> writes: > [..] > > If I understand you correctly, you want to have an iterface for specifying > > min and max frequencies from user space. I can understand that. At least > > I can see some use cases for that. > > > > Now, the question is if using the PM QoS framework is the right way to do > > that. > > > >> The change to cpufreq core just adds two read-only files to be able to > >> inspect user_policy.min/max in addition to the currently enforced > >> policy->min/max. Yes - there has been the possibility of using the sysfs > >> min for setting a frequency floor but this is problematic when there are > >> multiple clients. You'd need some kind of arbitration and book keeping > >> to set/restore the minimum. And PM QoS provides exactly this mechanism. > > > > Just as I suspected. :-) > > > > OK, so what's your anticipated usage model of this? > > We've been experimenting with hooking the frequency boost to e.g. touch > screen UI events and application launch. I believe there are also some > specific applications that would want to either set a frequency floor or > ceiling in some situations. > > >> I think the kernel needs to be extended to handle more PM constraints > >> and PM QoS is the closest thing I know for this kind of > >> functionality. However, I'm open to suggestions about alternative > >> approaches. I think we need e.g. more than just min/max "reduction > >> operators". Ideas, anyone? > > > > I first need to know who those multiple clients are going to be. > > > > Thanks, > > Rafael > > For the touch screen UI, the boost could be implemented as a kernel > module hooked with suitable event filter to the input event > stream. Another possibility is the UI framework in user space. Some > specific user space applications would also be clients. I see. However, if you use PM QoS for that as proposed, there will be only one misc device for the minimum CPU frequency and one for the maximum, so user space will only be able to specify those numbers globally, ie. for all CPUs in the system. Is that your intention? Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 23:10 ` [linux-pm] " Rafael J. Wysocki @ 2012-01-19 6:41 ` Antti P Miettinen 0 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-19 6:41 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: > On Wednesday, January 18, 2012, Antti P Miettinen wrote: [..] >> For the touch screen UI, the boost could be implemented as a kernel >> module hooked with suitable event filter to the input event >> stream. Another possibility is the UI framework in user space. Some >> specific user space applications would also be clients. > > I see. > > However, if you use PM QoS for that as proposed, there will be only one > misc device for the minimum CPU frequency and one for the maximum, so > user space will only be able to specify those numbers globally, ie. for > all CPUs in the system. Is that your intention? Yes - global floor/ceiling is what we want for these cases. Resource specific constraints would be useful also. I guess the device specific requests could be used for those but I do not have any code related to this - yet at least :-) --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-16 21:38 ` Rafael J. Wysocki 2012-01-17 6:14 ` Antti P Miettinen @ 2012-01-18 3:13 ` mark gross 2012-01-18 8:15 ` Antti P Miettinen 2012-01-18 23:24 ` Rafael J. Wysocki 1 sibling, 2 replies; 31+ messages in thread From: mark gross @ 2012-01-18 3:13 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: linux-pm, Antti P Miettinen, cpufreq, mark gross On Mon, Jan 16, 2012 at 10:38:57PM +0100, Rafael J. Wysocki wrote: > Hi, > > On Monday, January 16, 2012, Antti P Miettinen wrote: > > [did not reach linux-pm as I sent to wrong address, sorry for > > duplicates] > > > > The inspiration for this patch series is the N9 CPU frequency boost > > upon input events: > > > > http://www.spinics.net/lists/cpufreq/msg00667.html > > > > and the related changes in git://codeaurora.org/kernel/msm.git tree. > > Those patches modify the ondemand cpufreq governor. This patch series > > adds minimum and maximum CPU frequency as PM QoS parameters and > > modifies the cpufreq core to enforce the PM QoS limits. > > If that hasn't been clear enough so far, I'm still not convinced that using > PM QoS for that is a good idea. > > First off, frequency as a unit of throughput is questionable to say the least, > because it isn't portable from one system to another. Moreover, even on a > given system it isn't particularly clear what the exact correspondence > between frequency and throughput actually is. You are right. The notion of throughput of a CPU is really hard to quantify. Perhaps not using the term "throughput" would help? The base issue I see, the Intel platform, is needing is that sometimes we need to block the lowest P-states that the ondemand governor goes for because those P-states result in media / graphics workloads dropping frames. However; GPU intensive workloads do not stress the CPU so the ondemand governor goes for the low p-state. I could use some way of constraining the PM-throttling of the cpu-freq that can be hit from kernel or user mode. So the graphics driver can dynamically adjust the constraint request on the cpufreq subsystem. It is problematic that any driver requesting a given frequency request is not portable across ISA's or even processor families in the same ISA. But, maybe such a driver should use a module parameter to work around this lack of portability? > Second, it's not particularly clear what the meaning of the "min" frequency > is supposed to be in terms of throughput. It should mean "please cpufreq do not put the cpu into a state where its clock runs slower than min". I don't think we should talk about it as throughput because thats not what the cpufreq controls. > > Moreover, you make cpufreq export user_policy.min and user_policy.max > regardless of the new PM QoS parameters, so it looks like you could use those > new attributes to set the min/max as well. I'm not a big fan of the cpufreq seamanly redundant export either. Doesn't the equivalent data get exported under /sys/devices/system/cpu/cpu?/cpufreq/ ? my 2 cents. --mark ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 3:13 ` mark gross @ 2012-01-18 8:15 ` Antti P Miettinen 2012-01-18 23:24 ` Rafael J. Wysocki 1 sibling, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-18 8:15 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq mark gross <markgross@thegnar.org> writes: > I'm not a big fan of the cpufreq seamanly redundant export either. > Doesn't the equivalent data get exported under > /sys/devices/system/cpu/cpu?/cpufreq/ ? The added sysfs nodes are under /sys/devices/system/cpu/cpu?/cpufreq. They do no not duplicate functionality, they are just an addition. Currently you can request a new minimum by writing to scaling_min_freq and you can view the currently enforced policy->min via the same file. Patch 3 adds read-only policy_{min,max}_freq nodes for being able to inspect the user_policy.min/max. This is related to patch 4 which preserves the requested min/max in user_policy instead of storing the enforced min/max to user_policy. This is in turn related to patch 5. We need to be able to revert back to requested min/max when PM QoS constraints get lifted. I think we do not want to overwrite user_policy min/max with policy->min/max as those values can be affected by temporary constraints. I would welcome more comments on patches 3 and 4. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 3:13 ` mark gross 2012-01-18 8:15 ` Antti P Miettinen @ 2012-01-18 23:24 ` Rafael J. Wysocki 2012-01-19 6:49 ` Antti P Miettinen 2012-01-19 16:41 ` [linux-pm] " mark gross 1 sibling, 2 replies; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-18 23:24 UTC (permalink / raw) To: markgross; +Cc: linux-pm, Antti P Miettinen, cpufreq On Wednesday, January 18, 2012, mark gross wrote: > On Mon, Jan 16, 2012 at 10:38:57PM +0100, Rafael J. Wysocki wrote: > > Hi, > > > > On Monday, January 16, 2012, Antti P Miettinen wrote: > > > [did not reach linux-pm as I sent to wrong address, sorry for > > > duplicates] > > > > > > The inspiration for this patch series is the N9 CPU frequency boost > > > upon input events: > > > > > > http://www.spinics.net/lists/cpufreq/msg00667.html > > > > > > and the related changes in git://codeaurora.org/kernel/msm.git tree. > > > Those patches modify the ondemand cpufreq governor. This patch series > > > adds minimum and maximum CPU frequency as PM QoS parameters and > > > modifies the cpufreq core to enforce the PM QoS limits. > > > > If that hasn't been clear enough so far, I'm still not convinced that using > > PM QoS for that is a good idea. > > > > First off, frequency as a unit of throughput is questionable to say the least, > > because it isn't portable from one system to another. Moreover, even on a > > given system it isn't particularly clear what the exact correspondence > > between frequency and throughput actually is. > > You are right. The notion of throughput of a CPU is really hard to > quantify. Perhaps not using the term "throughput" would help? Yes, it would. > The base issue I see, the Intel platform, is needing is that sometimes > we need to block the lowest P-states that the ondemand governor goes for > because those P-states result in media / graphics workloads dropping > frames. However; GPU intensive workloads do not stress the CPU so the > ondemand governor goes for the low p-state. > > I could use some way of constraining the PM-throttling of the > cpu-freq that can be hit from kernel or user mode. So the graphics > driver can dynamically adjust the constraint request on the cpufreq > subsystem. > > It is problematic that any driver requesting a given frequency request > is not portable across ISA's or even processor families in the same ISA. > But, maybe such a driver should use a module parameter to work around > this lack of portability? Well, it seems to me that we're trying to add a backdoor to the (apparently inadequate) governors here. Arguably, the governors should be able to make the right decisions on the basis of the information they receive through their own interfaces. > > Second, it's not particularly clear what the meaning of the "min" frequency > > is supposed to be in terms of throughput. > > It should mean "please cpufreq do not put the cpu into a state where its > clock runs slower than min". I don't think we should talk about it as > throughput because thats not what the cpufreq controls. Perhaps we need a new cpufreq governor that would take use PM QoS internally to store requests from different sources, but that would work on a per-CPU basis (not globally) and would provide a new interface for user space? Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 23:24 ` Rafael J. Wysocki @ 2012-01-19 6:49 ` Antti P Miettinen 2012-01-19 22:40 ` [linux-pm] " Rafael J. Wysocki 2012-01-19 16:41 ` [linux-pm] " mark gross 1 sibling, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-19 6:49 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: [..] > Perhaps we need a new cpufreq governor that would take use PM QoS internally > to store requests from different sources, but that would work on a per-CPU > basis (not globally) and would provide a new interface for user space? > > Rafael I think it would be nice if the choice of governor could be independent of the constraints. Also, implementing the constraints in the cpufreq core is easier than in governors. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-19 6:49 ` Antti P Miettinen @ 2012-01-19 22:40 ` Rafael J. Wysocki 2012-01-22 9:55 ` Antti P Miettinen 0 siblings, 1 reply; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-19 22:40 UTC (permalink / raw) To: Antti P Miettinen; +Cc: linux-pm, cpufreq, markgross On Thursday, January 19, 2012, Antti P Miettinen wrote: > "Rafael J. Wysocki" <rjw@sisk.pl> writes: > [..] > > Perhaps we need a new cpufreq governor that would take use PM QoS internally > > to store requests from different sources, but that would work on a per-CPU > > basis (not globally) and would provide a new interface for user space? > > > > Rafael > > I think it would be nice if the choice of governor could be independent > of the constraints. Also, implementing the constraints in the cpufreq > core is easier than in governors. Well, while it might be easier, the _whole_ _point_ of governors is to make decisions on the basis of available data. By introducing an independent mechanism for that we're bypassing governors in a sense. Thanks, Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-19 22:40 ` [linux-pm] " Rafael J. Wysocki @ 2012-01-22 9:55 ` Antti P Miettinen 0 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-22 9:55 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: > Well, while it might be easier, the _whole_ _point_ of governors is to make > decisions on the basis of available data. By introducing an independent > mechanism for that we're bypassing governors in a sense. I see this as modular design: governor defines the overall CPU frequency control policy and PM QoS defines constraints. I think those things can and probably should be somewhat independent. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 23:24 ` Rafael J. Wysocki 2012-01-19 6:49 ` Antti P Miettinen @ 2012-01-19 16:41 ` mark gross 2012-01-19 19:48 ` Antti P Miettinen 1 sibling, 1 reply; 31+ messages in thread From: mark gross @ 2012-01-19 16:41 UTC (permalink / raw) To: Rafael J. Wysocki; +Cc: markgross, linux-pm, Antti P Miettinen, cpufreq On Thu, Jan 19, 2012 at 12:24:26AM +0100, Rafael J. Wysocki wrote: > On Wednesday, January 18, 2012, mark gross wrote: > > On Mon, Jan 16, 2012 at 10:38:57PM +0100, Rafael J. Wysocki wrote: > > > Hi, > > > > > > On Monday, January 16, 2012, Antti P Miettinen wrote: > > > > [did not reach linux-pm as I sent to wrong address, sorry for > > > > duplicates] > > > > > > > > The inspiration for this patch series is the N9 CPU frequency boost > > > > upon input events: > > > > > > > > http://www.spinics.net/lists/cpufreq/msg00667.html > > > > > > > > and the related changes in git://codeaurora.org/kernel/msm.git tree. > > > > Those patches modify the ondemand cpufreq governor. This patch series > > > > adds minimum and maximum CPU frequency as PM QoS parameters and > > > > modifies the cpufreq core to enforce the PM QoS limits. > > > > > > If that hasn't been clear enough so far, I'm still not convinced that using > > > PM QoS for that is a good idea. > > > > > > First off, frequency as a unit of throughput is questionable to say the least, > > > because it isn't portable from one system to another. Moreover, even on a > > > given system it isn't particularly clear what the exact correspondence > > > between frequency and throughput actually is. > > > > You are right. The notion of throughput of a CPU is really hard to > > quantify. Perhaps not using the term "throughput" would help? > > Yes, it would. > > > The base issue I see, the Intel platform, is needing is that sometimes > > we need to block the lowest P-states that the ondemand governor goes for > > because those P-states result in media / graphics workloads dropping > > frames. However; GPU intensive workloads do not stress the CPU so the > > ondemand governor goes for the low p-state. > > > > I could use some way of constraining the PM-throttling of the > > cpu-freq that can be hit from kernel or user mode. So the graphics > > driver can dynamically adjust the constraint request on the cpufreq > > subsystem. > > > > It is problematic that any driver requesting a given frequency request > > is not portable across ISA's or even processor families in the same ISA. > > But, maybe such a driver should use a module parameter to work around > > this lack of portability? > > Well, it seems to me that we're trying to add a backdoor to the (apparently > inadequate) governors here. Arguably, the governors should be able to > make the right decisions on the basis of the information they receive > through their own interfaces. the failings of governors to have the information needed is why pm_qos was created in the first place. It can be seen as a limitation on the governor from some perspectives. But, I like to think of if as updating existing governors to account for new use case requirements as hardware get bigger power management / performance dynamic ranges. > > > Second, it's not particularly clear what the meaning of the "min" frequency > > > is supposed to be in terms of throughput. > > > > It should mean "please cpufreq do not put the cpu into a state where its > > clock runs slower than min". I don't think we should talk about it as > > throughput because thats not what the cpufreq controls. > > Perhaps we need a new cpufreq governor that would take use PM QoS internally > to store requests from different sources, but that would work on a per-CPU > basis (not globally) and would provide a new interface for user space? > I don' think we need a new cpufreq governor, the parts of this patchset that I agree with evolve the governor to account for pm-qos requests but, globally for all cpu's. Hmm, your right this patch set is global in its request and not "per-cpu". I need to think on that. Making it per-cpu would likely infer we need to make the qos request per cpu as well. Do you think it needs to be per-cpu? (I'm starting to think "yes" it does) How do we scale the pm_qos ABI to support per/cpu? (maybe we don't export those types of qos classes to the user mode?) --mark ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-19 16:41 ` [linux-pm] " mark gross @ 2012-01-19 19:48 ` Antti P Miettinen 2012-01-19 22:15 ` [linux-pm] " Rafael J. Wysocki 0 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-19 19:48 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq mark gross <markgross@thegnar.org> writes: > Hmm, your right this patch set is global in its request and not > "per-cpu". I need to think on that. Making it per-cpu would likely > infer we need to make the qos request per cpu as well. I think we need both, global and per cpu. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-19 19:48 ` Antti P Miettinen @ 2012-01-19 22:15 ` Rafael J. Wysocki 2012-01-22 10:35 ` Antti P Miettinen 0 siblings, 1 reply; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-19 22:15 UTC (permalink / raw) To: linux-pm; +Cc: Antti P Miettinen, cpufreq On Thursday, January 19, 2012, Antti P Miettinen wrote: > mark gross <markgross@thegnar.org> writes: > > Hmm, your right this patch set is global in its request and not > > "per-cpu". I need to think on that. Making it per-cpu would likely > > infer we need to make the qos request per cpu as well. > > I think we need both, global and per cpu. Well, if we have that per CPU, it will be easy to create a global setting: set all of the per-CPU settings to the same values. :-) Thanks, Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-19 22:15 ` [linux-pm] " Rafael J. Wysocki @ 2012-01-22 10:35 ` Antti P Miettinen 2012-01-22 23:43 ` [linux-pm] " Rafael J. Wysocki 0 siblings, 1 reply; 31+ messages in thread From: Antti P Miettinen @ 2012-01-22 10:35 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: > On Thursday, January 19, 2012, Antti P Miettinen wrote: >> I think we need both, global and per cpu. > > Well, if we have that per CPU, it will be easy to create a global > setting: set all of the per-CPU settings to the same values. :-) That is true. Currently the device specific constraints do not have user space interface. The pm_qos_interface.txt refers to ongoing discussion. Is there a thread I should read? Seems that the device specific constraints are not yet in use in 3.3-rc1, or am I not looking hard enough? --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [linux-pm] [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-22 10:35 ` Antti P Miettinen @ 2012-01-22 23:43 ` Rafael J. Wysocki 2012-02-02 6:06 ` Antti P Miettinen 0 siblings, 1 reply; 31+ messages in thread From: Rafael J. Wysocki @ 2012-01-22 23:43 UTC (permalink / raw) To: Antti P Miettinen; +Cc: linux-pm, cpufreq On Sunday, January 22, 2012, Antti P Miettinen wrote: > "Rafael J. Wysocki" <rjw@sisk.pl> writes: > > On Thursday, January 19, 2012, Antti P Miettinen wrote: > >> I think we need both, global and per cpu. > > > > Well, if we have that per CPU, it will be easy to create a global > > setting: set all of the per-CPU settings to the same values. :-) > > That is true. Currently the device specific constraints do not have user > space interface. The pm_qos_interface.txt refers to ongoing > discussion. Is there a thread I should read? > > Seems that the device specific constraints are not yet in use in > 3.3-rc1, or am I not looking hard enough? They are in use through generic PM domains (drivers/base/power/domain*.c and friends) and ARM/shmobile uses those. Thanks, Rafael ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-22 23:43 ` [linux-pm] " Rafael J. Wysocki @ 2012-02-02 6:06 ` Antti P Miettinen 0 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-02-02 6:06 UTC (permalink / raw) To: linux-pm; +Cc: cpufreq "Rafael J. Wysocki" <rjw@sisk.pl> writes: > On Sunday, January 22, 2012, Antti P Miettinen wrote: [..] >> Seems that the device specific constraints are not yet in use in >> 3.3-rc1, or am I not looking hard enough? > > They are in use through generic PM domains (drivers/base/power/domain*.c > and friends) and ARM/shmobile uses those. > > Thanks, > Rafael Sorry for the delay - got pre-empted by other stuff. I took a look at the per device constraints. Do I understand it correctly that the idea is that there is only one constraint per device? If we want to make frequency and latency per CPU I guess we'd need separate constraints associated with the CPU device. Or do I misunderstand something? Or would global CPU frequency be more in line with global CPU latency after all? --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-16 6:59 Antti P Miettinen 2012-01-16 21:38 ` Rafael J. Wysocki @ 2012-01-18 3:44 ` mark gross 2012-01-18 20:22 ` Antti P Miettinen 1 sibling, 1 reply; 31+ messages in thread From: mark gross @ 2012-01-18 3:44 UTC (permalink / raw) To: Antti P Miettinen; +Cc: linux-pm Would it be possible for you to split this set up where you only have the cpu_min_freq enabling in pos.c and cpufreq and make the rest of the set a separate patch set? As you have it currently the parts I care about are intermixed with controversial things (max freq and the new cpufreq exports). Also could you make the entire set git am friendly? Only the first patch am's the reset don't. --mark On Mon, Jan 16, 2012 at 08:59:53AM +0200, Antti P Miettinen wrote: > [did not reach linux-pm as I sent to wrong address, sorry for > duplicates] > > The inspiration for this patch series is the N9 CPU frequency boost > upon input events: > > http://www.spinics.net/lists/cpufreq/msg00667.html > > and the related changes in git://codeaurora.org/kernel/msm.git tree. > Those patches modify the ondemand cpufreq governor. This patch series > adds minimum and maximum CPU frequency as PM QoS parameters and > modifies the cpufreq core to enforce the PM QoS limits. There is also > an example module for boosting the frequency upon input events. > > I've been testing these changes against Ubuntu 3.2 kernel on a Dell > E6420 with the ACPI cpufreq driver. The patches are against > linux-next/master, compile tested against it. > > V2: > * split min and max to separate commits > * handle PM QoS min above max as max > * handle PM QoS max below min as min > > --Antti > > Alex Frid (1): > PM QoS: Simplify PM QoS expansion/merge > > Antti P Miettinen (7): > PM QoS: Add CPU frequency minimum as PM QoS param > cpufreq: Export user_policy min/max > cpufreq: Preserve sysfs min/max request > cpufreq: Enforce PM QoS minimum limit > input: CPU frequency booster > PM QoS: Add CPU frequency maximum as PM QoS param > cpufreq: Enforce PM QoS maximum frequency > > drivers/cpufreq/cpufreq.c | 59 +++++++++++++- > drivers/input/Kconfig | 9 ++ > drivers/input/Makefile | 1 + > drivers/input/input-cfboost.c | 174 +++++++++++++++++++++++++++++++++++++++++ > include/linux/pm_qos.h | 19 ++++- > kernel/power/qos.c | 55 ++++++++++---- > 6 files changed, 295 insertions(+), 22 deletions(-) > create mode 100644 drivers/input/input-cfboost.c > > -- > 1.7.4.1 > > _______________________________________________ > linux-pm mailing list > linux-pm@lists.linux-foundation.org > https://lists.linuxfoundation.org/mailman/listinfo/linux-pm ^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params 2012-01-18 3:44 ` mark gross @ 2012-01-18 20:22 ` Antti P Miettinen 0 siblings, 0 replies; 31+ messages in thread From: Antti P Miettinen @ 2012-01-18 20:22 UTC (permalink / raw) To: linux-pm mark gross <markgross@thegnar.org> writes: > Would it be possible for you to split this set up where you only have > the cpu_min_freq enabling in pos.c and cpufreq and make the rest of the > set a separate patch set? Would that be patches 1-5 vs the rest? > As you have it currently the parts I care about are intermixed with > controversial things (max freq and the new cpufreq exports). I think the cpufreq changes, patches 3-5, are necessary. Well, patch 3 is not necessary for functionality but would be helpful for debugging/diagnosis and IMHO makes sense as a companion to patch 4. The max freq is in patches 7 and 8. > Also could you make the entire set git am friendly? Only the first > patch am's the reset don't. Could you help me reproduce the problem? For me the mails apply fine. Also a colleague tested them and encountered no problems. When I know how to fix the set I'll post a split version. --Antti ^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2012-02-02 6:06 UTC | newest] Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-01-13 12:59 [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 1/8] PM QoS: Simplify PM QoS expansion/merge Antti P Miettinen 2012-01-15 4:37 ` mark gross 2012-01-13 12:59 ` [PATCH v2 2/8] PM QoS: Add CPU frequency minimum as PM QoS param Antti P Miettinen 2012-01-15 4:46 ` mark gross 2012-01-13 12:59 ` [PATCH v2 3/8] cpufreq: Export user_policy min/max Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 4/8] cpufreq: Preserve sysfs min/max request Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 5/8] cpufreq: Enforce PM QoS minimum limit Antti P Miettinen 2012-01-15 4:51 ` mark gross 2012-01-13 12:59 ` [PATCH v2 6/8] input: CPU frequency booster Antti P Miettinen 2012-01-13 12:59 ` [PATCH v2 7/8] PM QoS: Add CPU frequency maximum as PM QoS param Antti P Miettinen 2012-01-15 4:51 ` mark gross 2012-01-13 12:59 ` [PATCH v2 8/8] cpufreq: Enforce PM QoS maximum frequency Antti P Miettinen 2012-01-13 15:24 ` [PATCH v2 0/8] RFC: CPU frequency min/max as PM QoS params mark gross 2012-01-13 16:17 ` Antti P Miettinen 2012-01-16 6:59 Antti P Miettinen 2012-01-16 21:38 ` Rafael J. Wysocki 2012-01-17 6:14 ` Antti P Miettinen 2012-01-17 6:25 ` [linux-pm] " Mansoor, Illyas 2012-01-17 9:54 ` Antti P Miettinen 2012-01-17 21:27 ` [linux-pm] " Rafael J. Wysocki 2012-01-18 7:52 ` Antti P Miettinen 2012-01-18 23:10 ` [linux-pm] " Rafael J. Wysocki 2012-01-19 6:41 ` Antti P Miettinen 2012-01-18 3:13 ` mark gross 2012-01-18 8:15 ` Antti P Miettinen 2012-01-18 23:24 ` Rafael J. Wysocki 2012-01-19 6:49 ` Antti P Miettinen 2012-01-19 22:40 ` [linux-pm] " Rafael J. Wysocki 2012-01-22 9:55 ` Antti P Miettinen 2012-01-19 16:41 ` [linux-pm] " mark gross 2012-01-19 19:48 ` Antti P Miettinen 2012-01-19 22:15 ` [linux-pm] " Rafael J. Wysocki 2012-01-22 10:35 ` Antti P Miettinen 2012-01-22 23:43 ` [linux-pm] " Rafael J. Wysocki 2012-02-02 6:06 ` Antti P Miettinen 2012-01-18 3:44 ` mark gross 2012-01-18 20:22 ` Antti P Miettinen
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.