Lines Matching refs:ioeventfd

361 static void vfio_pci_ioeventfd_do_write(struct vfio_pci_ioeventfd *ioeventfd,
364 switch (ioeventfd->count) {
366 vfio_pci_iowrite8(ioeventfd->vdev, test_mem,
367 ioeventfd->data, ioeventfd->addr);
370 vfio_pci_iowrite16(ioeventfd->vdev, test_mem,
371 ioeventfd->data, ioeventfd->addr);
374 vfio_pci_iowrite32(ioeventfd->vdev, test_mem,
375 ioeventfd->data, ioeventfd->addr);
379 vfio_pci_iowrite64(ioeventfd->vdev, test_mem,
380 ioeventfd->data, ioeventfd->addr);
388 struct vfio_pci_ioeventfd *ioeventfd = opaque;
389 struct vfio_pci_core_device *vdev = ioeventfd->vdev;
391 if (ioeventfd->test_mem) {
400 vfio_pci_ioeventfd_do_write(ioeventfd, false);
402 if (ioeventfd->test_mem)
410 struct vfio_pci_ioeventfd *ioeventfd = opaque;
412 vfio_pci_ioeventfd_do_write(ioeventfd, ioeventfd->test_mem);
421 struct vfio_pci_ioeventfd *ioeventfd;
447 list_for_each_entry(ioeventfd, &vdev->ioeventfds_list, next) {
448 if (ioeventfd->pos == pos && ioeventfd->bar == bar &&
449 ioeventfd->data == data && ioeventfd->count == count) {
451 vfio_virqfd_disable(&ioeventfd->virqfd);
452 list_del(&ioeventfd->next);
454 kfree(ioeventfd);
473 ioeventfd = kzalloc(sizeof(*ioeventfd), GFP_KERNEL_ACCOUNT);
474 if (!ioeventfd) {
479 ioeventfd->vdev = vdev;
480 ioeventfd->addr = vdev->barmap[bar] + pos;
481 ioeventfd->data = data;
482 ioeventfd->pos = pos;
483 ioeventfd->bar = bar;
484 ioeventfd->count = count;
485 ioeventfd->test_mem = vdev->pdev->resource[bar].flags & IORESOURCE_MEM;
487 ret = vfio_virqfd_enable(ioeventfd, vfio_pci_ioeventfd_handler,
489 &ioeventfd->virqfd, fd);
491 kfree(ioeventfd);
495 list_add(&ioeventfd->next, &vdev->ioeventfds_list);