]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vfio: Remove the get_region_info op
authorJason Gunthorpe <jgg@nvidia.com>
Fri, 7 Nov 2025 17:41:38 +0000 (13:41 -0400)
committerAlex Williamson <alex@shazbot.org>
Wed, 12 Nov 2025 22:06:41 +0000 (15:06 -0700)
No driver uses it now, all are using get_region_info_caps().

Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/22-v2-2a9e24d62f1b+e10a-vfio_get_region_info_op_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
drivers/vfio/vfio_main.c
include/linux/vfio.h

index 48d034aede46fc609d69503239dc5a40cce2df31..b8fe1a75e48a0b35938018fb6b03edd91e35cec2 100644 (file)
@@ -1267,42 +1267,36 @@ static long vfio_get_region_info(struct vfio_device *device,
        struct vfio_info_cap caps = {};
        int ret;
 
+       if (unlikely(!device->ops->get_region_info_caps))
+               return -EINVAL;
+
        if (copy_from_user(&info, arg, minsz))
                return -EFAULT;
        if (info.argsz < minsz)
                return -EINVAL;
 
-       if (device->ops->get_region_info_caps) {
-               ret = device->ops->get_region_info_caps(device, &info, &caps);
-               if (ret)
-                       goto out_free;
-
-               if (caps.size) {
-                       info.flags |= VFIO_REGION_INFO_FLAG_CAPS;
-                       if (info.argsz < sizeof(info) + caps.size) {
-                               info.argsz = sizeof(info) + caps.size;
-                               info.cap_offset = 0;
-                       } else {
-                               vfio_info_cap_shift(&caps, sizeof(info));
-                               if (copy_to_user(arg + 1, caps.buf,
-                                                caps.size)) {
-                                       ret = -EFAULT;
-                                       goto out_free;
-                               }
-                               info.cap_offset = sizeof(info);
+       ret = device->ops->get_region_info_caps(device, &info, &caps);
+       if (ret)
+               goto out_free;
+
+       if (caps.size) {
+               info.flags |= VFIO_REGION_INFO_FLAG_CAPS;
+               if (info.argsz < sizeof(info) + caps.size) {
+                       info.argsz = sizeof(info) + caps.size;
+                       info.cap_offset = 0;
+               } else {
+                       vfio_info_cap_shift(&caps, sizeof(info));
+                       if (copy_to_user(arg + 1, caps.buf, caps.size)) {
+                               ret = -EFAULT;
+                               goto out_free;
                        }
+                       info.cap_offset = sizeof(info);
                }
+       }
 
-               if (copy_to_user(arg, &info, minsz)) {
-                       ret = -EFAULT;
-                       goto out_free;
-               }
-       } else if (device->ops->get_region_info) {
-               ret = device->ops->get_region_info(device, arg);
-               if (ret)
-                       return ret;
-       } else {
-               return -EINVAL;
+       if (copy_to_user(arg, &info, minsz)){
+               ret = -EFAULT;
+               goto out_free;
        }
 
 out_free:
index 6311ddc837701d4de51383ddaad4a49b37d65acf..8e1ddb48b9b54e8e53d5cbf682c81fc6c891f273 100644 (file)
@@ -133,8 +133,6 @@ struct vfio_device_ops {
                         size_t count, loff_t *size);
        long    (*ioctl)(struct vfio_device *vdev, unsigned int cmd,
                         unsigned long arg);
-       int     (*get_region_info)(struct vfio_device *vdev,
-                                  struct vfio_region_info __user *arg);
        int     (*get_region_info_caps)(struct vfio_device *vdev,
                                        struct vfio_region_info *info,
                                        struct vfio_info_cap *caps);