Jing, On Wed, Nov 10 2021 at 13:01, Liu, Jing2 wrote: more thoughts. > Once we start passthrough the XFD MSR, we need to save/restore > them at VM exit/entry time. If we immediately resume the guest > without enabling interrupts/preemptions (exit fast-path), we have no > issues. We don't need to save the MSR. Correct. > The question is how the host XFD MSR is restored while control is in > KVM. > > The XSAVE(S) instruction saves the (guest) state component[x] as 0 or > doesn't save when XFD[x] != 0. Accordingly, XRSTOR(S) cannot restore > that (guest state). And it is possible that XFD != 0 and the guest is using > extended feature at VM exit; You mean on creative guests which just keep AMX state alive and set XFD[AMX] = 1 to later restore it to XFD[AMX] = 0? > we can check the XINUSE state-component bitmap by XGETBV(1). By adding > more meaning to the existing field: fpstate->in_use, it can be useful > for KVM to set the XINUSE value. As I pointed out to Sean, the problem is inconsistent state. Checking XGETBV(1) cannot make that go away. And I have no idea how you want to abuse fpstate->in_use for anything related to the XINUSE bitmap. It's a single bit for a particular purpose and has absolutely nothing to do with XINUSE. Trying to overload that is just wrong. If XFD is not trapped then you have exactly three options: 1) Make it an autosave MSR and grab the guest XFD value from that memory to update fpstate and the shadow memory before reenabling interrupts 2) Do the MSR read how I suggested before reenabling interrupts 3) Conditionally post XSAVES when fpstate->is_guest == true Anything else wont work. Thanks, tglx