Commit 3ef0df3
committed
KVM: VMX: Don't modify guest XFD_ERR if CR0.TS=1
Don't update the guest's XFD_ERR MSR if CR0.TS is set; per the SDM,
XFD_ERR is not modified if CR0.TS=1. Although it's not explicitly stated
in the SDM, conceptually it makes sense the CR0.TS check would be done
prior to the XFD_ERR check, e.g. CR0.TS=1 blocks all SIMD state, whereas
XFD blocks only XTILE state.
Device-not-available exceptions that are not due to XFD - those
resulting from setting CR0.TS to 1 - do not modify the IA32_XFD_ERR MSR.
Opportunistically update the comment to call out that XFD_ERR is updated
before the VM-Exit check occurs. Nothing in the SDM explicitly calls out
this behavior, but logically it must be the behavior, otherwise reading
XFD_ERR in handle_nm_fault_irqoff() would return stale data, i.e. the
to-be-delivered XFD_ERR value would need to be saved in EXIT_QUALIFICATION,
a la DR6 for #DB and CR2 for #PF, so that software could capture the guest
value.
Fixes: ec5be88 ("kvm: x86: Intercept #NM for saving IA32_XFD_ERR")
Signed-off-by: Xin Li (Intel) <xin@zytor.com>
Tested-by: Shan Kang <shan.kang@intel.com>
Link: https://lore.kernel.org/r/20241001050110.3643764-3-xin@zytor.com
Signed-off-by: Sean Christopherson <seanjc@google.com>1 parent a64dcfb commit 3ef0df3
1 file changed
Lines changed: 8 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6995 | 6995 | | |
6996 | 6996 | | |
6997 | 6997 | | |
6998 | | - | |
6999 | | - | |
7000 | | - | |
| 6998 | + | |
| 6999 | + | |
| 7000 | + | |
7001 | 7001 | | |
7002 | | - | |
7003 | | - | |
7004 | | - | |
7005 | | - | |
| 7002 | + | |
| 7003 | + | |
| 7004 | + | |
7006 | 7005 | | |
7007 | | - | |
| 7006 | + | |
| 7007 | + | |
7008 | 7008 | | |
7009 | 7009 | | |
7010 | 7010 | | |
| |||
0 commit comments