diff options
author | Peter Xu <peterx@redhat.com> | 2019-01-16 11:08:12 +0800 |
---|---|---|
committer | Michael S. Tsirkin <mst@redhat.com> | 2019-02-05 10:58:33 -0500 |
commit | 2a078b1080917dc6143783e1dd645e188d11dc8f (patch) | |
tree | 9a46467761c68e07bfe06489780a1f146b4b36c9 /hw | |
parent | 3f262b26b82cf5930f0c294d289f258a6d3d2528 (diff) | |
download | qemu-2a078b1080917dc6143783e1dd645e188d11dc8f.zip qemu-2a078b1080917dc6143783e1dd645e188d11dc8f.tar.gz qemu-2a078b1080917dc6143783e1dd645e188d11dc8f.tar.bz2 |
intel_iommu: fix operator in vtd_switch_address_space
When calculating use_iommu, we wanted to first detect whether DMAR is
enabled, then check whether PT is enabled if DMAR is enabled. However
in the current code we used "&" rather than "&&" so the ordering
requirement is lost (instead it'll be an "AND" operation). This could
introduce errors dumped in QEMU console when rebooting a guest with
both assigned device and vIOMMU, like:
qemu-system-x86_64: vtd_dev_to_context_entry: invalid root entry:
rsvd=0xf000ff53f000e2c3, val=0xf000ff53f000ff53 (reserved nonzero)
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/i386/intel_iommu.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 8b72735..6d5cc1d 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -1153,7 +1153,7 @@ static bool vtd_switch_address_space(VTDAddressSpace *as) assert(as); - use_iommu = as->iommu_state->dmar_enabled & !vtd_dev_pt_enabled(as); + use_iommu = as->iommu_state->dmar_enabled && !vtd_dev_pt_enabled(as); trace_vtd_switch_address_space(pci_bus_num(as->bus), VTD_PCI_SLOT(as->devfn), |