intel_iommu, amd_iommu: allow UNMAP notifiers
x86 vIOMMUs still lack of a complete IOMMU notifier mechanism. Before that is achieved, let's open a door for vhost DMAR support, which only requires cache invalidations (UNMAP operations). Meanwhile, convert hw_error() to error_report() and exit(1), to make the error messages cleaner and obvious (no CPU registers will be dumped). Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Peter Xu <peterx@redhat.com> Message-Id: <1474606948-14391-4-git-send-email-peterx@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									5bf3d31903
								
							
						
					
					
						commit
						a3276f786c
					
				@ -21,6 +21,7 @@
 | 
			
		||||
 */
 | 
			
		||||
#include "qemu/osdep.h"
 | 
			
		||||
#include "hw/i386/amd_iommu.h"
 | 
			
		||||
#include "qemu/error-report.h"
 | 
			
		||||
#include "trace.h"
 | 
			
		||||
 | 
			
		||||
/* used AMD-Vi MMIO registers */
 | 
			
		||||
@ -1072,9 +1073,12 @@ static void amdvi_iommu_notify_flag_changed(MemoryRegion *iommu,
 | 
			
		||||
{
 | 
			
		||||
    AMDVIAddressSpace *as = container_of(iommu, AMDVIAddressSpace, iommu);
 | 
			
		||||
 | 
			
		||||
    hw_error("device %02x.%02x.%x requires iommu notifier which is not "
 | 
			
		||||
    if (new & IOMMU_NOTIFIER_MAP) {
 | 
			
		||||
        error_report("device %02x.%02x.%x requires iommu notifier which is not "
 | 
			
		||||
                     "currently supported", as->bus_num, PCI_SLOT(as->devfn),
 | 
			
		||||
                     PCI_FUNC(as->devfn));
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void amdvi_init(AMDVIState *s)
 | 
			
		||||
 | 
			
		||||
@ -1980,10 +1980,14 @@ static void vtd_iommu_notify_flag_changed(MemoryRegion *iommu,
 | 
			
		||||
{
 | 
			
		||||
    VTDAddressSpace *vtd_as = container_of(iommu, VTDAddressSpace, iommu);
 | 
			
		||||
 | 
			
		||||
    hw_error("Device at bus %s addr %02x.%d requires iommu notifier which "
 | 
			
		||||
             "is currently not supported by intel-iommu emulation",
 | 
			
		||||
    if (new & IOMMU_NOTIFIER_MAP) {
 | 
			
		||||
        error_report("Device at bus %s addr %02x.%d requires iommu "
 | 
			
		||||
                     "notifier which is currently not supported by "
 | 
			
		||||
                     "intel-iommu emulation",
 | 
			
		||||
                     vtd_as->bus->qbus.name, PCI_SLOT(vtd_as->devfn),
 | 
			
		||||
                     PCI_FUNC(vtd_as->devfn));
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const VMStateDescription vtd_vmstate = {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user