mbox series

[0/9] util/vfio-helpers: Improve debugging experience

Message ID 20201014115253.25276-1-philmd@redhat.com
Headers show
Series util/vfio-helpers: Improve debugging experience | expand

Message

Philippe Mathieu-Daudé Oct. 14, 2020, 11:52 a.m. UTC
A bunch of boring patches that have been proven helpful
while debugging.

Philippe Mathieu-Daudé (9):
  util/vfio-helpers: Improve reporting unsupported IOMMU type
  util/vfio-helpers: Trace PCI I/O config accesses
  util/vfio-helpers: Trace PCI BAR region info
  util/vfio-helpers: Trace where BARs are mapped
  util/vfio-helpers: Improve DMA trace events
  util/vfio-helpers: Convert vfio_dump_mapping to trace events
  util/vfio-helpers: Let qemu_vfio_dma_map() propagate Error
  util/vfio-helpers: Let qemu_vfio_do_mapping() propagate Error
  util/vfio-helpers: Let qemu_vfio_verify_mappings() use error_report()

 include/qemu/vfio-helpers.h |  2 +-
 block/nvme.c                | 14 ++++----
 util/vfio-helpers.c         | 66 +++++++++++++++++++++----------------
 util/trace-events           | 10 ++++--
 4 files changed, 54 insertions(+), 38 deletions(-)

-- 
2.26.2

Comments

Fam Zheng Oct. 14, 2020, 12:23 p.m. UTC | #1
On Wed, 2020-10-14 at 13:52 +0200, Philippe Mathieu-Daudé wrote:
> For debug purpose, trace BAR regions info.
> 
> 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);

Where is barname freed?

Fam

> +    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
Fam Zheng Oct. 14, 2020, 12:34 p.m. UTC | #2
On Wed, 2020-10-14 at 13:52 +0200, Philippe Mathieu-Daudé wrote:
> A bunch of boring patches that have been proven helpful
> while debugging.
> 
> Philippe Mathieu-Daudé (9):
>   util/vfio-helpers: Improve reporting unsupported IOMMU type
>   util/vfio-helpers: Trace PCI I/O config accesses
>   util/vfio-helpers: Trace PCI BAR region info
>   util/vfio-helpers: Trace where BARs are mapped
>   util/vfio-helpers: Improve DMA trace events
>   util/vfio-helpers: Convert vfio_dump_mapping to trace events
>   util/vfio-helpers: Let qemu_vfio_dma_map() propagate Error
>   util/vfio-helpers: Let qemu_vfio_do_mapping() propagate Error
>   util/vfio-helpers: Let qemu_vfio_verify_mappings() use
> error_report()
> 
>  include/qemu/vfio-helpers.h |  2 +-
>  block/nvme.c                | 14 ++++----
>  util/vfio-helpers.c         | 66 +++++++++++++++++++++------------
> ----
>  util/trace-events           | 10 ++++--
>  4 files changed, 54 insertions(+), 38 deletions(-)
> 
> -- 
> 2.26.2
> 
> 
> 

Modular the g_strdup_printf() memleak I pointed out:

Reviewed-by: Fam Zheng <fam@euphon.net>
Philippe Mathieu-Daudé Oct. 14, 2020, 12:42 p.m. UTC | #3
On 10/14/20 2:23 PM, Fam Zheng wrote:
> On Wed, 2020-10-14 at 13:52 +0200, Philippe Mathieu-Daudé wrote:

>> For debug purpose, trace BAR regions info.

>>

>> 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);

> 

> Where is barname freed?


Using GLib g_autofree qualifier.

> 

> Fam

> 

>> +    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

>
Philippe Mathieu-Daudé Oct. 14, 2020, 12:42 p.m. UTC | #4
On 10/14/20 2:34 PM, Fam Zheng wrote:
> On Wed, 2020-10-14 at 13:52 +0200, Philippe Mathieu-Daudé wrote:
>> A bunch of boring patches that have been proven helpful
>> while debugging.
>>
>> Philippe Mathieu-Daudé (9):
>>    util/vfio-helpers: Improve reporting unsupported IOMMU type
>>    util/vfio-helpers: Trace PCI I/O config accesses
>>    util/vfio-helpers: Trace PCI BAR region info
>>    util/vfio-helpers: Trace where BARs are mapped
>>    util/vfio-helpers: Improve DMA trace events
>>    util/vfio-helpers: Convert vfio_dump_mapping to trace events
>>    util/vfio-helpers: Let qemu_vfio_dma_map() propagate Error
>>    util/vfio-helpers: Let qemu_vfio_do_mapping() propagate Error
>>    util/vfio-helpers: Let qemu_vfio_verify_mappings() use
>> error_report()
>>
>>   include/qemu/vfio-helpers.h |  2 +-
>>   block/nvme.c                | 14 ++++----
>>   util/vfio-helpers.c         | 66 +++++++++++++++++++++------------
>> ----
>>   util/trace-events           | 10 ++++--
>>   4 files changed, 54 insertions(+), 38 deletions(-)
>>
>> -- 
>> 2.26.2
>>
>>
>>
> 
> Modular the g_strdup_printf() memleak I pointed out:
> 
> Reviewed-by: Fam Zheng <fam@euphon.net>

Thanks!
Fam Zheng Oct. 14, 2020, 12:50 p.m. UTC | #5
On Wed, 2020-10-14 at 14:42 +0200, Philippe Mathieu-Daudé wrote:
> On 10/14/20 2:34 PM, Fam Zheng wrote:
> > On Wed, 2020-10-14 at 13:52 +0200, Philippe Mathieu-Daudé wrote:
> > > A bunch of boring patches that have been proven helpful
> > > while debugging.
> > > 
> > > Philippe Mathieu-Daudé (9):
> > >    util/vfio-helpers: Improve reporting unsupported IOMMU type
> > >    util/vfio-helpers: Trace PCI I/O config accesses
> > >    util/vfio-helpers: Trace PCI BAR region info
> > >    util/vfio-helpers: Trace where BARs are mapped
> > >    util/vfio-helpers: Improve DMA trace events
> > >    util/vfio-helpers: Convert vfio_dump_mapping to trace events
> > >    util/vfio-helpers: Let qemu_vfio_dma_map() propagate Error
> > >    util/vfio-helpers: Let qemu_vfio_do_mapping() propagate Error
> > >    util/vfio-helpers: Let qemu_vfio_verify_mappings() use
> > > error_report()
> > > 
> > >   include/qemu/vfio-helpers.h |  2 +-
> > >   block/nvme.c                | 14 ++++----
> > >   util/vfio-helpers.c         | 66 +++++++++++++++++++++---------
> > > ---
> > > ----
> > >   util/trace-events           | 10 ++++--
> > >   4 files changed, 54 insertions(+), 38 deletions(-)
> > > 
> > > -- 
> > > 2.26.2
> > > 
> > > 
> > > 
> > 
> > Modular the g_strdup_printf() memleak I pointed out:
> > 
> > Reviewed-by: Fam Zheng <fam@euphon.net>

Overlooked the auto free qualifier, so that one is okay too!

Fam

> 
> Thanks!
> 
>