[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v6 06/11] x86/vmce: emulate MSR_IA32_MCG_EXT_CTL
On 07/05/17 04:36 -0600, Jan Beulich wrote: > >>> On 05.07.17 at 05:12, <haozhong.zhang@xxxxxxxxx> wrote: > > @@ -878,6 +879,8 @@ long arch_do_domctl( [..] > > @@ -917,9 +920,21 @@ long arch_do_domctl( > > offsetof(struct xen_domctl_ext_vcpucontext, > > vmce.caps)); > > BUILD_BUG_ON(sizeof(evc->mcg_cap) != sizeof(evc->vmce.caps)); > > - if ( evc->size >= offsetof(typeof(*evc), vmce) + > > - sizeof(evc->vmce) ) > > + if ( evc->size >= vmce_off + sizeof(evc->vmce) ) > > ret = vmce_restore_vcpu(v, &evc->vmce); > > + else if ( evc->size >= vmce_off + > > + offsetof(typeof(evc->vmce), > > mcg_ext_ctl) ) > > + { > > + /* > > + * If migrating from old Xen that uses a smaller 'struct > > + * hvm_vmce_vcpu', only restore the components in the > > + * old version. > > + */ > > + struct hvm_vmce_vcpu vmce = { 0 }; > > Just { } would suffice. > > > + memcpy(&vmce, &evc->vmce, evc->size - vmce_off); > > + ret = vmce_restore_vcpu(v, &vmce); > > + } > > else if ( evc->size >= offsetof(typeof(*evc), mcg_cap) + > > sizeof(evc->mcg_cap) ) > > { > > So you really have two choices here: Either mirror/clone what's > already there, or (preferable imo) carefully generalize the existing > code. But please don't use yet another slightly different model. > How is about generalize above two else cases by else if ( evc->size >= offsetof(typeof(*evc), mcg_cap) + sizeof(evc->mcg_cap) ) { struct hvm_vmce_vcpu vmce = { }; memcpy(&vmce, &evc->vmce, evc->size - offsetof(typeof(*evc), mcg_cap)); ret = vmce_restore_vcpu(v, &vmce); } However, I'm not sure whether it's safe to blindly copy what is passed in 'evc->vmce'. Before this patch, the else-if branch only copies mcg_cap if the size of evc->vmce is larger than the size of mcg_cap, so it implies no? Haozhong _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |