diff --git a/sys/dev/virtio/virtqueue.c b/sys/dev/virtio/virtqueue.c --- a/sys/dev/virtio/virtqueue.c +++ b/sys/dev/virtio/virtqueue.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -137,6 +138,11 @@ static void vq_ring_notify_host(struct virtqueue *); static void vq_ring_free_chain(struct virtqueue *, uint16_t); +SDT_PROVIDER_DEFINE(virtqueue); +SDT_PROBE_DEFINE6(virtqueue, , enqueue_segments, entry, "struct virtqueue *", + "struct vring_desc *", "uint16_t", "struct sglist *", "int", "int"); +SDT_PROBE_DEFINE1(virtqueue, , enqueue_segments, return, "uint16_t"); + #define vq_modern(_vq) (((_vq)->vq_flags & VIRTQUEUE_FLAG_MODERN) != 0) #define vq_htog16(_vq, _val) virtio_htog16(vq_modern(_vq), _val) #define vq_htog32(_vq, _val) virtio_htog32(vq_modern(_vq), _val) @@ -703,6 +709,9 @@ int i, needed; uint16_t idx; + SDT_PROBE6(virtqueue, , enqueue_segments, entry, vq, desc, head_idx, + sg, readable, writable); + needed = readable + writable; for (i = 0, idx = head_idx, seg = sg->sg_segs; @@ -722,6 +731,7 @@ dp->flags |= vq_gtoh16(vq, VRING_DESC_F_WRITE); } + SDT_PROBE1(virtqueue, , enqueue_segments, return, idx); return (idx); }