mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
KVM: x86: Open code vendor_intel() in string_registers_quirk()
Open code the is_guest_vendor_intel() check in string_registers_quirk() to discourage makiking exact vendor==Intel checks in the emulator, and to remove the rather awful #ifdeffery. The string quirk is literally the only Intel specific, *non-architectural* behavior that KVM emulates. All Intel specific behavior that is architecturally defined applies to all vendors that are compatible with Intel's architecture, i.e. should use guest_cpuid_is_intel_compatible(). Link: https://lore.kernel.org/r/20240405235603.1173076-10-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
4067c2395e
commit
bdaff4f92b
|
|
@ -2354,17 +2354,6 @@ setup_syscalls_segments(struct desc_struct *cs, struct desc_struct *ss)
|
|||
ss->avl = 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
static bool vendor_intel(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
u32 eax, ebx, ecx, edx;
|
||||
|
||||
eax = ecx = 0;
|
||||
ctxt->ops->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx, true);
|
||||
return is_guest_vendor_intel(ebx, ecx, edx);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int em_syscall(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
const struct x86_emulate_ops *ops = ctxt->ops;
|
||||
|
|
@ -2622,7 +2611,14 @@ static void string_registers_quirk(struct x86_emulate_ctxt *ctxt)
|
|||
* manner when ECX is zero due to REP-string optimizations.
|
||||
*/
|
||||
#ifdef CONFIG_X86_64
|
||||
if (ctxt->ad_bytes != 4 || !vendor_intel(ctxt))
|
||||
u32 eax, ebx, ecx, edx;
|
||||
|
||||
if (ctxt->ad_bytes != 4)
|
||||
return;
|
||||
|
||||
eax = ecx = 0;
|
||||
ctxt->ops->get_cpuid(ctxt, &eax, &ebx, &ecx, &edx, true);
|
||||
if (!is_guest_vendor_intel(ebx, ecx, edx))
|
||||
return;
|
||||
|
||||
*reg_write(ctxt, VCPU_REGS_RCX) = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user