KVM: x86: Remove user space triggerable MCE error message
PATCH 1/1 KVM: x86: Remove user space triggerable MCE error message
From: Jan Kiszka <[email protected]>
This case is a pure user space error we do not need to record. Moreover, it can be misused to flood the kernel log. Remove it.
--- arch/x86/kvm/x86.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)
arch/x86/kvm/x86.c +0 -3
@@ -2575,9 +2575,6 @@ static int kvm_vcpu_ioctl_x86_set_mce(struct kvm_vcpu *vcpu,if (mce->status &MCI_STATUS_UC ) {if ((vcpu->arch.mcg_status &MCG_STATUS_MCIP ) || !kvm_read_cr4_bits (vcpu,X86_CR4_MCE )) { -printk (KERN_DEBUG "kvm: set_mce: " -"injects mce exception while " -"previous one is in progress!\n" );kvm_make_request (KVM_REQ_TRIPLE_FAULT , vcpu);return 0 ; }
Signature · 1 line
1.7.1
Quoted 4 lines · Jan Kiszka
From: Jan Kiszka <[email protected]>
This case is a pure user space error we do not need to record. Moreover, it can be misused to flood the kernel log. Remove it.
I don't think this is a pure user space error. This happens on real hardware too, if the Machine Check exception is raised during early boot stage or the second MC exception is raised before the first MC exception is processed/cleared.
So I use printk here to help debugging these issues.
To avoid flooding the kernel log, we can use ratelimit.
Best Regards,
Huang Ying
Quoted 19 lines
Signed-off-by Jan Kiszka <[email protected]>--- arch/x86/kvm/x86.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)arch/x86/kvm/x86.c +0
-3@@ -2575,9 +2575,6 @@ static int kvm_vcpu_ioctl_x86_set_mce(struct kvm_vcpu *vcpu,if (mce->status &MCI_STATUS_UC ) {if ((vcpu->arch.mcg_status &MCG_STATUS_MCIP ) || !kvm_read_cr4_bits (vcpu,X86_CR4_MCE )) { -printk (KERN_DEBUG "kvm: set_mce: " -"injects mce exception while " -"previous one is in progress!\n" );kvm_make_request (KVM_REQ_TRIPLE_FAULT , vcpu);return 0 ; }
Quoted 6 lines · Huang Ying
Quoted 4 lines · Jan Kiszka
From: Jan Kiszka <[email protected]>
This case is a pure user space error we do not need to record. Moreover, it can be misused to flood the kernel log. Remove it.
Quoted 8 lines
I don't think this is a pure user space error. This happens on real hardware too, if the Machine Check exception is raised during early boot stage or the second MC exception is raised before the first MC exception is processed/cleared.
So I use printk here to help debugging these issues.
To avoid flooding the kernel log, we can use ratelimit.
With user space I meant qemu, and maybe "error" was the wrong term. This code path is only triggered if qemu decides to. And there you may also print this event (and you already do).
Another reason to not rely on catching this case here: KVM_X86_SET_MCE is obsolete on current kernels. Qemu will use a combination of KVM_SET_MSRS and KVM_SET_VCPU_EVENTS in the future, only falling back to this interface on pre-vcpu-events kernels. Then you need to debug this in user space anyway as the triple fault will no longer make it to the kernel.
Jan
Quoted 25 lines
Best Regards,
Huang YingQuoted 19 lines
Signed-off-by Jan Kiszka <[email protected]>--- arch/x86/kvm/x86.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)arch/x86/kvm/x86.c +0
-3@@ -2575,9 +2575,6 @@ static int kvm_vcpu_ioctl_x86_set_mce(struct kvm_vcpu *vcpu,if (mce->status &MCI_STATUS_UC ) {if ((vcpu->arch.mcg_status &MCG_STATUS_MCIP ) || !kvm_read_cr4_bits (vcpu,X86_CR4_MCE )) { -printk (KERN_DEBUG "kvm: set_mce: " -"injects mce exception while " -"previous one is in progress!\n" );kvm_make_request (KVM_REQ_TRIPLE_FAULT , vcpu);return 0 ; }
Quoted 12 lines · Jan Kiszka
Quoted 11 lines · Huang Ying
Quoted 4 lines · Jan Kiszka
From: Jan Kiszka <[email protected]>
This case is a pure user space error we do not need to record. Moreover, it can be misused to flood the kernel log. Remove it.
I don't think this is a pure user space error. This happens on real hardware too, if the Machine Check exception is raised during early boot stage or the second MC exception is raised before the first MC exception is processed/cleared.
Quoted 6 lines
Quoted 3 lines
So I use printk here to help debugging these issues.
To avoid flooding the kernel log, we can use ratelimit.
With user space I meant qemu, and maybe "error" was the wrong term. This code path is only triggered if qemu decides to.
Not only decided by qemu, but also decided by guest OS. If guest OS does not clear the MSR or guest OS does not set the X86_CR4_MCE bit in the cr4, the triple fault will be triggered.
Quoted 2 lines
And there you may also
print this event (and you already do).
Sorry, which print do you mean? I can not find similar print in user space.
Quoted 6 lines
Another reason to not rely on catching this case here:
KVM_X86_SET_MCEis obsolete on current kernels. Qemu will use a combination ofKVM_SET_MSRSandKVM_SET_VCPU_EVENTSin the future, only falling back to this interface on pre-vcpu-events kernels. Then you need to debug this in user space anyway as the triple fault will no longer make it to the kernel.
OK. Then, I think it will be helpful for debugging if we can print something like this in user space implementation.
Best Regards,
Huang Ying
Quoted 15 lines · Huang Ying
Quoted 14 lines · Jan Kiszka
Quoted 13 lines · Huang Ying
Quoted 4 lines · Jan Kiszka
From: Jan Kiszka <[email protected]>
This case is a pure user space error we do not need to record. Moreover, it can be misused to flood the kernel log. Remove it.
I don't think this is a pure user space error. This happens on real hardware too, if the Machine Check exception is raised during early boot stage or the second MC exception is raised before the first MC exception is processed/cleared.
So I use printk here to help debugging these issues.
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
To avoid flooding the kernel log, we can use ratelimit.
With user space I meant qemu, and maybe "error" was the wrong term. This code path is only triggered if qemu decides to.
Not only decided by qemu, but also decided by guest OS. If guest OS does not clear the MSR or guest OS does not set the
X86_CR4_MCEbit in the cr4, the triple fault will be triggered.
Right, but qemu has full access to the state and can detect this.
Quoted 6 lines
Quoted 3 lines
And there you may also
print this event (and you already do).Sorry, which print do you mean? I can not find similar print in user space.
Err, it's not yet there for the kvm case, I was starring at the tcg code path.
Quoted 10 lines
Quoted 7 lines
Another reason to not rely on catching this case here:
KVM_X86_SET_MCEis obsolete on current kernels. Qemu will use a combination ofKVM_SET_MSRSandKVM_SET_VCPU_EVENTSin the future, only falling back to this interface on pre-vcpu-events kernels. Then you need to debug this in user space anyway as the triple fault will no longer make it to the kernel.OK. Then, I think it will be helpful for debugging if we can print something like this in user space implementation.
qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
(and there will be a message on the monitor if raised manually)
Jan
Marcelo Tosatti
AppliedQuoted 6 lines · Jan Kiszka
From: Jan Kiszka <[email protected]>
This case is a pure user space error we do not need to record. Moreover, it can be misused to flood the kernel log. Remove it.
Signed-off-by Jan Kiszka <[email protected]>
Applied, thanks.