On Fri, Sep 21, 2018 at 09:00:50AM -0700, Jim Mattson wrote: > Even if the documentation is stale, backwards compatibility requires > that bit 16 of the exit qualification (corresponding to DR6.RTM, per > Figure 17-1 of the SDM, volume 3) must have the opposite polarity of > DR6.RTM (just as bit 16 of the pending debug exceptions does). If > DR6.RTM is set, then bit 16 of the exit qualification must be clear. > Certainly, on hardware without TSX, it works this way. Now, perhaps if > DR6.RTM is clear, then bit 16 of the exit qualification should be set. > I can write a kvm-unit-test to find out, or you can ask around. > > DR6.BT actually is an issue. As you point out, it will never be set in > the exit qualification for a #DB exception. However, it may be set in > DR6. Hence, when we try to infer the exit qualification from a > prematurely modified DR6, bit 15 should be masked off. Ah, right. And after digging a bit more I'm pretty sure DR6.BT truly is reserved-to-zero in exit qual from an architectural perspective, though I have a sneaky suspicion that ucode doesn't explicitly zero out the bit while transferring its internal state to exit qual. Anyways, I agree that explicitly clearing DR6.BT is correct.