|
|
@@ -1045,6 +1045,13 @@ static inline bool is_machine_check(u32 intr_info)
|
|
|
(INTR_TYPE_HARD_EXCEPTION | MC_VECTOR | INTR_INFO_VALID_MASK);
|
|
|
}
|
|
|
|
|
|
+/* Undocumented: icebp/int1 */
|
|
|
+static inline bool is_icebp(u32 intr_info)
|
|
|
+{
|
|
|
+ return (intr_info & (INTR_INFO_INTR_TYPE_MASK | INTR_INFO_VALID_MASK))
|
|
|
+ == (INTR_TYPE_PRIV_SW_EXCEPTION | INTR_INFO_VALID_MASK);
|
|
|
+}
|
|
|
+
|
|
|
static inline bool cpu_has_vmx_msr_bitmap(void)
|
|
|
{
|
|
|
return vmcs_config.cpu_based_exec_ctrl & CPU_BASED_USE_MSR_BITMAPS;
|
|
|
@@ -6179,7 +6186,7 @@ static int handle_exception(struct kvm_vcpu *vcpu)
|
|
|
(KVM_GUESTDBG_SINGLESTEP | KVM_GUESTDBG_USE_HW_BP))) {
|
|
|
vcpu->arch.dr6 &= ~15;
|
|
|
vcpu->arch.dr6 |= dr6 | DR6_RTM;
|
|
|
- if (!(dr6 & ~DR6_RESERVED)) /* icebp */
|
|
|
+ if (is_icebp(intr_info))
|
|
|
skip_emulated_instruction(vcpu);
|
|
|
|
|
|
kvm_queue_exception(vcpu, DB_VECTOR);
|