[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 04/10] intel_iommu: fix iova for pt
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 04/10] intel_iommu: fix iova for pt |
Date: |
Wed, 2 Aug 2017 00:37:39 +0300 |
From: Peter Xu <address@hidden>
IOMMUTLBEntry.iova is returned incorrectly on one PT path (though mostly
we cannot really trigger this path, even if we do, we are mostly
disgarding this value, so it didn't break anything). Fix it by
converting the VTD_PAGE_MASK into the correct definition
VTD_PAGE_MASK_4K, then remove VTD_PAGE_MASK.
Fixes: b93130 ("intel_iommu: cleanup vtd_{do_}iommu_translate()")
Signed-off-by: Peter Xu <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
hw/i386/intel_iommu_internal.h | 1 -
hw/i386/intel_iommu.c | 4 ++--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
index f50ecd8..0e73a65 100644
--- a/hw/i386/intel_iommu_internal.h
+++ b/hw/i386/intel_iommu_internal.h
@@ -384,7 +384,6 @@ typedef struct VTDIOTLBPageInvInfo VTDIOTLBPageInvInfo;
/* Pagesize of VTD paging structures, including root and context tables */
#define VTD_PAGE_SHIFT 12
#define VTD_PAGE_SIZE (1ULL << VTD_PAGE_SHIFT)
-#define VTD_PAGE_MASK (VTD_PAGE_SIZE - 1)
#define VTD_PAGE_SHIFT_4K 12
#define VTD_PAGE_MASK_4K (~((1ULL << VTD_PAGE_SHIFT_4K) - 1))
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index e398746..e0b0498 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -1139,9 +1139,9 @@ static bool vtd_do_iommu_translate(VTDAddressSpace
*vtd_as, PCIBus *bus,
* Also, let's ignore IOTLB caching as well for PT devices.
*/
if (vtd_ce_get_type(&ce) == VTD_CONTEXT_TT_PASS_THROUGH) {
- entry->iova = addr & VTD_PAGE_MASK;
+ entry->iova = addr & VTD_PAGE_MASK_4K;
entry->translated_addr = entry->iova;
- entry->addr_mask = VTD_PAGE_MASK;
+ entry->addr_mask = ~VTD_PAGE_MASK_4K;
entry->perm = IOMMU_RW;
trace_vtd_translate_pt(source_id, entry->iova);
--
MST
- [Qemu-devel] [PULL 00/10] pc, acpi, virtio: fixes, test speedup for rc1, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 01/10] tests: switch pxe and vm gen id tests to use kvm, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 02/10] vhost: fix a memory leak, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 03/10] vhost-user: fix legacy cross-endian configurations, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 05/10] intel_iommu: use access_flags for iotlb, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 04/10] intel_iommu: fix iova for pt,
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 06/10] accel: cleanup error output, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 07/10] tests/bios-tables-test: Compiler warning fix, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 08/10] vhost-user: fix watcher need be removed when vhost-user hotplug, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 09/10] pc: make 'pc.rom' readonly when machine has PCI enabled, Michael S. Tsirkin, 2017/08/01
- [Qemu-devel] [PULL 10/10] pc: acpi: force FADT rev1 for 440fx based machine types, Michael S. Tsirkin, 2017/08/01
- Re: [Qemu-devel] [PULL 00/10] pc, acpi, virtio: fixes, test speedup for rc1, Peter Maydell, 2017/08/02