Lines Matching refs:ioeventfd
1220 struct privcmd_kernel_ioreq *alloc_ioreq(struct privcmd_ioeventfd *ioeventfd) in alloc_ioreq() argument
1231 size = struct_size(kioreq, ports, ioeventfd->vcpus); in alloc_ioreq()
1236 kioreq->dom = ioeventfd->dom; in alloc_ioreq()
1237 kioreq->vcpus = ioeventfd->vcpus; in alloc_ioreq()
1238 kioreq->uioreq = ioeventfd->ioreq; in alloc_ioreq()
1244 vma = find_vma(mm, (unsigned long)ioeventfd->ioreq); in alloc_ioreq()
1256 ports = memdup_array_user(u64_to_user_ptr(ioeventfd->ports), in alloc_ioreq()
1292 get_ioreq(struct privcmd_ioeventfd *ioeventfd, struct eventfd_ctx *eventfd) in get_ioreq() argument
1304 if (kioreq->uioreq != ioeventfd->ioreq) { in get_ioreq()
1306 } else if (kioreq->dom != ioeventfd->dom || in get_ioreq()
1307 kioreq->vcpus != ioeventfd->vcpus) { in get_ioreq()
1309 kioreq->dom, ioeventfd->dom, kioreq->vcpus, in get_ioreq()
1310 ioeventfd->vcpus); in get_ioreq()
1328 return alloc_ioreq(ioeventfd); in get_ioreq()
1338 static int privcmd_ioeventfd_assign(struct privcmd_ioeventfd *ioeventfd) in privcmd_ioeventfd_assign() argument
1346 if (ioeventfd->addr + ioeventfd->addr_len < ioeventfd->addr) in privcmd_ioeventfd_assign()
1350 if (!(ioeventfd->addr_len == 1 || ioeventfd->addr_len == 2 || in privcmd_ioeventfd_assign()
1351 ioeventfd->addr_len == 4 || ioeventfd->addr_len == 8)) in privcmd_ioeventfd_assign()
1355 if (!ioeventfd->vcpus || ioeventfd->vcpus > 4096) in privcmd_ioeventfd_assign()
1362 kioeventfd->eventfd = eventfd_ctx_fdget(ioeventfd->event_fd); in privcmd_ioeventfd_assign()
1368 kioeventfd->addr = ioeventfd->addr; in privcmd_ioeventfd_assign()
1369 kioeventfd->addr_len = ioeventfd->addr_len; in privcmd_ioeventfd_assign()
1370 kioeventfd->vq = ioeventfd->vq; in privcmd_ioeventfd_assign()
1373 kioreq = get_ioreq(ioeventfd, kioeventfd->eventfd); in privcmd_ioeventfd_assign()
1396 static int privcmd_ioeventfd_deassign(struct privcmd_ioeventfd *ioeventfd) in privcmd_ioeventfd_deassign() argument
1403 eventfd = eventfd_ctx_fdget(ioeventfd->event_fd); in privcmd_ioeventfd_deassign()
1414 if (kioreq->dom != ioeventfd->dom || in privcmd_ioeventfd_deassign()
1415 kioreq->uioreq != ioeventfd->ioreq || in privcmd_ioeventfd_deassign()
1416 kioreq->vcpus != ioeventfd->vcpus) in privcmd_ioeventfd_deassign()
1435 ioeventfd->dom, ioeventfd->addr); in privcmd_ioeventfd_deassign()
1448 struct privcmd_ioeventfd ioeventfd; in privcmd_ioctl_ioeventfd() local
1450 if (copy_from_user(&ioeventfd, udata, sizeof(ioeventfd))) in privcmd_ioctl_ioeventfd()
1454 if (ioeventfd.flags & ~PRIVCMD_IOEVENTFD_FLAG_DEASSIGN) in privcmd_ioctl_ioeventfd()
1458 if (data->domid != DOMID_INVALID && data->domid != ioeventfd.dom) in privcmd_ioctl_ioeventfd()
1461 if (ioeventfd.flags & PRIVCMD_IOEVENTFD_FLAG_DEASSIGN) in privcmd_ioctl_ioeventfd()
1462 return privcmd_ioeventfd_deassign(&ioeventfd); in privcmd_ioctl_ioeventfd()
1464 return privcmd_ioeventfd_assign(&ioeventfd); in privcmd_ioctl_ioeventfd()