summary refs log tree commit diff stats
path: root/util/vfio-helpers.c
diff options
context:
space:
mode:
authorPhilippe Mathieu-Daudé <philmd@redhat.com>2020-11-03 03:07:28 +0100
committerStefan Hajnoczi <stefanha@redhat.com>2020-11-03 19:06:22 +0000
commit3d87c2d9435a4c71d588a770a8a34382c1afa9c1 (patch)
treed128561d80d1cb41e99e79aca60415c4476b7315 /util/vfio-helpers.c
parenta4bc212add9bd9d7a7baaa095f875d9212eb1fc9 (diff)
downloadfocaccia-qemu-3d87c2d9435a4c71d588a770a8a34382c1afa9c1.tar.gz
focaccia-qemu-3d87c2d9435a4c71d588a770a8a34382c1afa9c1.zip
util/vfio-helpers: Trace PCI I/O config accesses
We sometime get kernel panic with some devices on Aarch64
hosts. Alex Williamson suggests it might be broken PCIe
root complex. Add trace event to record the latest I/O
access before crashing. In case, assert our accesses are
aligned.

Reviewed-by: Fam Zheng <fam@euphon.net>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20201103020733.2303148-3-philmd@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Tested-by: Eric Auger <eric.auger@redhat.com>
Diffstat (limited to 'util/vfio-helpers.c')
-rw-r--r--util/vfio-helpers.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c
index 14a549510f..1d4efafcaa 100644
--- a/util/vfio-helpers.c
+++ b/util/vfio-helpers.c
@@ -227,6 +227,10 @@ static int qemu_vfio_pci_read_config(QEMUVFIOState *s, void *buf,
 {
     int ret;
 
+    trace_qemu_vfio_pci_read_config(buf, ofs, size,
+                                    s->config_region_info.offset,
+                                    s->config_region_info.size);
+    assert(QEMU_IS_ALIGNED(s->config_region_info.offset + ofs, size));
     do {
         ret = pread(s->device, buf, size, s->config_region_info.offset + ofs);
     } while (ret == -1 && errno == EINTR);
@@ -237,6 +241,10 @@ static int qemu_vfio_pci_write_config(QEMUVFIOState *s, void *buf, int size, int
 {
     int ret;
 
+    trace_qemu_vfio_pci_write_config(buf, ofs, size,
+                                     s->config_region_info.offset,
+                                     s->config_region_info.size);
+    assert(QEMU_IS_ALIGNED(s->config_region_info.offset + ofs, size));
     do {
         ret = pwrite(s->device, buf, size, s->config_region_info.offset + ofs);
     } while (ret == -1 && errno == EINTR);