Lines Matching refs:vq
42 struct virtqueue *vq; member
138 static bool vq_notify(struct virtqueue *vq) in vq_notify() argument
140 struct vq_info *info = vq->priv; in vq_notify()
180 if (info->vq) in vq_reset()
181 vring_del_virtqueue(info->vq); in vq_reset()
185 info->vq = vring_new_virtqueue(info->idx, num, 4096, vdev, true, false, in vq_reset()
187 assert(info->vq); in vq_reset()
188 info->vq->priv = info; in vq_reset()
257 static void wait_for_interrupt(struct vq_info *vq) in wait_for_interrupt() argument
261 poll(&vq->fds, 1, 100); in wait_for_interrupt()
263 if (vq->fds.revents & POLLIN) in wait_for_interrupt()
264 read(vq->fds.fd, &val, sizeof(val)); in wait_for_interrupt()
275 static void run_tx_test(struct vdev_info *dev, struct vq_info *vq, in run_tx_test() argument
284 long started_before = vq->started; in run_tx_test()
285 long completed_before = vq->completed; in run_tx_test()
287 virtqueue_disable_cb(vq->vq); in run_tx_test()
289 while (vq->started < bufs && in run_tx_test()
290 (vq->started - vq->completed) < 1) { in run_tx_test()
292 r = virtqueue_add_outbuf(vq->vq, &sl, 1, in run_tx_test()
293 dev->test_buf + vq->started, in run_tx_test()
298 ++vq->started; in run_tx_test()
300 if (unlikely(!virtqueue_kick(vq->vq))) { in run_tx_test()
306 if (vq->started >= bufs) in run_tx_test()
310 while (virtqueue_get_buf(vq->vq, &len)) { in run_tx_test()
317 ++vq->completed; in run_tx_test()
322 if (vq->completed == completed_before && vq->started == started_before) in run_tx_test()
325 assert(vq->completed <= bufs); in run_tx_test()
326 assert(vq->started <= bufs); in run_tx_test()
327 if (vq->completed == bufs) in run_tx_test()
331 if (virtqueue_enable_cb_delayed(vq->vq)) in run_tx_test()
332 wait_for_interrupt(vq); in run_tx_test()
334 if (virtqueue_enable_cb(vq->vq)) in run_tx_test()
335 wait_for_interrupt(vq); in run_tx_test()
339 spurious, vq->started, vq->completed); in run_tx_test()
342 static void run_rx_test(struct vdev_info *dev, struct vq_info *vq, in run_rx_test() argument
351 long started_before = vq->started; in run_rx_test()
352 long completed_before = vq->completed; in run_rx_test()
355 while (vq->started < bufs && in run_rx_test()
356 (vq->started - vq->completed) < 1) { in run_rx_test()
359 r = virtqueue_add_inbuf(vq->vq, &sl, 1, in run_rx_test()
360 dev->res_buf + vq->started, in run_rx_test()
365 ++vq->started; in run_rx_test()
369 if (unlikely(!virtqueue_kick(vq->vq))) { in run_rx_test()
375 if (vq->started >= bufs) in run_rx_test()
379 while (virtqueue_get_buf(vq->vq, &len)) { in run_rx_test()
392 ++vq->completed; in run_rx_test()
397 if (vq->completed == completed_before && vq->started == started_before) in run_rx_test()
400 assert(vq->completed <= bufs); in run_rx_test()
401 assert(vq->started <= bufs); in run_rx_test()
402 if (vq->completed == bufs) in run_rx_test()
407 spurious, vq->started, vq->completed); in run_rx_test()