On Wednesday, March 20, 2013 09:17:24 AM dirk.brandewie@xxxxxxxxx wrote: > From: Dirk Brandewie <dirk.brandewie@xxxxxxxxx> > > Some VMs seem to try to implement some MSRs but not all the registers > the driver needs. Check to make sure all the MSR that we need are > available. If any of the required MSRs are not available refuse to > load. > > Signed-off-by: Dirk Brandewie <dirk.j.brandewie@xxxxxxxxx> Is this needed for v3.9? Any pointers to bug reports etc.? Rafael > --- > drivers/cpufreq/intel_pstate.c | 26 ++++++++++++++++++++++++++ > 1 files changed, 26 insertions(+), 0 deletions(-) > > diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c > index f6dd1e7..cd9c5f4 100644 > --- a/drivers/cpufreq/intel_pstate.c > +++ b/drivers/cpufreq/intel_pstate.c > @@ -752,6 +752,29 @@ static struct cpufreq_driver intel_pstate_driver = { > > static int __initdata no_load; > > +static int intel_pstate_msrs_not_valid(void) > +{ > + /* Check that all the msr's we are using are valid. */ > + u64 aperf, mperf, tmp; > + > + rdmsrl(MSR_IA32_APERF, aperf); > + rdmsrl(MSR_IA32_MPERF, mperf); > + > + if (!intel_pstate_min_pstate() || > + !intel_pstate_max_pstate() || > + !intel_pstate_turbo_pstate()) > + return -ENODEV; > + > + rdmsrl(MSR_IA32_APERF, tmp); > + if (!(tmp - aperf)) > + return -ENODEV; > + > + rdmsrl(MSR_IA32_MPERF, tmp); > + if (!(tmp - mperf)) > + return -ENODEV; > + > + return 0; > +} > static int __init intel_pstate_init(void) > { > int cpu, rc = 0; > @@ -764,6 +787,9 @@ static int __init intel_pstate_init(void) > if (!id) > return -ENODEV; > > + if (intel_pstate_msrs_not_valid()) > + return -ENODEV; > + > pr_info("Intel P-state driver initializing.\n"); > > all_cpu_data = vmalloc(sizeof(void *) * num_possible_cpus()); > -- I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center. -- To unsubscribe from this list: send the line "unsubscribe cpufreq" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html