I'm working on a hypervisor that is using the EPT mechanism to demand page guest memory in and out of physical memory (over-commit, though thats not exactly my point here). I was hoping to be able to use VT-d to enable the guests to continue to directly 'own' devices. Though to provide some sort of general purpose DMA remapping I (think at least) I need some means to handle arbitrary guest physical addresses that may be involved in a DMA operation that are presently not mapped to physical pages (i.e. I would mark both the EPT and remapping table entries as invalid for a given GPA). However what seems to be prominently missing from VT-d is some mechanism for the CPU to handle a DMA re-mapping table 'page fault' (insert a PCI wait state and interrupt the CPU?) Is my understanding off base? Is there some other solution that I should be persuing for systems like this?
For more complete information about compiler optimizations, see our Optimization Notice.