[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 1/5] x86/hvm: Handle viridian MSRs via the new guest_{rd, wr}msr() infrastructure
>>> On 07.03.18 at 19:58, <andrew.cooper3@xxxxxxxxxx> wrote: > @@ -554,13 +551,11 @@ static void update_reference_tsc(struct domain *d, > bool_t initialize) > put_page_and_type(page); > } > > -int wrmsr_viridian_regs(uint32_t idx, uint64_t val) > +int guest_wrmsr_viridian(struct vcpu *v, uint32_t idx, uint64_t val) > { > - struct vcpu *v = current; > struct domain *d = v->domain; > > - if ( !is_viridian_domain(d) ) > - return 0; > + ASSERT(is_viridian_domain(d)); > > switch ( idx ) > { > @@ -615,7 +610,7 @@ int wrmsr_viridian_regs(uint32_t idx, uint64_t val) > > case HV_X64_MSR_REFERENCE_TSC: > if ( !(viridian_feature_mask(d) & HVMPV_reference_tsc) ) > - return 0; > + goto gp_fault; > > perfc_incr(mshv_wrmsr_tsc_msr); > d->arch.hvm_domain.viridian.reference_tsc.raw = val; > @@ -655,14 +650,15 @@ int wrmsr_viridian_regs(uint32_t idx, uint64_t val) > } > > default: > - if ( idx >= VIRIDIAN_MSR_MIN && idx <= VIRIDIAN_MSR_MAX ) > - gprintk(XENLOG_WARNING, "write to unimplemented MSR %#x\n", > - idx); > - > - return 0; > + gdprintk(XENLOG_WARNING, > + "Write %016"PRIx64" to unimplemented MSR %#x\n", val, idx); > + goto gp_fault; > } > > - return 1; > + return X86EMUL_OKAY; > + > + gp_fault: > + return X86EMUL_EXCEPTION; > } Still these ugly goto-s to just a single return statement. But well, Paul is happy with them ... > --- a/xen/arch/x86/msr.c > +++ b/xen/arch/x86/msr.c > @@ -141,9 +141,11 @@ int init_vcpu_msr_policy(struct vcpu *v) > > int guest_rdmsr(const struct vcpu *v, uint32_t msr, uint64_t *val) > { > - const struct cpuid_policy *cp = v->domain->arch.cpuid; > - const struct msr_domain_policy *dp = v->domain->arch.msr; > + const struct domain *d = v->domain; > + const struct cpuid_policy *cp = d->arch.cpuid; > + const struct msr_domain_policy *dp = d->arch.msr; > const struct msr_vcpu_policy *vp = v->arch.msr; > + int ret = X86EMUL_OKAY; > > switch ( msr ) > { > @@ -175,11 +177,26 @@ int guest_rdmsr(const struct vcpu *v, uint32_t msr, > uint64_t *val) > _MSR_MISC_FEATURES_CPUID_FAULTING; > break; > > + case MSR_HYPERVISOR_START ... MSR_HYPERVISOR_START + NR_VIRIDIAN_MSRS - > 1: The "HYPERVISOR" in here starts to make sense in the next patch, but its combination with "VIRIDIAN" is still suspicious. I'll comment on this further for the next patch. > --- a/xen/include/asm-x86/msr-index.h > +++ b/xen/include/asm-x86/msr-index.h > @@ -540,4 +540,8 @@ > #define MSR_PKGC9_IRTL 0x00000634 > #define MSR_PKGC10_IRTL 0x00000635 > > +/* Hypervisor leaves in the 0x4xxxxxxx range. */ > +#define MSR_HYPERVISOR_START 0x40000000 > +#define NR_VIRIDIAN_MSRS 0x00000200 Is "leaves" really an appropriate term for MSRs? Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |