Lines Matching refs:vdev

35 int vhost_kernel_ioctl(struct vhost_dev *vdev,  in vhost_kernel_ioctl()  argument
41 rc = ioctl(vdev->fd, request, arg); in vhost_kernel_ioctl()
45 vdev->fd, request, rc, errno); in vhost_kernel_ioctl()
50 vhost_kernel_init(struct vhost_dev *vdev, struct virtio_base *base, in vhost_kernel_init() argument
53 vdev->base = base; in vhost_kernel_init()
54 vdev->fd = fd; in vhost_kernel_init()
55 vdev->vq_idx = vq_idx; in vhost_kernel_init()
56 vdev->busyloop_timeout = busyloop_timeout; in vhost_kernel_init()
60 vhost_kernel_deinit(struct vhost_dev *vdev) in vhost_kernel_deinit() argument
62 vdev->base = NULL; in vhost_kernel_deinit()
63 vdev->vq_idx = 0; in vhost_kernel_deinit()
64 vdev->busyloop_timeout = 0; in vhost_kernel_deinit()
65 if (vdev->fd > 0) { in vhost_kernel_deinit()
66 close(vdev->fd); in vhost_kernel_deinit()
67 vdev->fd = -1; in vhost_kernel_deinit()
72 vhost_kernel_set_mem_table(struct vhost_dev *vdev, in vhost_kernel_set_mem_table() argument
75 return vhost_kernel_ioctl(vdev, VHOST_SET_MEM_TABLE, mem); in vhost_kernel_set_mem_table()
79 vhost_kernel_set_vring_addr(struct vhost_dev *vdev, in vhost_kernel_set_vring_addr() argument
82 return vhost_kernel_ioctl(vdev, VHOST_SET_VRING_ADDR, addr); in vhost_kernel_set_vring_addr()
86 vhost_kernel_set_vring_num(struct vhost_dev *vdev, in vhost_kernel_set_vring_num() argument
89 return vhost_kernel_ioctl(vdev, VHOST_SET_VRING_NUM, ring); in vhost_kernel_set_vring_num()
93 vhost_kernel_set_vring_base(struct vhost_dev *vdev, in vhost_kernel_set_vring_base() argument
96 return vhost_kernel_ioctl(vdev, VHOST_SET_VRING_BASE, ring); in vhost_kernel_set_vring_base()
100 vhost_kernel_get_vring_base(struct vhost_dev *vdev, in vhost_kernel_get_vring_base() argument
103 return vhost_kernel_ioctl(vdev, VHOST_GET_VRING_BASE, ring); in vhost_kernel_get_vring_base()
107 vhost_kernel_set_vring_kick(struct vhost_dev *vdev, in vhost_kernel_set_vring_kick() argument
110 return vhost_kernel_ioctl(vdev, VHOST_SET_VRING_KICK, file); in vhost_kernel_set_vring_kick()
114 vhost_kernel_set_vring_call(struct vhost_dev *vdev, in vhost_kernel_set_vring_call() argument
117 return vhost_kernel_ioctl(vdev, VHOST_SET_VRING_CALL, file); in vhost_kernel_set_vring_call()
121 vhost_kernel_set_vring_busyloop_timeout(struct vhost_dev *vdev, in vhost_kernel_set_vring_busyloop_timeout() argument
125 return vhost_kernel_ioctl(vdev, VHOST_SET_VRING_BUSYLOOP_TIMEOUT, s); in vhost_kernel_set_vring_busyloop_timeout()
132 vhost_kernel_set_features(struct vhost_dev *vdev, in vhost_kernel_set_features() argument
135 return vhost_kernel_ioctl(vdev, VHOST_SET_FEATURES, &features); in vhost_kernel_set_features()
139 vhost_kernel_get_features(struct vhost_dev *vdev, in vhost_kernel_get_features() argument
142 return vhost_kernel_ioctl(vdev, VHOST_GET_FEATURES, features); in vhost_kernel_get_features()
146 vhost_kernel_set_owner(struct vhost_dev *vdev) in vhost_kernel_set_owner() argument
148 return vhost_kernel_ioctl(vdev, VHOST_SET_OWNER, NULL); in vhost_kernel_set_owner()
152 vhost_kernel_reset_device(struct vhost_dev *vdev) in vhost_kernel_reset_device() argument
154 return vhost_kernel_ioctl(vdev, VHOST_RESET_OWNER, NULL); in vhost_kernel_reset_device()
176 vhost_vq_register_eventfd(struct vhost_dev *vdev, in vhost_vq_register_eventfd() argument
191 base = vdev->base; in vhost_vq_register_eventfd()
192 vqi = &vdev->base->queues[vdev->vq_idx + idx]; in vhost_vq_register_eventfd()
193 vq = &vdev->vqs[idx]; in vhost_vq_register_eventfd()
201 mte = &vdev->base->dev->msix.table[vqi->msix_idx]; in vhost_vq_register_eventfd()
208 rc = vm_irqfd(vdev->base->dev->vmctx, &irqfd); in vhost_vq_register_eventfd()
214 vm_ioeventfd(vdev->base->dev->vmctx, &ioeventfd); in vhost_vq_register_eventfd()
223 vhost_vq_init(struct vhost_dev *vdev, int idx) in vhost_vq_init() argument
227 if (!vdev || !vdev->vqs) in vhost_vq_init()
230 vq = &vdev->vqs[idx]; in vhost_vq_init()
247 vq->dev = vdev; in vhost_vq_init()
279 vhost_vq_start(struct vhost_dev *vdev, int idx) in vhost_vq_start() argument
289 if (!vdev->base || !vdev->base->queues || !vdev->base->vops || in vhost_vq_start()
290 !vdev->vqs) { in vhost_vq_start()
304 q_idx = idx + vdev->vq_idx; in vhost_vq_start()
305 if (q_idx >= vdev->base->vops->nvq) { in vhost_vq_start()
307 idx, vdev->vq_idx); in vhost_vq_start()
310 vqi = &vdev->base->queues[q_idx]; in vhost_vq_start()
311 vq = &vdev->vqs[idx]; in vhost_vq_start()
318 rc = vhost_vq_register_eventfd(vdev, idx, true); in vhost_vq_start()
327 rc = vhost_kernel_set_vring_num(vdev, &ring); in vhost_vq_start()
335 rc = vhost_kernel_set_vring_base(vdev, &ring); in vhost_vq_start()
349 rc = vhost_kernel_set_vring_addr(vdev, &addr); in vhost_vq_start()
358 rc = vhost_kernel_set_vring_call(vdev, &file); in vhost_vq_start()
367 rc = vhost_kernel_set_vring_kick(vdev, &file); in vhost_vq_start()
378 vhost_kernel_set_vring_call(vdev, &file); in vhost_vq_start()
380 vhost_vq_register_eventfd(vdev, idx, false); in vhost_vq_start()
386 vhost_vq_stop(struct vhost_dev *vdev, int idx) in vhost_vq_stop() argument
394 if (!vdev->base || !vdev->base->queues || !vdev->base->vops || in vhost_vq_stop()
395 !vdev->vqs) { in vhost_vq_stop()
400 q_idx = idx + vdev->vq_idx; in vhost_vq_stop()
401 if (q_idx >= vdev->base->vops->nvq) { in vhost_vq_stop()
403 idx, vdev->vq_idx); in vhost_vq_stop()
406 vqi = &vdev->base->queues[q_idx]; in vhost_vq_stop()
412 vhost_kernel_set_vring_kick(vdev, &file); in vhost_vq_stop()
415 vhost_kernel_set_vring_call(vdev, &file); in vhost_vq_stop()
419 rc = vhost_kernel_get_vring_base(vdev, &ring); in vhost_vq_stop()
429 rc = vhost_vq_register_eventfd(vdev, idx, false); in vhost_vq_stop()
437 vhost_set_mem_table(struct vhost_dev *vdev) in vhost_set_mem_table() argument
444 ctx = vdev->base->dev->vmctx; in vhost_set_mem_table()
486 rc = vhost_kernel_set_mem_table(vdev, mem); in vhost_set_mem_table()
513 vhost_dev_init(struct vhost_dev *vdev, in vhost_dev_init() argument
530 if (!vdev->vqs || vdev->nvqs == 0) { in vhost_dev_init()
535 if (vq_idx + vdev->nvqs > base->vops->nvq) { in vhost_dev_init()
540 vhost_kernel_init(vdev, base, fd, vq_idx, busyloop_timeout); in vhost_dev_init()
542 rc = vhost_kernel_get_features(vdev, &features); in vhost_dev_init()
548 for (i = 0; i < vdev->nvqs; i++) { in vhost_dev_init()
549 rc = vhost_vq_init(vdev, i); in vhost_dev_init()
555 vdev->vhost_ext_features = vhost_ext_features & features; in vhost_dev_init()
558 vdev->vhost_features = vhost_features & features; in vhost_dev_init()
566 vdev->base->device_caps &= ~(vhost_features ^ features); in vhost_dev_init()
567 vdev->started = false; in vhost_dev_init()
572 vhost_dev_deinit(vdev); in vhost_dev_init()
586 vhost_dev_deinit(struct vhost_dev *vdev) in vhost_dev_deinit() argument
590 if (!vdev->base || !vdev->base->queues || !vdev->base->vops) in vhost_dev_deinit()
593 for (i = 0; i < vdev->nvqs; i++) in vhost_dev_deinit()
594 vhost_vq_deinit(&vdev->vqs[i]); in vhost_dev_deinit()
596 vhost_kernel_deinit(vdev); in vhost_dev_deinit()
611 vhost_dev_start(struct vhost_dev *vdev) in vhost_dev_start() argument
617 if (vdev->started) in vhost_dev_start()
621 if (!vdev->base || !vdev->base->queues || !vdev->base->vops) { in vhost_dev_start()
626 if ((vdev->base->status & VIRTIO_CONFIG_S_DRIVER_OK) == 0) { in vhost_dev_start()
627 WPRINTF("status error 0x%x\n", vdev->base->status); in vhost_dev_start()
632 if (!pci_msix_enabled(vdev->base->dev)) { in vhost_dev_start()
637 rc = vhost_kernel_set_owner(vdev); in vhost_dev_start()
644 features = (vdev->base->negotiated_caps & vdev->vhost_features) | in vhost_dev_start()
645 vdev->vhost_ext_features; in vhost_dev_start()
646 rc = vhost_kernel_set_features(vdev, features); in vhost_dev_start()
654 rc = vhost_set_mem_table(vdev); in vhost_dev_start()
661 if (vdev->busyloop_timeout) { in vhost_dev_start()
662 state.num = vdev->busyloop_timeout; in vhost_dev_start()
663 for (i = 0; i < vdev->nvqs; i++) { in vhost_dev_start()
665 rc = vhost_kernel_set_vring_busyloop_timeout(vdev, in vhost_dev_start()
675 for (i = 0; i < vdev->nvqs; i++) { in vhost_dev_start()
676 rc = vhost_vq_start(vdev, i); in vhost_dev_start()
681 vdev->started = true; in vhost_dev_start()
686 vhost_vq_stop(vdev, i); in vhost_dev_start()
701 vhost_dev_stop(struct vhost_dev *vdev) in vhost_dev_stop() argument
705 for (i = 0; i < vdev->nvqs; i++) in vhost_dev_stop()
706 vhost_vq_stop(vdev, i); in vhost_dev_stop()
712 rc = vhost_kernel_reset_device(vdev); in vhost_dev_stop()
718 vdev->started = false; in vhost_dev_stop()