Re: [PATCH v5 19/21] virtio-mem: Add trace events

2020-07-02 Thread Dr. David Alan Gilbert
* David Hildenbrand (da...@redhat.com) wrote:
> Let's add some trace events that might come in handy later.
> 
> Cc: "Michael S. Tsirkin" 
> Cc: "Dr. David Alan Gilbert" 
> Signed-off-by: David Hildenbrand 

Reviewed-by: Dr. David Alan Gilbert 

> ---
>  hw/virtio/trace-events | 10 ++
>  hw/virtio/virtio-mem.c | 10 +-
>  2 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
> index 6427a0047d..292fc15e29 100644
> --- a/hw/virtio/trace-events
> +++ b/hw/virtio/trace-events
> @@ -74,3 +74,13 @@ virtio_iommu_get_domain(uint32_t domain_id) "Alloc 
> domain=%d"
>  virtio_iommu_put_domain(uint32_t domain_id) "Free domain=%d"
>  virtio_iommu_translate_out(uint64_t virt_addr, uint64_t phys_addr, uint32_t 
> sid) "0x%"PRIx64" -> 0x%"PRIx64 " for sid=%d"
>  virtio_iommu_report_fault(uint8_t reason, uint32_t flags, uint32_t endpoint, 
> uint64_t addr) "FAULT reason=%d flags=%d endpoint=%d address =0x%"PRIx64
> +
> +# virtio-mem.c
> +virtio_mem_send_response(uint16_t type) "type=%" PRIu16
> +virtio_mem_plug_request(uint64_t addr, uint16_t nb_blocks) "addr=0x%" PRIx64 
> " nb_blocks=%" PRIu16
> +virtio_mem_unplug_request(uint64_t addr, uint16_t nb_blocks) "addr=0x%" 
> PRIx64 " nb_blocks=%" PRIu16
> +virtio_mem_unplugged_all(void) ""
> +virtio_mem_unplug_all_request(void) ""
> +virtio_mem_resized_usable_region(uint64_t old_size, uint64_t new_size) 
> "old_size=0x%" PRIx64 "new_size=0x%" PRIx64
> +virtio_mem_state_request(uint64_t addr, uint16_t nb_blocks) "addr=0x%" 
> PRIx64 " nb_blocks=%" PRIu16
> +virtio_mem_state_response(uint16_t state) "state=%" PRIu16
> diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
> index 6ed5409669..fdd4dbb42c 100644
> --- a/hw/virtio/virtio-mem.c
> +++ b/hw/virtio/virtio-mem.c
> @@ -30,6 +30,7 @@
>  #include "hw/boards.h"
>  #include "hw/qdev-properties.h"
>  #include "config-devices.h"
> +#include "trace.h"
>  
>  /*
>   * Use QEMU_VMALLOC_ALIGN, so no THP will have to be split when unplugging
> @@ -100,6 +101,7 @@ static void virtio_mem_send_response(VirtIOMEM *vmem, 
> VirtQueueElement *elem,
>  VirtIODevice *vdev = VIRTIO_DEVICE(vmem);
>  VirtQueue *vq = vmem->vq;
>  
> +trace_virtio_mem_send_response(le16_to_cpu(resp->type));
>  iov_from_buf(elem->in_sg, elem->in_num, 0, resp, sizeof(*resp));
>  
>  virtqueue_push(vq, elem, sizeof(*resp));
> @@ -195,6 +197,7 @@ static void virtio_mem_plug_request(VirtIOMEM *vmem, 
> VirtQueueElement *elem,
>  const uint16_t nb_blocks = le16_to_cpu(req->u.plug.nb_blocks);
>  uint16_t type;
>  
> +trace_virtio_mem_plug_request(gpa, nb_blocks);
>  type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, true);
>  virtio_mem_send_response_simple(vmem, elem, type);
>  }
> @@ -206,6 +209,7 @@ static void virtio_mem_unplug_request(VirtIOMEM *vmem, 
> VirtQueueElement *elem,
>  const uint16_t nb_blocks = le16_to_cpu(req->u.unplug.nb_blocks);
>  uint16_t type;
>  
> +trace_virtio_mem_unplug_request(gpa, nb_blocks);
>  type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, false);
>  virtio_mem_send_response_simple(vmem, elem, type);
>  }
> @@ -225,6 +229,7 @@ static void virtio_mem_resize_usable_region(VirtIOMEM 
> *vmem,
>  return;
>  }
>  
> +trace_virtio_mem_resized_usable_region(vmem->usable_region_size, 
> newsize);
>  vmem->usable_region_size = newsize;
>  }
>  
> @@ -247,7 +252,7 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
>  vmem->size = 0;
>  notifier_list_notify(>size_change_notifiers, >size);
>  }
> -
> +trace_virtio_mem_unplugged_all();
>  virtio_mem_resize_usable_region(vmem, vmem->requested_size, true);
>  return 0;
>  }
> @@ -255,6 +260,7 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
>  static void virtio_mem_unplug_all_request(VirtIOMEM *vmem,
>VirtQueueElement *elem)
>  {
> +trace_virtio_mem_unplug_all_request();
>  if (virtio_mem_unplug_all(vmem)) {
>  virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_BUSY);
>  } else {
> @@ -272,6 +278,7 @@ static void virtio_mem_state_request(VirtIOMEM *vmem, 
> VirtQueueElement *elem,
>  .type = cpu_to_le16(VIRTIO_MEM_RESP_ACK),
>  };
>  
> +trace_virtio_mem_state_request(gpa, nb_blocks);
>  if (!virtio_mem_valid_range(vmem, gpa, size)) {
>  virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_ERROR);
>  return;
> @@ -284,6 +291,7 @@ static void virtio_mem_state_request(VirtIOMEM *vmem, 
> VirtQueueElement *elem,
>  } else {
>  resp.u.state.state = cpu_to_le16(VIRTIO_MEM_STATE_MIXED);
>  }
> +trace_virtio_mem_state_response(le16_to_cpu(resp.u.state.state));
>  virtio_mem_send_response(vmem, elem, );
>  }
>  
> -- 
> 2.26.2
> 
--
Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK




[PATCH v5 19/21] virtio-mem: Add trace events

2020-06-26 Thread David Hildenbrand
Let's add some trace events that might come in handy later.

Cc: "Michael S. Tsirkin" 
Cc: "Dr. David Alan Gilbert" 
Signed-off-by: David Hildenbrand 
---
 hw/virtio/trace-events | 10 ++
 hw/virtio/virtio-mem.c | 10 +-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
index 6427a0047d..292fc15e29 100644
--- a/hw/virtio/trace-events
+++ b/hw/virtio/trace-events
@@ -74,3 +74,13 @@ virtio_iommu_get_domain(uint32_t domain_id) "Alloc domain=%d"
 virtio_iommu_put_domain(uint32_t domain_id) "Free domain=%d"
 virtio_iommu_translate_out(uint64_t virt_addr, uint64_t phys_addr, uint32_t 
sid) "0x%"PRIx64" -> 0x%"PRIx64 " for sid=%d"
 virtio_iommu_report_fault(uint8_t reason, uint32_t flags, uint32_t endpoint, 
uint64_t addr) "FAULT reason=%d flags=%d endpoint=%d address =0x%"PRIx64
+
+# virtio-mem.c
+virtio_mem_send_response(uint16_t type) "type=%" PRIu16
+virtio_mem_plug_request(uint64_t addr, uint16_t nb_blocks) "addr=0x%" PRIx64 " 
nb_blocks=%" PRIu16
+virtio_mem_unplug_request(uint64_t addr, uint16_t nb_blocks) "addr=0x%" PRIx64 
" nb_blocks=%" PRIu16
+virtio_mem_unplugged_all(void) ""
+virtio_mem_unplug_all_request(void) ""
+virtio_mem_resized_usable_region(uint64_t old_size, uint64_t new_size) 
"old_size=0x%" PRIx64 "new_size=0x%" PRIx64
+virtio_mem_state_request(uint64_t addr, uint16_t nb_blocks) "addr=0x%" PRIx64 
" nb_blocks=%" PRIu16
+virtio_mem_state_response(uint16_t state) "state=%" PRIu16
diff --git a/hw/virtio/virtio-mem.c b/hw/virtio/virtio-mem.c
index 6ed5409669..fdd4dbb42c 100644
--- a/hw/virtio/virtio-mem.c
+++ b/hw/virtio/virtio-mem.c
@@ -30,6 +30,7 @@
 #include "hw/boards.h"
 #include "hw/qdev-properties.h"
 #include "config-devices.h"
+#include "trace.h"
 
 /*
  * Use QEMU_VMALLOC_ALIGN, so no THP will have to be split when unplugging
@@ -100,6 +101,7 @@ static void virtio_mem_send_response(VirtIOMEM *vmem, 
VirtQueueElement *elem,
 VirtIODevice *vdev = VIRTIO_DEVICE(vmem);
 VirtQueue *vq = vmem->vq;
 
+trace_virtio_mem_send_response(le16_to_cpu(resp->type));
 iov_from_buf(elem->in_sg, elem->in_num, 0, resp, sizeof(*resp));
 
 virtqueue_push(vq, elem, sizeof(*resp));
@@ -195,6 +197,7 @@ static void virtio_mem_plug_request(VirtIOMEM *vmem, 
VirtQueueElement *elem,
 const uint16_t nb_blocks = le16_to_cpu(req->u.plug.nb_blocks);
 uint16_t type;
 
+trace_virtio_mem_plug_request(gpa, nb_blocks);
 type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, true);
 virtio_mem_send_response_simple(vmem, elem, type);
 }
@@ -206,6 +209,7 @@ static void virtio_mem_unplug_request(VirtIOMEM *vmem, 
VirtQueueElement *elem,
 const uint16_t nb_blocks = le16_to_cpu(req->u.unplug.nb_blocks);
 uint16_t type;
 
+trace_virtio_mem_unplug_request(gpa, nb_blocks);
 type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, false);
 virtio_mem_send_response_simple(vmem, elem, type);
 }
@@ -225,6 +229,7 @@ static void virtio_mem_resize_usable_region(VirtIOMEM *vmem,
 return;
 }
 
+trace_virtio_mem_resized_usable_region(vmem->usable_region_size, newsize);
 vmem->usable_region_size = newsize;
 }
 
@@ -247,7 +252,7 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
 vmem->size = 0;
 notifier_list_notify(>size_change_notifiers, >size);
 }
-
+trace_virtio_mem_unplugged_all();
 virtio_mem_resize_usable_region(vmem, vmem->requested_size, true);
 return 0;
 }
@@ -255,6 +260,7 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
 static void virtio_mem_unplug_all_request(VirtIOMEM *vmem,
   VirtQueueElement *elem)
 {
+trace_virtio_mem_unplug_all_request();
 if (virtio_mem_unplug_all(vmem)) {
 virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_BUSY);
 } else {
@@ -272,6 +278,7 @@ static void virtio_mem_state_request(VirtIOMEM *vmem, 
VirtQueueElement *elem,
 .type = cpu_to_le16(VIRTIO_MEM_RESP_ACK),
 };
 
+trace_virtio_mem_state_request(gpa, nb_blocks);
 if (!virtio_mem_valid_range(vmem, gpa, size)) {
 virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_ERROR);
 return;
@@ -284,6 +291,7 @@ static void virtio_mem_state_request(VirtIOMEM *vmem, 
VirtQueueElement *elem,
 } else {
 resp.u.state.state = cpu_to_le16(VIRTIO_MEM_STATE_MIXED);
 }
+trace_virtio_mem_state_response(le16_to_cpu(resp.u.state.state));
 virtio_mem_send_response(vmem, elem, );
 }
 
-- 
2.26.2