• Jim Mattson's avatar
    kvm: vmx: Defer setting of DR6 until #DB delivery · f10c729f
    Jim Mattson authored
    When exception payloads are enabled by userspace (which is not yet
    possible) and a #DB is raised in L2, defer the setting of DR6 until
    later. Under VMX, this allows the L1 hypervisor to intercept the fault
    before DR6 is modified. Under SVM, DR6 is modified before L1 can
    intercept the fault (as has always been the case with DR7).
    
    Note that the payload associated with a #DB exception includes only
    the "new DR6 bits." When the payload is delievered, DR6.B0-B3 will be
    cleared and DR6.RTM will be set prior to merging in the new DR6 bits.
    
    Also note that bit 16 in the "new DR6 bits" is set to indicate that a
    debug exception (#DB) or a breakpoint exception (#BP) occurred inside
    an RTM region while advanced debugging of RTM transactional regions
    was enabled. Though the reverse of DR6.RTM, this makes the #DB payload
    field compatible with both the pending debug exceptions field under
    VMX and the exit qualification for #DB exceptions under VMX.
    Reported-by: default avatarJim Mattson <jmattson@google.com>
    Suggested-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: default avatarJim Mattson <jmattson@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    f10c729f
vmx.c 434 KB