summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Gunthorpe <jgg@nvidia.com>2025-11-07 13:41:38 -0400
committerAlex Williamson <alex@shazbot.org>2025-11-12 15:06:41 -0700
commit56c069307dfd0a5e39b685e0aeee6c40d1d7ddfc (patch)
treec1cba4d47424165c61b1ac71b6836fe135e61c8f
parentdc10734610e29bb6464498e933fc0d622227153d (diff)
vfio: Remove the get_region_info op
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>
-rw-r--r--drivers/vfio/vfio_main.c50
-rw-r--r--include/linux/vfio.h2
2 files changed, 22 insertions, 30 deletions
diff --git a/drivers/vfio/vfio_main.c b/drivers/vfio/vfio_main.c
index 48d034aede46..b8fe1a75e48a 100644
--- a/drivers/vfio/vfio_main.c
+++ b/drivers/vfio/vfio_main.c
@@ -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:
diff --git a/include/linux/vfio.h b/include/linux/vfio.h
index 6311ddc83770..8e1ddb48b9b5 100644
--- a/include/linux/vfio.h
+++ b/include/linux/vfio.h
@@ -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);