aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluofei <luofei@unicloud.com>2022-01-20 03:46:34 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2022-03-23 12:22:25 +0100
commitcb48748af7dfd7654323eb839d1f853ffa873652 (patch)
treef5f4feccdb5e71c667ce2be64562b4e45388135a
parentdcebbb65b8a423a4e933ac803cd27ec8dc03ce7c (diff)
downloadqemu-cb48748af7dfd7654323eb839d1f853ffa873652.zip
qemu-cb48748af7dfd7654323eb839d1f853ffa873652.tar.gz
qemu-cb48748af7dfd7654323eb839d1f853ffa873652.tar.bz2
i386: Set MCG_STATUS_RIPV bit for mce SRAR error
In the physical machine environment, when a SRAR error occurs, the IA32_MCG_STATUS RIPV bit is set, but qemu does not set this bit. When qemu injects an SRAR error into virtual machine, the virtual machine kernel just call do_machine_check() to kill the current task, but not call memory_failure() to isolate the faulty page, which will cause the faulty page to be allocated and used repeatedly. If used by the virtual machine kernel, it will cause the virtual machine to crash Signed-off-by: luofei <luofei@unicloud.com> Message-Id: <20220120084634.131450-1-luofei@unicloud.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--target/i386/kvm/kvm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 7396b43..9cf8e03 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -569,7 +569,7 @@ static void kvm_mce_inject(X86CPU *cpu, hwaddr paddr, int code)
if (code == BUS_MCEERR_AR) {
status |= MCI_STATUS_AR | 0x134;
- mcg_status |= MCG_STATUS_EIPV;
+ mcg_status |= MCG_STATUS_RIPV | MCG_STATUS_EIPV;
} else {
status |= 0xc0;
mcg_status |= MCG_STATUS_RIPV;