On 11/22/2024 4:14 AM, Adrian Hunter wrote: [...]
- tdx_vcpu_enter_exit() calls guest_state_enter_irqoff() and guest_state_exit_irqoff() which comments say should be called from non-instrumentable code but noinst was removed at Sean's suggestion: https://lore.kernel.org/all/Zg8tJspL9uBmMZFO@xxxxxxxxxx/ noinstr is also needed to retain NMI-blocking by avoiding instrumented code that leads to an IRET which unblocks NMIs. A later patch set will deal with NMI VM-exits.
In https://lore.kernel.org/all/Zg8tJspL9uBmMZFO@xxxxxxxxxx, Sean mentioned: "The reason the VM-Enter flows for VMX and SVM need to be noinstr is they do things like load the guest's CR2, and handle NMI VM-Exits with NMIs blocks. None of that applies to TDX. Either that, or there are some massive bugs lurking due to missing code." I don't understand why handle NMI VM-Exits with NMIs blocks doesn't apply to TDX. IIUIC, similar to VMX, TDX also needs to handle the NMI VM-exit in the noinstr section to avoid the unblock of NMIs due to instrumentation-induced fault.