Message ID | 20200626072248.78761-20-david@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | virtio-mem: Paravirtualized memory hot(un)plug | expand |
* David Hildenbrand (david@redhat.com) wrote: > 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> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > 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(&vmem->size_change_notifiers, &vmem->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, &resp); > } > > -- > 2.26.2 > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
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(&vmem->size_change_notifiers, &vmem->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, &resp); }
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> --- hw/virtio/trace-events | 10 ++++++++++ hw/virtio/virtio-mem.c | 10 +++++++++- 2 files changed, 19 insertions(+), 1 deletion(-)