Lines Matching defs:vfio
8 * Derived from original vfio:
32 #include <linux/vfio.h>
40 static struct vfio {
49 } vfio;
128 iommu_group_set_name(group, "vfio-noiommu");
145 dev_warn(dev, "Adding kernel taint for vfio-noiommu group on device\n");
199 .name = "vfio-noiommu",
223 mutex_lock(&vfio.iommu_drivers_lock);
226 list_for_each_entry(tmp, &vfio.iommu_drivers_list, vfio_next) {
228 mutex_unlock(&vfio.iommu_drivers_lock);
234 list_add(&driver->vfio_next, &vfio.iommu_drivers_list);
236 mutex_unlock(&vfio.iommu_drivers_lock);
246 mutex_lock(&vfio.iommu_drivers_lock);
247 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) {
250 mutex_unlock(&vfio.iommu_drivers_lock);
255 mutex_unlock(&vfio.iommu_drivers_lock);
260 * Group minor allocation/free - both called with vfio.group_lock held
264 return idr_alloc(&vfio.group_idr, group, 0, MINORMASK + 1, GFP_KERNEL);
269 idr_remove(&vfio.group_idr, minor);
277 * Container objects - containers are created when /dev/vfio/vfio is
302 mutex_unlock(&vfio.group_lock);
305 * that the group is no longer in vfio.group_list.
343 * vfio.group_lock to avoid A-B/B-A contention. Our callback won't
344 * do anything unless it can find the group in vfio.group_list, so
353 mutex_lock(&vfio.group_lock);
356 list_for_each_entry(tmp, &vfio.group_list, vfio_next) {
370 dev = device_create(vfio.class, NULL,
371 MKDEV(MAJOR(vfio.group_devt), minor),
383 list_add(&group->vfio_next, &vfio.group_list);
385 mutex_unlock(&vfio.group_lock);
390 /* called with vfio.group_lock held */
406 device_destroy(vfio.class, MKDEV(MAJOR(vfio.group_devt), group->minor));
415 kref_put_mutex(&group->kref, vfio_group_release, &vfio.group_lock);
460 mutex_lock(&vfio.group_lock);
461 list_for_each_entry(group, &vfio.group_list, vfio_next) {
464 mutex_unlock(&vfio.group_lock);
468 mutex_unlock(&vfio.group_lock);
478 mutex_lock(&vfio.group_lock);
479 list_for_each_entry(group, &vfio.group_list, vfio_next) {
482 mutex_unlock(&vfio.group_lock);
486 mutex_unlock(&vfio.group_lock);
495 mutex_lock(&vfio.group_lock);
496 group = idr_find(&vfio.group_idr, minor);
498 mutex_unlock(&vfio.group_lock);
502 mutex_unlock(&vfio.group_lock);
587 * A vfio group is viable for use by userspace if all devices are in
590 * - bound to a vfio driver
594 * We use two methods to determine whether a device is bound to a vfio
595 * driver. The first is to test whether the device exists in the vfio
598 * a vfio driver to driver-less.
685 * vfio sub-driver should block the remove callback until
978 * VFIO base fd, /dev/vfio/vfio
1000 mutex_lock(&vfio.iommu_drivers_lock);
1001 list_for_each_entry(driver, &vfio.iommu_drivers_list,
1021 mutex_unlock(&vfio.iommu_drivers_lock);
1078 mutex_lock(&vfio.iommu_drivers_lock);
1079 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) {
1084 * Only noiommu containers can use vfio-noiommu and noiommu
1085 * containers can only use vfio-noiommu.
1125 mutex_unlock(&vfio.iommu_drivers_lock);
1250 * VFIO Group fd, /dev/vfio/$GROUP
1429 filep = anon_inode_getfile("[vfio-device]", &vfio_device_fops,
1451 dev_warn(device->dev, "vfio-noiommu device opened by user "
2047 * @group [in] : vfio group
2300 return kasprintf(GFP_KERNEL, "vfio/%s", dev_name(dev));
2305 .name = "vfio",
2307 .nodename = "vfio/vfio",
2315 idr_init(&vfio.group_idr);
2316 mutex_init(&vfio.group_lock);
2317 mutex_init(&vfio.iommu_drivers_lock);
2318 INIT_LIST_HEAD(&vfio.group_list);
2319 INIT_LIST_HEAD(&vfio.iommu_drivers_list);
2323 pr_err("vfio: misc device register failed\n");
2327 /* /dev/vfio/$GROUP */
2328 vfio.class = class_create(THIS_MODULE, "vfio");
2329 if (IS_ERR(vfio.class)) {
2330 ret = PTR_ERR(vfio.class);
2334 vfio.class->devnode = vfio_devnode;
2336 ret = alloc_chrdev_region(&vfio.group_devt, 0, MINORMASK + 1, "vfio");
2340 cdev_init(&vfio.group_cdev, &vfio_group_fops);
2341 ret = cdev_add(&vfio.group_cdev, vfio.group_devt, MINORMASK + 1);
2353 unregister_chrdev_region(vfio.group_devt, MINORMASK + 1);
2355 class_destroy(vfio.class);
2356 vfio.class = NULL;
2364 WARN_ON(!list_empty(&vfio.group_list));
2369 idr_destroy(&vfio.group_idr);
2370 cdev_del(&vfio.group_cdev);
2371 unregister_chrdev_region(vfio.group_devt, MINORMASK + 1);
2372 class_destroy(vfio.class);
2373 vfio.class = NULL;
2385 MODULE_ALIAS("devname:vfio/vfio");