From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
yeeli <seven.yi.lee@gmail.com>, Jason Wang <jasowang@redhat.com>,
Yi Liu <yi.l.liu@intel.com>, Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <richard.henderson@linaro.org>,
Eduardo Habkost <eduardo@habkost.net>,
Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Subject: [PULL 19/19] intel_iommu: Fix for IQA reg read dropped DW field
Date: Thu, 1 Aug 2024 06:37:18 -0400 [thread overview]
Message-ID: <515457757ff8540c524ff39ea1d9564b251c6532.1722508478.git.mst@redhat.com> (raw)
In-Reply-To: <cover.1722508478.git.mst@redhat.com>
From: yeeli <seven.yi.lee@gmail.com>
If VT-D hardware supports scalable mode, Linux will set the IQA DW field
(bit11). In qemu, the vtd_mem_write and vtd_update_iq_dw set DW field well.
However, vtd_mem_read the DW field wrong because "& VTD_IQA_QS" dropped the
value of DW.
Replace "&VTD_IQA_QS" with "& (VTD_IQA_QS | VTD_IQA_DW_MASK)" could save
the DW field.
Test patch as below:
config the "x-scalable-mode" option:
"-device intel-iommu,caching-mode=on,x-scalable-mode=on,aw-bits=48"
After Linux OS boot, check the IQA_REG DW Field by usage 1 or 2:
1. IOMMU_DEBUGFS:
Before fix:
cat /sys/kernel/debug/iommu/intel/iommu_regset |grep IQA
IQA 0x90 0x00000001001da001
After fix:
cat /sys/kernel/debug/iommu/intel/iommu_regset |grep IQA
IQA 0x90 0x00000001001da801
Check DW field(bit11) is 1.
2. devmem2 read the IQA_REG (offset 0x90):
Before fix:
devmem2 0xfed90090
/dev/mem opened.
Memory mapped at address 0x7f72c795b000.
Value at address 0xFED90090 (0x7f72c795b090): 0x1DA001
After fix:
devmem2 0xfed90090
/dev/mem opened.
Memory mapped at address 0x7fc95281c000.
Value at address 0xFED90090 (0x7fc95281c090): 0x1DA801
Check DW field(bit11) is 1.
Signed-off-by: yeeli <seven.yi.lee@gmail.com>
Message-Id: <20240725031858.1529902-1-seven.yi.lee@gmail.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
hw/i386/intel_iommu.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index 9a768f0b44..16d2885fcc 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -2947,7 +2947,9 @@ static uint64_t vtd_mem_read(void *opaque, hwaddr addr, unsigned size)
/* Invalidation Queue Address Register, 64-bit */
case DMAR_IQA_REG:
- val = s->iq | (vtd_get_quad(s, DMAR_IQA_REG) & VTD_IQA_QS);
+ val = s->iq |
+ (vtd_get_quad(s, DMAR_IQA_REG) &
+ (VTD_IQA_QS | VTD_IQA_DW_MASK));
if (size == 4) {
val = val & ((1ULL << 32) - 1);
}
--
MST
next prev parent reply other threads:[~2024-08-01 10:38 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-01 10:35 [PULL 00/19] virtio,pci,pc: fixes Michael S. Tsirkin
2024-08-01 10:35 ` [PULL 01/19] virtio-rng: block max-bytes=0 Michael S. Tsirkin
2024-08-01 10:35 ` [PULL 02/19] Revert "docs: Document composable SR-IOV device" Michael S. Tsirkin
2024-08-01 10:35 ` [PULL 03/19] Revert "virtio-net: Implement SR-IOV VF" Michael S. Tsirkin
2024-08-01 10:35 ` [PULL 04/19] Revert "virtio-pci: Implement SR-IOV PF" Michael S. Tsirkin
2024-08-01 10:35 ` [PULL 05/19] Revert "pcie_sriov: Allow user to create SR-IOV device" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 06/19] Revert "pcie_sriov: Check PCI Express for SR-IOV PF" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 07/19] Revert "pcie_sriov: Ensure PF and VF are mutually exclusive" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 08/19] Revert "hw/pci: Fix SR-IOV VF number calculation" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 09/19] Revert "pcie_sriov: Register VFs after migration" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 10/19] Revert "pcie_sriov: Remove num_vfs from PCIESriovPF" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 11/19] Revert "pcie_sriov: Release VFs failed to realize" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 12/19] Revert "pcie_sriov: Reuse SR-IOV VF device instances" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 13/19] Revert "pcie_sriov: Ensure VF function number does not overflow" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 14/19] Revert "pcie_sriov: Do not manually unrealize" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 15/19] Revert "hw/ppc/spapr_pci: Do not reject VFs created after a PF" Michael S. Tsirkin
2024-08-01 10:36 ` [PULL 16/19] Revert "hw/ppc/spapr_pci: Do not create DT for disabled PCI device" Michael S. Tsirkin
2024-08-01 10:37 ` [PULL 17/19] Revert "hw/pci: Rename has_power to enabled" Michael S. Tsirkin
2024-08-01 10:37 ` [PULL 18/19] hw/i386/amd_iommu: Don't leak memory in amdvi_update_iotlb() Michael S. Tsirkin
2024-08-01 10:37 ` Michael S. Tsirkin [this message]
2024-08-01 22:18 ` [PULL 00/19] virtio,pci,pc: fixes Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=515457757ff8540c524ff39ea1d9564b251c6532.1722508478.git.mst@redhat.com \
--to=mst@redhat.com \
--cc=eduardo@habkost.net \
--cc=jasowang@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=seven.yi.lee@gmail.com \
--cc=yi.l.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).