diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-12-29 14:08:46 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-12-29 14:08:46 +0000 |
commit | 119a6a6e07a5b5d41b87ce8a0886761db40325b8 (patch) | |
tree | 9dee7c34d8dfd2b1a708031b1b0879cb2e1c7561 /xen/drivers/cpufreq | |
parent | bbdcb2fd41b288bde446b80d9f9f6f16693a0f5b (diff) | |
download | xen-119a6a6e07a5b5d41b87ce8a0886761db40325b8.tar.gz xen-119a6a6e07a5b5d41b87ce8a0886761db40325b8.tar.bz2 xen-119a6a6e07a5b5d41b87ce8a0886761db40325b8.zip |
cpufreq: xen is default cpufreq, userspace is default governor (override on cmdline)
Set userspace governor as default, which stays same effect
as when cpufreq in xen is not enabled. As a result, enable cpufreq
in xen by default to avoid reboot to activate cpufreq. Now it's
always on but w/o performance impact if user doesn't attempt
to change governor.
Add governor option at cmdline, add some warning info for debug.
Signed-off-by: Liu, Jinsong <jinsong.liu@intel.com>
Diffstat (limited to 'xen/drivers/cpufreq')
-rw-r--r-- | xen/drivers/cpufreq/cpufreq.c | 16 | ||||
-rw-r--r-- | xen/drivers/cpufreq/utility.c | 5 |
2 files changed, 19 insertions, 2 deletions
diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c index 169426e373..dee38fa513 100644 --- a/xen/drivers/cpufreq/cpufreq.c +++ b/xen/drivers/cpufreq/cpufreq.c @@ -214,8 +214,20 @@ int cpufreq_add_cpu(unsigned int cpu) memcpy(&new_policy, policy, sizeof(struct cpufreq_policy)); policy->governor = NULL; ret = __cpufreq_set_policy(policy, &new_policy); - if (ret) - goto err2; + if (ret) { + if (new_policy.governor == CPUFREQ_DEFAULT_GOVERNOR) + /* if default governor fail, cpufreq really meet troubles */ + goto err2; + else { + /* grub option governor fail */ + /* give one more chance to default gov */ + memcpy(&new_policy, policy, sizeof(struct cpufreq_policy)); + new_policy.governor = CPUFREQ_DEFAULT_GOVERNOR; + ret = __cpufreq_set_policy(policy, &new_policy); + if (ret) + goto err2; + } + } } return 0; diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c index 1c8176fabe..4ac3833923 100644 --- a/xen/drivers/cpufreq/utility.c +++ b/xen/drivers/cpufreq/utility.c @@ -360,10 +360,15 @@ int __cpufreq_set_policy(struct cpufreq_policy *data, /* start new governor */ data->governor = policy->governor; if (__cpufreq_governor(data, CPUFREQ_GOV_START)) { + printk(KERN_WARNING "Fail change to %s governor\n", + data->governor->name); + /* new governor failed, so re-start old one */ if (old_gov) { data->governor = old_gov; __cpufreq_governor(data, CPUFREQ_GOV_START); + printk(KERN_WARNING "Still stay at %s governor\n", + data->governor->name); } return -EINVAL; } |