|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] vmx: Restore debug registers when injecting #DB traps
>>> On 11.03.16 at 15:51, <ross.lagerwall@xxxxxxxxxx> wrote:
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -3091,24 +3091,23 @@ static int vmx_handle_eoi_write(void)
> * It is the callers responsibility to ensure that this function is only used
> * in the context of an appropriate vmexit.
> */
> -static void vmx_propagate_intr(void)
> +static void vmx_propagate_intr(unsigned long intr)
> {
> - unsigned long intr, tmp;
> -
> - __vmread(VM_EXIT_INTR_INFO, &intr);
> -
> - ASSERT(intr & INTR_INFO_VALID_MASK);
> -
> - __vmwrite(VM_ENTRY_INTR_INFO, intr);
> + struct hvm_trap trap = {
> + .vector = intr & INTR_INFO_VECTOR_MASK,
> + .type = MASK_EXTR(intr, INTR_INFO_INTR_TYPE_MASK) };
Please use MASK_EXTR() for both. Also the closing brace would better
go on the next line.
> + unsigned long tmp;
>
> if ( intr & INTR_INFO_DELIVER_CODE_MASK )
> {
> __vmread(VM_EXIT_INTR_ERROR_CODE, &tmp);
> - __vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, tmp);
> + trap.error_code = tmp;
> }
> -
> + else
> + trap.error_code = HVM_DELIVER_NO_ERROR_CODE;
> __vmread(VM_EXIT_INSTRUCTION_LEN, &tmp);
> - __vmwrite(VM_ENTRY_INSTRUCTION_LEN, tmp);
> + trap.insn_len = tmp;
For this one I was unsure already for the original change (but it had
gone in already by the time I got to see it): The VM-exit instruction
length field is undefined (i.e. not necessarily zero) for the #AC
intercept case, and also for some (most) of the #DB ones. I therefore
think this needs some qualification, with zero getting used otherwise.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |