On 06/06/18 17:46, Roger Pau Monné wrote:
> On Mon, Jun 04, 2018 at 02:59:11PM +0100, Andrew Cooper wrote:
>> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
>> index bfa3a0d..39c9ddc 100644
>> --- a/xen/arch/x86/hvm/vmx/vmx.c
>> +++ b/xen/arch/x86/hvm/vmx/vmx.c
>> @@ -2483,7 +2483,7 @@ void update_guest_eip(void)
>>      }
>>  
>>      if ( regs->eflags & X86_EFLAGS_TF )
>> -        hvm_inject_hw_exception(TRAP_debug, X86_EVENT_NO_EC);
>> +        hvm_inject_debug_exn(X86_DR6_BS);
>>  }
>>  
>>  static void vmx_fpu_dirty_intercept(void)
>> @@ -3382,7 +3382,7 @@ 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(unsigned long intr)
>> +static void vmx_propagate_intr(unsigned long intr, unsigned long 
>> pending_dbg)
>>  {
>>      struct x86_event event = {
>>          .vector = MASK_EXTR(intr, INTR_INFO_VECTOR_MASK),
>> @@ -3406,6 +3406,9 @@ static void vmx_propagate_intr(unsigned long intr)
>>      else
>>          event.insn_len = 0;
>>  
>> +    if ( event.vector == TRAP_debug )
>> +        event.pending_dbg = pending_dbg;
>> +
>>      hvm_inject_event(&event);
>>  }
>>  
>> @@ -3715,7 +3718,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
>>                  if ( rc < 0 )
>>                      goto exit_and_crash;
>>                  if ( !rc )
>> -                    vmx_propagate_intr(intr_info);
>> +                    vmx_propagate_intr(intr_info, exit_qualification);
>>              }
>>              else
>>                  domain_pause_for_debugger();
>> @@ -3736,7 +3739,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
>>                  if ( rc < 0 )
>>                      goto exit_and_crash;
>>                  if ( !rc )
>> -                    vmx_propagate_intr(intr_info);
>> +                    vmx_propagate_intr(intr_info, 0 /* N/A */);
>>              }
>>              else
>>              {
>> @@ -3776,7 +3779,7 @@ void vmx_vmexit_handler(struct cpu_user_regs *regs)
>>              break;
>>          case TRAP_alignment_check:
>>              HVMTRACE_1D(TRAP, vector);
>> -            vmx_propagate_intr(intr_info);
>> +            vmx_propagate_intr(intr_info, 0 /* N/A */);
>>              break;
>>          case TRAP_nmi:
>>              if ( MASK_EXTR(intr_info, INTR_INFO_INTR_TYPE_MASK) !=
> I'm kind of lost here. Don't you need to update vmx_inject_event so
> that it does something with the pending_dbg field in x86_event?
>
> (and the same to svm_inject_event)

The commit message specifically says "To begin resolving this issue, add
a ..."

This patch is plumbing.  Later patches are fixes, and it takes until
patch 9 to get working sensibly.

~Andrew

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to