[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 8/9] intel_iommu: Use correct shift for 256 bits qi descriptor
From: |
Michael S. Tsirkin |
Subject: |
[PULL 8/9] intel_iommu: Use correct shift for 256 bits qi descriptor |
Date: |
Wed, 22 Jul 2020 08:09:34 -0400 |
From: Liu Yi L <yi.l.liu@intel.com>
In chapter 10.4.23 of VT-d spec 3.0, Descriptor Width bit was introduced
in VTD_IQA_REG. Software could set this bit to tell VT-d the QI descriptor
from software would be 256 bits. Accordingly, the VTD_IQH_QH_SHIFT should
be 5 when descriptor size is 256 bits.
This patch adds the DW bit check when deciding the shift used to update
VTD_IQH_REG.
Signed-off-by: Liu Yi L <yi.l.liu@intel.com>
Message-Id: <1593850035-35483-1-git-send-email-yi.l.liu@intel.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Cc: qemu-stable@nongnu.org
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/i386/intel_iommu_internal.h | 3 ++-
hw/i386/intel_iommu.c | 7 ++++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
index 862033ebe6..3d5487fe2c 100644
--- a/hw/i386/intel_iommu_internal.h
+++ b/hw/i386/intel_iommu_internal.h
@@ -230,7 +230,8 @@
#define VTD_IQA_DW_MASK 0x800
/* IQH_REG */
-#define VTD_IQH_QH_SHIFT 4
+#define VTD_IQH_QH_SHIFT_4 4
+#define VTD_IQH_QH_SHIFT_5 5
#define VTD_IQH_QH_MASK 0x7fff0ULL
/* ICS_REG */
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index c56398e991..0c286635cf 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -2549,6 +2549,11 @@ static bool vtd_process_inv_desc(IntelIOMMUState *s)
/* Try to fetch and process more Invalidation Descriptors */
static void vtd_fetch_inv_desc(IntelIOMMUState *s)
{
+ int qi_shift;
+
+ /* Refer to 10.4.23 of VT-d spec 3.0 */
+ qi_shift = s->iq_dw ? VTD_IQH_QH_SHIFT_5 : VTD_IQH_QH_SHIFT_4;
+
trace_vtd_inv_qi_fetch();
if (s->iq_tail >= s->iq_size) {
@@ -2567,7 +2572,7 @@ static void vtd_fetch_inv_desc(IntelIOMMUState *s)
}
/* Must update the IQH_REG in time */
vtd_set_quad_raw(s, DMAR_IQH_REG,
- (((uint64_t)(s->iq_head)) << VTD_IQH_QH_SHIFT) &
+ (((uint64_t)(s->iq_head)) << qi_shift) &
VTD_IQH_QH_MASK);
}
}
--
MST
- [PULL 0/9] acpi,virtio,pc: bugfixes, Michael S. Tsirkin, 2020/07/22
- [PULL 1/9] acpi: accept byte and word access to core ACPI registers, Michael S. Tsirkin, 2020/07/22
- [PULL 2/9] virtio: Drop broken and superfluous object_property_set_link(), Michael S. Tsirkin, 2020/07/22
- [PULL 3/9] virtio-balloon: Prevent guest from starting a report when we didn't request one, Michael S. Tsirkin, 2020/07/22
- [PULL 4/9] virtio-balloon: Add locking to prevent possible race when starting hinting, Michael S. Tsirkin, 2020/07/22
- [PULL 5/9] virtio-balloon: Replace free page hinting references to 'report' with 'hint', Michael S. Tsirkin, 2020/07/22
- [PULL 6/9] virtio: list legacy-capable devices, Michael S. Tsirkin, 2020/07/22
- [PULL 7/9] virtio: verify that legacy support is not accidentally on, Michael S. Tsirkin, 2020/07/22
- [PULL 8/9] intel_iommu: Use correct shift for 256 bits qi descriptor,
Michael S. Tsirkin <=
- [PULL 9/9] virtio-pci: Changed vdev to proxy for VirtIO PCI BAR callbacks., Michael S. Tsirkin, 2020/07/22
- Re: [PULL 0/9] acpi,virtio,pc: bugfixes, Peter Maydell, 2020/07/23