virtio-mem: Add trace events

Let's add some trace events that might come in handy later.

Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20200626072248.78761-20-david@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
David Hildenbrand 2020-06-26 09:22:46 +02:00 committed by Michael S. Tsirkin
parent 383ee44555
commit 43e5495027
2 changed files with 19 additions and 1 deletions

View file

@ -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_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_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_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

View file

@ -30,6 +30,7 @@
#include "hw/boards.h" #include "hw/boards.h"
#include "hw/qdev-properties.h" #include "hw/qdev-properties.h"
#include "config-devices.h" #include "config-devices.h"
#include "trace.h"
/* /*
* Use QEMU_VMALLOC_ALIGN, so no THP will have to be split when unplugging * 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); VirtIODevice *vdev = VIRTIO_DEVICE(vmem);
VirtQueue *vq = vmem->vq; 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)); iov_from_buf(elem->in_sg, elem->in_num, 0, resp, sizeof(*resp));
virtqueue_push(vq, elem, 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); const uint16_t nb_blocks = le16_to_cpu(req->u.plug.nb_blocks);
uint16_t type; uint16_t type;
trace_virtio_mem_plug_request(gpa, nb_blocks);
type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, true); type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, true);
virtio_mem_send_response_simple(vmem, elem, type); 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); const uint16_t nb_blocks = le16_to_cpu(req->u.unplug.nb_blocks);
uint16_t type; uint16_t type;
trace_virtio_mem_unplug_request(gpa, nb_blocks);
type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, false); type = virtio_mem_state_change_request(vmem, gpa, nb_blocks, false);
virtio_mem_send_response_simple(vmem, elem, type); virtio_mem_send_response_simple(vmem, elem, type);
} }
@ -225,6 +229,7 @@ static void virtio_mem_resize_usable_region(VirtIOMEM *vmem,
return; return;
} }
trace_virtio_mem_resized_usable_region(vmem->usable_region_size, newsize);
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; vmem->size = 0;
notifier_list_notify(&vmem->size_change_notifiers, &vmem->size); notifier_list_notify(&vmem->size_change_notifiers, &vmem->size);
} }
trace_virtio_mem_unplugged_all();
virtio_mem_resize_usable_region(vmem, vmem->requested_size, true); virtio_mem_resize_usable_region(vmem, vmem->requested_size, true);
return 0; return 0;
} }
@ -255,6 +260,7 @@ static int virtio_mem_unplug_all(VirtIOMEM *vmem)
static void virtio_mem_unplug_all_request(VirtIOMEM *vmem, static void virtio_mem_unplug_all_request(VirtIOMEM *vmem,
VirtQueueElement *elem) VirtQueueElement *elem)
{ {
trace_virtio_mem_unplug_all_request();
if (virtio_mem_unplug_all(vmem)) { if (virtio_mem_unplug_all(vmem)) {
virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_BUSY); virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_BUSY);
} else { } else {
@ -272,6 +278,7 @@ static void virtio_mem_state_request(VirtIOMEM *vmem, VirtQueueElement *elem,
.type = cpu_to_le16(VIRTIO_MEM_RESP_ACK), .type = cpu_to_le16(VIRTIO_MEM_RESP_ACK),
}; };
trace_virtio_mem_state_request(gpa, nb_blocks);
if (!virtio_mem_valid_range(vmem, gpa, size)) { if (!virtio_mem_valid_range(vmem, gpa, size)) {
virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_ERROR); virtio_mem_send_response_simple(vmem, elem, VIRTIO_MEM_RESP_ERROR);
return; return;
@ -284,6 +291,7 @@ static void virtio_mem_state_request(VirtIOMEM *vmem, VirtQueueElement *elem,
} else { } else {
resp.u.state.state = cpu_to_le16(VIRTIO_MEM_STATE_MIXED); 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, &resp); virtio_mem_send_response(vmem, elem, &resp);
} }