> >> The TDVMCALLs are related to the I/O path (networking/block io) into the L2 > guest, and > >> so they intentionally go straight to L0 and are never injected to L1. L1 is not > >> involved in that path at all. > >> > >> Using something different than TDVMCALLs here would lead to additional > traps to L1 and > >> just add latency/complexity. > > > > Looks by default you assume we should use TDX partitioning as "paravisor L1" + > > "L0 device I/O emulation". > > > > I don't actually want to impose this model on anyone, but this is the one that > could use some refactoring. I intend to rework these patches to not use a single > "td_partitioning_active" for decisions. > > > I think we are lacking background of this usage model and how it works. For > > instance, typically L2 is created by L1, and L1 is responsible for L2's device > > I/O emulation. I don't quite understand how could L0 emulate L2's device I/O? > > > > Can you provide more information? > > Let's differentiate between fast and slow I/O. The whole point of the paravisor in > L1 is to provide device emulation for slow I/O: TPM, RTC, NVRAM, IO-APIC, serial > ports. Out of my curiosity and not really related to this discussion, but could you please elaborate on RTC part here? Do you actually host secure time in L1 to be provided to the L2? Best Regards, Elena.