return 1;
}
-static inline void context_restore(struct vcpu *v)
+static inline void context_load(struct vcpu *v)
{
unsigned int i;
struct vpmu_struct *vpmu = vcpu_vpmu(v);
}
}
-static void amd_vpmu_restore(struct vcpu *v)
+static void amd_vpmu_load(struct vcpu *v)
{
struct vpmu_struct *vpmu = vcpu_vpmu(v);
struct amd_vpmu_context *ctxt = vpmu->context;
return;
}
- context_restore(v);
+ context_load(v);
}
static inline void context_save(struct vcpu *v)
}
for ( i = 0; i < num_counters; i++ )
- if ( msr == counters[i] )
+ {
+ if ( msr == ctrls[i] )
+ {
+ ctxt->ctrls[i] = msr_content;
+ return;
+ }
+ else if (msr == counters[i] )
+ {
ctxt->counters[i] = msr_content;
-
- for ( i = 0; i < num_counters; i++ )
- if ( msr == ctrls[i] )
- ctxt->ctrls[i] = msr_content;
+ return;
+ }
+ }
}
static int amd_vpmu_do_wrmsr(unsigned int msr, uint64_t msr_content)
if ( !vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED)
|| vpmu_is_set(vpmu, VPMU_FROZEN) )
{
- context_restore(v);
+ context_load(v);
vpmu_set(vpmu, VPMU_CONTEXT_LOADED);
vpmu_reset(vpmu, VPMU_FROZEN);
}
if ( !vpmu_is_set(vpmu, VPMU_CONTEXT_LOADED)
|| vpmu_is_set(vpmu, VPMU_FROZEN) )
{
- context_restore(v);
+ context_load(v);
vpmu_set(vpmu, VPMU_CONTEXT_LOADED);
vpmu_reset(vpmu, VPMU_FROZEN);
}
.do_interrupt = amd_vpmu_do_interrupt,
.arch_vpmu_destroy = amd_vpmu_destroy,
.arch_vpmu_save = amd_vpmu_save,
- .arch_vpmu_load = amd_vpmu_restore
+ .arch_vpmu_load = amd_vpmu_load
};
int svm_vpmu_initialise(struct vcpu *v, unsigned int vpmu_flags)