[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8 05/19] vmx: Merge MSR management routines
>>> On 01.07.14 at 16:37, <boris.ostrovsky@xxxxxxxxxx> wrote: > --- a/xen/arch/x86/hvm/vmx/vmcs.c > +++ b/xen/arch/x86/hvm/vmx/vmcs.c > @@ -1176,117 +1176,107 @@ int vmx_write_guest_msr(u32 msr, u64 val) > return -ESRCH; > } > > -int vmx_add_guest_msr(u32 msr) > +int vmx_add_msr(u32 msr, u8 type) > { > struct vcpu *curr = current; > - unsigned int i, msr_count = curr->arch.hvm_vmx.msr_count; > - struct vmx_msr_entry *msr_area = curr->arch.hvm_vmx.msr_area; > + unsigned int idx, *msr_count; > + struct vmx_msr_entry **msr_area; > + > + ASSERT((type == VMX_GUEST_MSR) || (type == VMX_HOST_MSR)); > + > + if ( type == VMX_GUEST_MSR ) Better (smaller code) to move the ASSERT() into the else branch in cases like this. > - msr_area[msr_count].index = msr; > - msr_area[msr_count].mbz = 0; > - msr_area[msr_count].data = 0; > - curr->arch.hvm_vmx.msr_count = ++msr_count; > - __vmwrite(VM_EXIT_MSR_STORE_COUNT, msr_count); > - __vmwrite(VM_ENTRY_MSR_LOAD_COUNT, msr_count); > + (*msr_area)[*msr_count].index = msr; > + (*msr_area)[*msr_count].mbz = 0; > + (*msr_count)++; > + if ( type == VMX_GUEST_MSR ) > + { > + (*msr_area)[*msr_count - 1].data = 0; > + __vmwrite(VM_EXIT_MSR_STORE_COUNT, *msr_count); > + __vmwrite(VM_ENTRY_MSR_LOAD_COUNT, *msr_count); > + } > + else > + { > + rdmsrl(msr, (*msr_area)[*msr_count - 1].data); > + __vmwrite(VM_EXIT_MSR_LOAD_COUNT, *msr_count); > + } For better readability perhaps worth having a local variable set to *msr_area + *msr_count, at once allowing to avoid the slightly ugly *msr_count - 1 in both the if and else branches. > + --(*msr_count); > + memmove(&(*msr_area)[idx], &(*msr_area)[idx + 1], > + sizeof(struct vmx_msr_entry) * (*msr_count - idx)); > + msr_area[(*msr_count)]->index = 0; Pointless pairs of parentheses in the first and last quoted lines above. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |