Re: Thoughts of AMX KVM support based on latest kernel

From: Paolo Bonzini
Date: Tue Nov 16 2021 - 14:49:21 EST


On 11/16/21 19:55, Thomas Gleixner wrote:
We can do that, but I'm unhappy about this conditional in schedule(). So
I was asking for doing a simple KVM only solution first:

vcpu_run()
kvm_load_guest_fpu()
wrmsrl(XFD, guest_fpstate->xfd);
XRSTORS
do {

local_irq_disable();

if (test_thread_flag(TIF_NEED_FPU_LOAD))
switch_fpu_return()
wrmsrl(XFD, guest_fpstate->xfd);

do {
vmenter(); // Guest modifies XFD
} while (reenter);

update_xfd_state(); // Restore consistency

local_irq_enable();

and check how bad that is for KVM in terms of overhead on AMX systems.

I agree, this is how we handle SPEC_CTRL for example and it can be extended to XFD. We should first do that, then switch to the MSR lists. Hacking into schedule() should really be the last resort.

local_irq_enable(); <- Problem starts here

preempt_enable(); <- Becomes wider here

It doesn't become that much wider because there's always preempt notifiers. So if it's okay to save XFD in the XSAVES wrapper and in kvm_arch_vcpu_put(), that might be already remove the need to do it schedule().

Paolo