From: Sean Christopherson <seanjc@google.com>
To: Lev Kujawski <lkujaw@member.fsf.org>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH] KVM: set_msr_mce: Permit guests to ignore single-bit ECC errors
Date: Mon, 23 May 2022 17:08:34 +0000 [thread overview]
Message-ID: <You/kms+AnKE1t0L@google.com> (raw)
In-Reply-To: <20220521081511.187388-1-lkujaw@member.fsf.org>
"KVM: x86:" for the shortlog scope.
On Sat, May 21, 2022, Lev Kujawski wrote:
> Certain guest operating systems (e.g., UNIXWARE) clear bit 0 of
> MC1_CTL to ignore single-bit ECC data errors.
Not that it really matters, but is this behavior documented anywhere? I've searched
a variety of SDMs, APMs, and PPRs, and can't find anything that documents this exact
behavior. I totally believe that some CPUs behave this way, but it'd be nice to
document exactly which generations of whose CPUs allow clearing bit zero.
> Single-bit ECC data errors are always correctable and thus are safe to ignore
> because they are informational in nature rather than signaling a loss of data
> integrity.
>
> Prior to this patch, these guests would crash upon writing MC1_CTL,
> with resultant error messages like the following:
>
> error: kvm run failed Operation not permitted
> EAX=fffffffe EBX=fffffffe ECX=00000404 EDX=ffffffff
> ESI=ffffffff EDI=00000001 EBP=fffdaba4 ESP=fffdab20
> EIP=c01333a5 EFL=00000246 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
> ES =0108 00000000 ffffffff 00c09300 DPL=0 DS [-WA]
> CS =0100 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
> SS =0108 00000000 ffffffff 00c09300 DPL=0 DS [-WA]
> DS =0108 00000000 ffffffff 00c09300 DPL=0 DS [-WA]
> FS =0000 00000000 ffffffff 00c00000
> GS =0000 00000000 ffffffff 00c00000
> LDT=0118 c1026390 00000047 00008200 DPL=0 LDT
> TR =0110 ffff5af0 00000067 00008b00 DPL=0 TSS32-busy
> GDT= ffff5020 000002cf
> IDT= ffff52f0 000007ff
> CR0=8001003b CR2=00000000 CR3=0100a000 CR4=00000230
> DR0=00000000 DR1=00000000 DR2=00000000 DR3=00000000
> DR6=ffff0ff0 DR7=00000400
> EFER=0000000000000000
> Code=08 89 01 89 51 04 c3 8b 4c 24 08 8b 01 8b 51 04 8b 4c 24 04 <0f>
> 30 c3 f7 05 a4 6d ff ff 10 00 00 00 74 03 0f 31 c3 33 c0 33 d2 c3 8d
> 74 26 00 0f 31 c3
>
> Signed-off-by: Lev Kujawski <lkujaw@member.fsf.org>
> ---
> arch/x86/kvm/x86.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 4790f0d7d40b..128dca4e7bb7 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -3215,10 +3215,13 @@ static int set_msr_mce(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
> /* only 0 or all 1s can be written to IA32_MCi_CTL
> * some Linux kernels though clear bit 10 in bank 4 to
> * workaround a BIOS/GART TBL issue on AMD K8s, ignore
> - * this to avoid an uncatched #GP in the guest
> + * this to avoid an uncatched #GP in the guest.
> + *
> + * UNIXWARE clears bit 0 of MC1_CTL to ignore
> + * correctable, single-bit ECC data errors.
> */
> if ((offset & 0x3) == 0 &&
> - data != 0 && (data | (1 << 10)) != ~(u64)0)
> + data != 0 && (data | (1 << 10) | 1) != ~(u64)0)
> return -1;
If KVM injects a #GP like it's supposed to[*], will UNIXWARE eat the #GP and continue
on, or will it explode? If it continues on, I'd prefer to avoid more special casing in
KVM.
If it explodes, I think my preference would be to just drop the MCi_CTL checks
entirely. AFAICT, P4-based and P5-based Intel CPus, and all? AMD CPUs allow
setting/clearing arbitrary bits. The checks really aren't buying us anything,
and it seems like Intel retroactively defined the "architectural" behavior of
only 0s/1s.
[*] https://lore.kernel.org/all/20220512222716.4112548-2-seanjc@google.com
next prev parent reply other threads:[~2022-05-23 17:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-21 8:15 [PATCH] KVM: set_msr_mce: Permit guests to ignore single-bit ECC errors Lev Kujawski
2022-05-23 17:08 ` Sean Christopherson [this message]
2022-05-23 19:20 ` Paolo Bonzini
2022-05-23 21:48 ` Lev Kujawski
2022-05-23 19:11 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=You/kms+AnKE1t0L@google.com \
--to=seanjc@google.com \
--cc=kvm@vger.kernel.org \
--cc=lkujaw@member.fsf.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.