|
@@ -194,9 +194,18 @@ static void op_amd_setup_ctrs(struct op_x86_model_spec const *model,
|
|
|
|
|
|
/* clear all counters */
|
|
|
for (i = 0; i < NUM_CONTROLS; ++i) {
|
|
|
- if (unlikely(!msrs->controls[i].addr))
|
|
|
+ if (unlikely(!msrs->controls[i].addr)) {
|
|
|
+ if (counter_config[i].enabled && !smp_processor_id())
|
|
|
+ /*
|
|
|
+ * counter is reserved, this is on all
|
|
|
+ * cpus, so report only for cpu #0
|
|
|
+ */
|
|
|
+ op_x86_warn_reserved(i);
|
|
|
continue;
|
|
|
+ }
|
|
|
rdmsrl(msrs->controls[i].addr, val);
|
|
|
+ if (val & ARCH_PERFMON_EVENTSEL0_ENABLE)
|
|
|
+ op_x86_warn_in_use(i);
|
|
|
val &= model->reserved;
|
|
|
wrmsrl(msrs->controls[i].addr, val);
|
|
|
}
|