>> >> In principle, you could actually initialize a TDX guest with all of its >> memory shared and all of it mapped in the host IOMMU. When a guest >> turns some pages private, user code could punch a hole in the memslot, >> allocate private memory at that address, but leave the shared backing >> store in place and still mapped in the host IOMMU. The result would be >> that guest-initiated DMA to the previously shared address would actually >> work but would hit pages that are invisible to the guest. And a whole >> bunch of memory would be waste, but the whole system should stll work. > > Do you mean to let VFIO & IOMMU to treat all guest memory as shared first, > and then just allocate the private pages in another backing store? I guess > that could work, but with the cost of allocating roughly 2x physical pages > of the guest RAM size. After all, the shared pages shall be only a small > part of guest memory. Yes. My point is that I don't think there should be any particular danger in leaving the VFIO code alone as part of TDX enablement. The code ought to *work* even if it will be wildly inefficient. If someone cares to make it work better, they're welcome to do so. --Andy