[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 08/11] vfio/common: remove spurious tpm-crb-cmd misalignment warni
From: |
Alex Williamson |
Subject: |
[PULL 08/11] vfio/common: remove spurious tpm-crb-cmd misalignment warning |
Date: |
Fri, 06 May 2022 14:48:46 -0600 |
User-agent: |
StGit/1.0-8-g6af9-dirty |
From: Eric Auger <eric.auger@redhat.com>
The CRB command buffer currently is a RAM MemoryRegion and given
its base address alignment, it causes an error report on
vfio_listener_region_add(). This region could have been a RAM device
region, easing the detection of such safe situation but this option
was not well received. So let's add a helper function that uses the
memory region owner type to detect the situation is safe wrt
the assignment. Other device types can be checked here if such kind
of problem occurs again.
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Acked-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
Link: 20220506132510.1847942-3-eric.auger@redhat.com">https://lore.kernel.org/r/20220506132510.1847942-3-eric.auger@redhat.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---
hw/vfio/common.c | 27 ++++++++++++++++++++++++++-
hw/vfio/trace-events | 1 +
2 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/hw/vfio/common.c b/hw/vfio/common.c
index 6065834717eb..cfcb71974a61 100644
--- a/hw/vfio/common.c
+++ b/hw/vfio/common.c
@@ -40,6 +40,7 @@
#include "trace.h"
#include "qapi/error.h"
#include "migration/migration.h"
+#include "sysemu/tpm.h"
VFIOGroupList vfio_group_list =
QLIST_HEAD_INITIALIZER(vfio_group_list);
@@ -861,6 +862,22 @@ static void
vfio_unregister_ram_discard_listener(VFIOContainer *container,
g_free(vrdl);
}
+static bool vfio_known_safe_misalignment(MemoryRegionSection *section)
+{
+ MemoryRegion *mr = section->mr;
+
+ if (!TPM_IS_CRB(mr->owner)) {
+ return false;
+ }
+
+ /* this is a known safe misaligned region, just trace for debug purpose */
+ trace_vfio_known_safe_misalignment(memory_region_name(mr),
+ section->offset_within_address_space,
+ section->offset_within_region,
+ qemu_real_host_page_size());
+ return true;
+}
+
static void vfio_listener_region_add(MemoryListener *listener,
MemoryRegionSection *section)
{
@@ -884,7 +901,15 @@ static void vfio_listener_region_add(MemoryListener
*listener,
if (unlikely((section->offset_within_address_space &
~qemu_real_host_page_mask()) !=
(section->offset_within_region &
~qemu_real_host_page_mask()))) {
- error_report("%s received unaligned region", __func__);
+ if (!vfio_known_safe_misalignment(section)) {
+ error_report("%s received unaligned region %s iova=0x%"PRIx64
+ " offset_within_region=0x%"PRIx64
+ " qemu_real_host_page_size=0x%"PRIxPTR,
+ __func__, memory_region_name(section->mr),
+ section->offset_within_address_space,
+ section->offset_within_region,
+ qemu_real_host_page_size());
+ }
return;
}
diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events
index 0ef1b5f4a65f..582882db91c3 100644
--- a/hw/vfio/trace-events
+++ b/hw/vfio/trace-events
@@ -100,6 +100,7 @@ vfio_listener_region_add_skip(uint64_t start, uint64_t end)
"SKIPPING region_add
vfio_spapr_group_attach(int groupfd, int tablefd) "Attached groupfd %d to
liobn fd %d"
vfio_listener_region_add_iommu(uint64_t start, uint64_t end) "region_add
[iommu] 0x%"PRIx64" - 0x%"PRIx64
vfio_listener_region_add_ram(uint64_t iova_start, uint64_t iova_end, void
*vaddr) "region_add [ram] 0x%"PRIx64" - 0x%"PRIx64" [%p]"
+vfio_known_safe_misalignment(const char *name, uint64_t iova, uint64_t
offset_within_region, uintptr_t page_size) "Region \"%s\" iova=0x%"PRIx64"
offset_within_region=0x%"PRIx64" qemu_real_host_page_size=0x%"PRIxPTR ": cannot
be mapped for DMA"
vfio_listener_region_add_no_dma_map(const char *name, uint64_t iova, uint64_t
size, uint64_t page_size) "Region \"%s\" 0x%"PRIx64" size=0x%"PRIx64" is not
aligned to 0x%"PRIx64" and cannot be mapped for DMA"
vfio_listener_region_del_skip(uint64_t start, uint64_t end) "SKIPPING
region_del 0x%"PRIx64" - 0x%"PRIx64
vfio_listener_region_del(uint64_t start, uint64_t end) "region_del 0x%"PRIx64"
- 0x%"PRIx64
- [PULL 01/11] vfio: simplify the conditional statements in vfio_msi_enable, (continued)
- [PULL 01/11] vfio: simplify the conditional statements in vfio_msi_enable, Alex Williamson, 2022/05/06
- [PULL 02/11] vfio: move re-enabling INTX out of the common helper, Alex Williamson, 2022/05/06
- [PULL 03/11] vfio: simplify the failure path in vfio_msi_enable, Alex Williamson, 2022/05/06
- [PULL 04/11] Revert "vfio: Avoid disabling and enabling vectors repeatedly in VFIO migration", Alex Williamson, 2022/05/06
- [PULL 05/11] vfio: defer to commit kvm irq routing when enable msi/msix, Alex Williamson, 2022/05/06
- [PULL 06/11] vfio/common: Fix a small boundary issue of a trace, Alex Williamson, 2022/05/06
- [PULL 07/11] sysemu: tpm: Add a stub function for TPM_IS_CRB, Alex Williamson, 2022/05/06
- [PULL 08/11] vfio/common: remove spurious tpm-crb-cmd misalignment warning,
Alex Williamson <=
- [PULL 09/11] hw/vfio/pci: fix vfio_pci_hot_reset_result trace point, Alex Williamson, 2022/05/06
- [PULL 10/11] vfio/pci: Use vbasedev local variable in vfio_realize(), Alex Williamson, 2022/05/06
- [PULL 11/11] vfio/common: Rename VFIOGuestIOMMU::iommu into ::iommu_mr, Alex Williamson, 2022/05/06
- Re: [PULL 00/11] Series short description, Richard Henderson, 2022/05/06