On Tue, Nov 14, 2023 at 12:42:13PM +0800, Li, Xin3 wrote: >> >+ return cpu_feature_enabled(X86_FEATURE_FRED) && >> >+ kvm_is_cr4_bit_set(vcpu, X86_CR4_FRED); >> >> FRED is enabled when CR4.FRED = IA32_EFER.LMA = 1. Any reason to omit the >> check about long mode? > >It won' t allow CR4.FRED to be set if not in long mode, I don't expect it >at runtime. Or you have one? I was thinking about a very contrived case: 1. the CPU enters 64-bit long mode and sets CR4.FRED 2. the CPU switches out of 64-bit long mode and SDM vol3 chapter 2.5 CONTROL REGISTERS says: A 64-bit capable processor will retain the upper 32 bits of each control register when transitioning out of IA-32e mode. so, to me, it is possible that CR4.FRED is 1 while IA32_EFER.LMA is 0. and in this case, FRED should be considered disabled. Anyway, I think we should align with FRED SPEC. If we deliberately omit the check about long mode, please add a comment to explain why it is ok to do that. > >If you are talking about save/restore a corrupted vCPU state, a following >VM entry should fail anyway.