[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/4] x86/domctl: Remove PV MSR parts of XEN_DOMCTL_[gs]et_ext_vcpucontext
On Wed, 2014-06-04 at 18:26 +0100, Andrew Cooper wrote: > The PV MSR functionality is now implemented as a separate set of domctls. > > This is a revert of parts of c/s65e3554908 > "x86/PV: support data breakpoint extension registers" > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > CC: Keir Fraser <keir@xxxxxxx> > CC: Jan Beulich <JBeulich@xxxxxxxx> > --- > xen/arch/x86/domctl.c | 78 > +------------------------------------------ > xen/include/public/domctl.h | 19 ----------- > 2 files changed, 1 insertion(+), 96 deletions(-) > > diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c > index c0c2d1b..8f5b287 100644 > --- a/xen/arch/x86/domctl.c > +++ b/xen/arch/x86/domctl.c > @@ -818,7 +818,6 @@ long arch_do_domctl( > { > struct xen_domctl_ext_vcpucontext *evc; > struct vcpu *v; > - struct xen_domctl_ext_vcpu_msr msr; > > evc = &domctl->u.ext_vcpucontext; > > @@ -864,42 +863,7 @@ long arch_do_domctl( > evc->vmce.mci_ctl2_bank0 = v->arch.vmce.bank[0].mci_ctl2; > evc->vmce.mci_ctl2_bank1 = v->arch.vmce.bank[1].mci_ctl2; > > - i = ret = 0; > - if ( boot_cpu_has(X86_FEATURE_DBEXT) ) > - { > - unsigned int j; > - > - if ( v->arch.pv_vcpu.dr_mask[0] ) > - { > - if ( i < evc->msr_count && !ret ) > - { > - msr.index = MSR_AMD64_DR0_ADDRESS_MASK; > - msr.reserved = 0; > - msr.value = v->arch.pv_vcpu.dr_mask[0]; > - if ( copy_to_guest_offset(evc->msrs, i, &msr, 1) ) > - ret = -EFAULT; > - } > - ++i; > - } > - for ( j = 0; j < 3; ++j ) > - { > - if ( !v->arch.pv_vcpu.dr_mask[1 + j] ) > - continue; > - if ( i < evc->msr_count && !ret ) > - { > - msr.index = MSR_AMD64_DR1_ADDRESS_MASK + j; > - msr.reserved = 0; > - msr.value = v->arch.pv_vcpu.dr_mask[1 + j]; > - if ( copy_to_guest_offset(evc->msrs, i, &msr, 1) ) > - ret = -EFAULT; > - } > - ++i; > - } > - } > - if ( i > evc->msr_count && !ret ) > - ret = -ENOBUFS; > - evc->msr_count = i; > - > + ret = 0; > vcpu_unpause(v); > copyback = 1; > } > @@ -954,49 +918,9 @@ long arch_do_domctl( > > ret = vmce_restore_vcpu(v, &vmce); > } > - else if ( evc->size > offsetof(typeof(*evc), vmce) ) > - ret = -EINVAL; > else > ret = 0; > > - if ( ret || evc->size <= offsetof(typeof(*evc), msrs) ) > - /* nothing */; > - else if ( evc->size < offsetof(typeof(*evc), msrs) + > - sizeof(evc->msrs) ) > - ret = -EINVAL; > - else > - { > - for ( i = 0; i < evc->msr_count; ++i ) > - { > - ret = -EFAULT; > - if ( copy_from_guest_offset(&msr, evc->msrs, i, 1) ) > - break; > - ret = -EINVAL; > - if ( msr.reserved ) > - break; > - switch ( msr.index ) > - { > - case MSR_AMD64_DR0_ADDRESS_MASK: > - if ( !boot_cpu_has(X86_FEATURE_DBEXT) || > - (msr.value >> 32) ) > - break; > - v->arch.pv_vcpu.dr_mask[0] = msr.value; > - continue; > - case MSR_AMD64_DR1_ADDRESS_MASK ... > - MSR_AMD64_DR3_ADDRESS_MASK: > - if ( !boot_cpu_has(X86_FEATURE_DBEXT) || > - (msr.value >> 32) ) > - break; > - msr.index -= MSR_AMD64_DR1_ADDRESS_MASK - 1; > - v->arch.pv_vcpu.dr_mask[msr.index] = msr.value; > - continue; > - } > - break; > - } > - if ( i == evc->msr_count ) > - ret = 0; > - } > - > domain_unpause(d); > } > } > diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h > index 7a13e25..4321a64 100644 > --- a/xen/include/public/domctl.h > +++ b/xen/include/public/domctl.h > @@ -543,16 +543,6 @@ typedef struct xen_domctl_pin_mem_cacheattr > xen_domctl_pin_mem_cacheattr_t; > DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t); > > > -#if defined(__i386__) || defined(__x86_64__) > -struct xen_domctl_ext_vcpu_msr { > - uint32_t index; > - uint32_t reserved; > - uint64_aligned_t value; > -}; > -typedef struct xen_domctl_ext_vcpu_msr xen_domctl_ext_vcpu_msr_t; > -DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpu_msr_t); > -#endif > - > /* XEN_DOMCTL_set_ext_vcpucontext */ > /* XEN_DOMCTL_get_ext_vcpucontext */ > struct xen_domctl_ext_vcpucontext { > @@ -572,14 +562,6 @@ struct xen_domctl_ext_vcpucontext { > uint16_t sysenter_callback_cs; > uint8_t syscall32_disables_events; > uint8_t sysenter_disables_events; > - /* > - * When, for the "get" version, msr_count is too small to cover all MSRs > - * the hypervisor needs to be saved, the call will return -ENOBUFS and > - * set msr_count to the required (minimum) value. Furthermore, for both > - * "get" and "set", that field as well as the msrs one only get looked at > - * if the size field above covers the structure up to the entire msrs > one. > - */ > - uint16_t msr_count; > #if defined(__GNUC__) > union { > uint64_aligned_t mcg_cap; > @@ -588,7 +570,6 @@ struct xen_domctl_ext_vcpucontext { > #else > struct hvm_vmce_vcpu vmce; > #endif > - XEN_GUEST_HANDLE_64(xen_domctl_ext_vcpu_msr_t) msrs; > #endif > }; > typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t; This is an ABI change, you should bump XEN_DOMCTL_INTERFACE_VERSION too (if not already done, if done there should be a comment in the header stating when is bumped). Frediano _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |