Il 09/03/2014 19:26, Radim Krčmář ha scritto:
> + > + cpu_based_vm_exec_control = vmcs_read32(CPU_BASED_VM_EXEC_CONTROL); > + cpu_based_vm_exec_control &= ~CPU_BASED_MOV_DR_EXITING; > + vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, cpu_based_vm_exec_control); vmcs_clear_bits() covers exactly this use-case. (Barring the explicit bit-width.)
Good idea.
> + > + /* > + * No more DR vmexits; force a reload of the debug registers > + * and reenter on this instruction. The next vmexit will > + * retrieve the full state of the debug registers. > + */ > + vcpu->arch.switch_db_regs |= KVM_DEBUGREG_WONT_EXIT; > + return 1; > + } > + We could make the code slighly uglier and move the functional part of this block before the previous one, so it would do both things in one exit.
I considered this, but decided that it's unlikely for emulation to be faster than hardware---especially on those AMD CPUs that lack decode assists (and it's good for VMX and SVM code to look as similar as possible).
(Exception handler will likely access DR too.)
Which exception handler? Paolo -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html