diff mbox series

[v2,07/19] util/vfio-helpers: Trace PCI BAR region info

Message ID 20201026105504.4023620-8-philmd@redhat.com
State Superseded
Headers show
Series util/vfio-helpers: Allow using multiple MSIX IRQs | expand

Commit Message

Philippe Mathieu-Daudé Oct. 26, 2020, 10:54 a.m. UTC
For debug purpose, trace BAR regions info.

Reviewed-by: Fam Zheng <fam@euphon.net>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 util/vfio-helpers.c | 8 ++++++++
 util/trace-events   | 1 +
 2 files changed, 9 insertions(+)

Comments

Eric Auger Oct. 26, 2020, 6:06 p.m. UTC | #1
Hi Philippe,

On 10/26/20 11:54 AM, Philippe Mathieu-Daudé wrote:
> For debug purpose, trace BAR regions info.

> 

> Reviewed-by: Fam Zheng <fam@euphon.net>

> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---

>  util/vfio-helpers.c | 8 ++++++++

>  util/trace-events   | 1 +

>  2 files changed, 9 insertions(+)

> 

> diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c

> index 1d4efafcaa4..cd6287c3a98 100644

> --- a/util/vfio-helpers.c

> +++ b/util/vfio-helpers.c

> @@ -136,6 +136,7 @@ static inline void assert_bar_index_valid(QEMUVFIOState *s, int index)

>  

>  static int qemu_vfio_pci_init_bar(QEMUVFIOState *s, int index, Error **errp)

>  {

> +    g_autofree char *barname = NULL;

>      assert_bar_index_valid(s, index);

>      s->bar_region_info[index] = (struct vfio_region_info) {

>          .index = VFIO_PCI_BAR0_REGION_INDEX + index,

> @@ -145,6 +146,10 @@ static int qemu_vfio_pci_init_bar(QEMUVFIOState *s, int index, Error **errp)

>          error_setg_errno(errp, errno, "Failed to get BAR region info");

>          return -errno;

>      }

> +    barname = g_strdup_printf("bar[%d]", index);

> +    trace_qemu_vfio_region_info(barname, s->bar_region_info[index].offset,

> +                                s->bar_region_info[index].size,

> +                                s->bar_region_info[index].cap_offset);

>  

>      return 0;

>  }

> @@ -416,6 +421,9 @@ static int qemu_vfio_init_pci(QEMUVFIOState *s, const char *device,

>          ret = -errno;

>          goto fail;

>      }

> +    trace_qemu_vfio_region_info("config", s->config_region_info.offset,

> +                                s->config_region_info.size,

> +                                s->config_region_info.cap_offset);

>  

>      for (i = 0; i < ARRAY_SIZE(s->bar_region_info); i++) {

>          ret = qemu_vfio_pci_init_bar(s, i, errp);

> diff --git a/util/trace-events b/util/trace-events

> index c048f85f828..4d40c74a21f 100644

> --- a/util/trace-events

> +++ b/util/trace-events

> @@ -87,3 +87,4 @@ qemu_vfio_dma_map(void *s, void *host, size_t size, bool temporary, uint64_t *io

>  qemu_vfio_dma_unmap(void *s, void *host) "s %p host %p"

>  qemu_vfio_pci_read_config(void *buf, int ofs, int size, uint64_t region_ofs, uint64_t region_size) "read cfg ptr %p ofs 0x%x size %d (region ofs 0x%"PRIx64" size %"PRId64")"

>  qemu_vfio_pci_write_config(void *buf, int ofs, int size, uint64_t region_ofs, uint64_t region_size) "write cfg ptr %p ofs 0x%x size %d (region ofs 0x%"PRIx64" size %"PRId64")"

> +qemu_vfio_region_info(const char *desc, uint64_t offset, uint64_t size, uint32_t cap_offset) "region '%s' ofs 0x%"PRIx64" size %"PRId64" cap_ofs %"PRId32

Use hexa too for the offsets and size. This is generally more readable.

Thanks

Eric
>
diff mbox series

Patch

diff --git a/util/vfio-helpers.c b/util/vfio-helpers.c
index 1d4efafcaa4..cd6287c3a98 100644
--- a/util/vfio-helpers.c
+++ b/util/vfio-helpers.c
@@ -136,6 +136,7 @@  static inline void assert_bar_index_valid(QEMUVFIOState *s, int index)
 
 static int qemu_vfio_pci_init_bar(QEMUVFIOState *s, int index, Error **errp)
 {
+    g_autofree char *barname = NULL;
     assert_bar_index_valid(s, index);
     s->bar_region_info[index] = (struct vfio_region_info) {
         .index = VFIO_PCI_BAR0_REGION_INDEX + index,
@@ -145,6 +146,10 @@  static int qemu_vfio_pci_init_bar(QEMUVFIOState *s, int index, Error **errp)
         error_setg_errno(errp, errno, "Failed to get BAR region info");
         return -errno;
     }
+    barname = g_strdup_printf("bar[%d]", index);
+    trace_qemu_vfio_region_info(barname, s->bar_region_info[index].offset,
+                                s->bar_region_info[index].size,
+                                s->bar_region_info[index].cap_offset);
 
     return 0;
 }
@@ -416,6 +421,9 @@  static int qemu_vfio_init_pci(QEMUVFIOState *s, const char *device,
         ret = -errno;
         goto fail;
     }
+    trace_qemu_vfio_region_info("config", s->config_region_info.offset,
+                                s->config_region_info.size,
+                                s->config_region_info.cap_offset);
 
     for (i = 0; i < ARRAY_SIZE(s->bar_region_info); i++) {
         ret = qemu_vfio_pci_init_bar(s, i, errp);
diff --git a/util/trace-events b/util/trace-events
index c048f85f828..4d40c74a21f 100644
--- a/util/trace-events
+++ b/util/trace-events
@@ -87,3 +87,4 @@  qemu_vfio_dma_map(void *s, void *host, size_t size, bool temporary, uint64_t *io
 qemu_vfio_dma_unmap(void *s, void *host) "s %p host %p"
 qemu_vfio_pci_read_config(void *buf, int ofs, int size, uint64_t region_ofs, uint64_t region_size) "read cfg ptr %p ofs 0x%x size %d (region ofs 0x%"PRIx64" size %"PRId64")"
 qemu_vfio_pci_write_config(void *buf, int ofs, int size, uint64_t region_ofs, uint64_t region_size) "write cfg ptr %p ofs 0x%x size %d (region ofs 0x%"PRIx64" size %"PRId64")"
+qemu_vfio_region_info(const char *desc, uint64_t offset, uint64_t size, uint32_t cap_offset) "region '%s' ofs 0x%"PRIx64" size %"PRId64" cap_ofs %"PRId32