You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
3.4 KiB
84 lines
3.4 KiB
1 year ago
|
From 643d93343759a350fe0f6327d308bf6a93c79d25 Mon Sep 17 00:00:00 2001
|
||
|
From: Eric Auger <eric.auger@redhat.com>
|
||
|
Date: Wed, 5 Jul 2023 18:51:18 +0200
|
||
|
Subject: [PATCH 02/37] virtio-iommu: Rework the traces in
|
||
|
virtio_iommu_set_page_size_mask()
|
||
|
|
||
|
RH-Author: Eric Auger <eric.auger@redhat.com>
|
||
|
RH-MergeRequest: 182: VIRTIO-IOMMU/VFIO page size related fixes
|
||
|
RH-Bugzilla: 2211609 2211634
|
||
|
RH-Acked-by: Gavin Shan <gshan@redhat.com>
|
||
|
RH-Acked-by: Sebastian Ott <None>
|
||
|
RH-Commit: [2/2] 0af7078dde158f07c83e2b293adc5d9d475688ae (eauger1/centos-qemu-kvm)
|
||
|
|
||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2211609
|
||
|
|
||
|
The current error messages in virtio_iommu_set_page_size_mask()
|
||
|
sound quite similar for different situations and miss the IOMMU
|
||
|
memory region that causes the issue.
|
||
|
|
||
|
Clarify them and rework the comment.
|
||
|
|
||
|
Also remove the trace when the new page_size_mask is not applied as
|
||
|
the current frozen granule is kept. This message is rather confusing
|
||
|
for the end user and anyway the current granule would have been used
|
||
|
by the driver.
|
||
|
|
||
|
Signed-off-by: Eric Auger <eric.auger@redhat.com>
|
||
|
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
|
||
|
Message-Id: <20230705165118.28194-3-eric.auger@redhat.com>
|
||
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
|
||
|
Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||
|
Tested-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
|
||
|
(cherry picked from commit 587a7641d53055054d68d67d94c9408ef808f127)
|
||
|
Signed-off-by: Eric Auger <eric.auger@redhat.com>
|
||
|
---
|
||
|
hw/virtio/virtio-iommu.c | 19 +++++++------------
|
||
|
1 file changed, 7 insertions(+), 12 deletions(-)
|
||
|
|
||
|
diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
|
||
|
index 542679b321..421e2a944f 100644
|
||
|
--- a/hw/virtio/virtio-iommu.c
|
||
|
+++ b/hw/virtio/virtio-iommu.c
|
||
|
@@ -1101,29 +1101,24 @@ static int virtio_iommu_set_page_size_mask(IOMMUMemoryRegion *mr,
|
||
|
new_mask);
|
||
|
|
||
|
if ((cur_mask & new_mask) == 0) {
|
||
|
- error_setg(errp, "virtio-iommu page mask 0x%"PRIx64
|
||
|
- " is incompatible with mask 0x%"PRIx64, cur_mask, new_mask);
|
||
|
+ error_setg(errp, "virtio-iommu %s reports a page size mask 0x%"PRIx64
|
||
|
+ " incompatible with currently supported mask 0x%"PRIx64,
|
||
|
+ mr->parent_obj.name, new_mask, cur_mask);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Once the granule is frozen we can't change the mask anymore. If by
|
||
|
* chance the hotplugged device supports the same granule, we can still
|
||
|
- * accept it. Having a different masks is possible but the guest will use
|
||
|
- * sub-optimal block sizes, so warn about it.
|
||
|
+ * accept it.
|
||
|
*/
|
||
|
if (s->granule_frozen) {
|
||
|
- int new_granule = ctz64(new_mask);
|
||
|
int cur_granule = ctz64(cur_mask);
|
||
|
|
||
|
- if (new_granule != cur_granule) {
|
||
|
- error_setg(errp, "virtio-iommu page mask 0x%"PRIx64
|
||
|
- " is incompatible with mask 0x%"PRIx64, cur_mask,
|
||
|
- new_mask);
|
||
|
+ if (!(BIT(cur_granule) & new_mask)) {
|
||
|
+ error_setg(errp, "virtio-iommu %s does not support frozen granule 0x%llx",
|
||
|
+ mr->parent_obj.name, BIT_ULL(cur_granule));
|
||
|
return -1;
|
||
|
- } else if (new_mask != cur_mask) {
|
||
|
- warn_report("virtio-iommu page mask 0x%"PRIx64
|
||
|
- " does not match 0x%"PRIx64, cur_mask, new_mask);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
--
|
||
|
2.39.3
|
||
|
|