|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v5 1/2] x86/vmx: replace __vmread() with vmread()
On Fri, May 16, 2025 at 01:42:23PM +0100, Andrew Cooper wrote:
> On 13/05/2025 6:28 am, dmkhn@xxxxxxxxx wrote:
> > diff --git a/xen/arch/x86/hvm/vmx/intr.c b/xen/arch/x86/hvm/vmx/intr.c
> > index 91b407e6bc..b622ae1e60 100644
> > --- a/xen/arch/x86/hvm/vmx/intr.c
> > +++ b/xen/arch/x86/hvm/vmx/intr.c
> > @@ -65,7 +65,7 @@ static void vmx_enable_intr_window(struct vcpu *v, struct
> > hvm_intack intack)
> > {
> > unsigned long intr;
> >
> > - __vmread(VM_ENTRY_INTR_INFO, &intr);
> > + intr = vmread(VM_ENTRY_INTR_INFO);
> > TRACE(TRC_HVM_INTR_WINDOW, intack.vector, intack.source,
> > (intr & INTR_INFO_VALID_MASK) ? intr & 0xff : -1);
> > }
>
> As Jan said in v4, lots of these should now change away from being
> unsigned long.
Sorry, I interpreted v4 feedback as "first, do straight reuse of vmread()
everywhere, then send follow on smaller patches cleaning up the code around
vmread()s".
>
> For example, this delta alone:
>
> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
> index 203ca83c16e7..c540ea5bd850 100644
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -4154,9 +4154,8 @@ static void undo_nmis_unblocked_by_iret(void)
>
> void asmlinkage vmx_vmexit_handler(struct cpu_user_regs *regs)
> {
> - unsigned long exit_qualification, exit_reason, idtv_info, intr_info
> = 0;
> - unsigned long cs_ar_bytes = 0;
> - unsigned int vector = 0;
> + unsigned long exit_qualification;
> + unsigned int exit_reason, idtv_info, intr_info = 0, cs_ar_bytes =
> 0, vector = 0;
> struct vcpu *v = current;
> struct domain *currd = v->domain;
>
> @@ -4830,7 +4829,7 @@ void asmlinkage vmx_vmexit_handler(struct
> cpu_user_regs *regs)
> /* fall through */
> default:
> exit_and_crash:
> - gprintk(XENLOG_ERR, "Unexpected vmexit: reason %lu\n",
> exit_reason);
> + gprintk(XENLOG_ERR, "Unexpected vmexit: reason %u\n", exit_reason);
>
> if ( vmx_get_cpl() )
> hvm_inject_hw_exception(X86_EXC_UD,
>
> results in:
>
> add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-331 (-331)
> Function old new delta
> vmx_vmexit_handler.cold 929 839 -90
> vmx_vmexit_handler 5490 5249 -241
>
> worth of saving in the fastpath. (Yes, I chose this example carefully
> because it's surely the largest win to be had.)
>
> I've just sent out a minor docs patch annotating the sizes of the fields.
>
> This patch wants splitting into at least 3:
>
> * One for the 64bit and natural fields which are a straight transform
> and no type-change away from unsigned long.
> * One for the 16bit fields (there are few enough that this can easily
> be a single patch).
> * One or more for the 32bit fields, doing a type change to unsigned int
> too. (Might get quite large. Hard to judge whether it wants to be one
> or more without seeing it.)
Thanks for the feedback!
>
> ~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |