]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vfio/pci: Share the core device pointer while invoking feature functions
authorVivek Kasireddy <vivek.kasireddy@intel.com>
Thu, 20 Nov 2025 09:28:27 +0000 (11:28 +0200)
committerAlex Williamson <alex@shazbot.org>
Thu, 20 Nov 2025 19:02:40 +0000 (12:02 -0700)
There is no need to share the main device pointer (struct vfio_device *)
with all the feature functions as they only need the core device
pointer. Therefore, extract the core device pointer once in the
caller (vfio_pci_core_ioctl_feature) and share it instead.

Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Tested-by: Alex Mastro <amastro@fb.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Acked-by: Ankit Agrawal <ankita@nvidia.com>
Link: https://lore.kernel.org/r/20251120-dmabuf-vfio-v9-8-d7f71607f371@nvidia.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
drivers/vfio/pci/vfio_pci_core.c

index 7dcf5439dedc9df1dad5d37c5f89c4de46b31789..ca9a95716a852875343d1ce45dd64a7648612cf1 100644 (file)
@@ -299,11 +299,9 @@ static int vfio_pci_runtime_pm_entry(struct vfio_pci_core_device *vdev,
        return 0;
 }
 
-static int vfio_pci_core_pm_entry(struct vfio_device *device, u32 flags,
+static int vfio_pci_core_pm_entry(struct vfio_pci_core_device *vdev, u32 flags,
                                  void __user *arg, size_t argsz)
 {
-       struct vfio_pci_core_device *vdev =
-               container_of(device, struct vfio_pci_core_device, vdev);
        int ret;
 
        ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET, 0);
@@ -320,12 +318,10 @@ static int vfio_pci_core_pm_entry(struct vfio_device *device, u32 flags,
 }
 
 static int vfio_pci_core_pm_entry_with_wakeup(
-       struct vfio_device *device, u32 flags,
+       struct vfio_pci_core_device *vdev, u32 flags,
        struct vfio_device_low_power_entry_with_wakeup __user *arg,
        size_t argsz)
 {
-       struct vfio_pci_core_device *vdev =
-               container_of(device, struct vfio_pci_core_device, vdev);
        struct vfio_device_low_power_entry_with_wakeup entry;
        struct eventfd_ctx *efdctx;
        int ret;
@@ -376,11 +372,9 @@ static void vfio_pci_runtime_pm_exit(struct vfio_pci_core_device *vdev)
        up_write(&vdev->memory_lock);
 }
 
-static int vfio_pci_core_pm_exit(struct vfio_device *device, u32 flags,
+static int vfio_pci_core_pm_exit(struct vfio_pci_core_device *vdev, u32 flags,
                                 void __user *arg, size_t argsz)
 {
-       struct vfio_pci_core_device *vdev =
-               container_of(device, struct vfio_pci_core_device, vdev);
        int ret;
 
        ret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET, 0);
@@ -1473,11 +1467,10 @@ long vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd,
 }
 EXPORT_SYMBOL_GPL(vfio_pci_core_ioctl);
 
-static int vfio_pci_core_feature_token(struct vfio_device *device, u32 flags,
-                                      uuid_t __user *arg, size_t argsz)
+static int vfio_pci_core_feature_token(struct vfio_pci_core_device *vdev,
+                                      u32 flags, uuid_t __user *arg,
+                                      size_t argsz)
 {
-       struct vfio_pci_core_device *vdev =
-               container_of(device, struct vfio_pci_core_device, vdev);
        uuid_t uuid;
        int ret;
 
@@ -1504,16 +1497,19 @@ static int vfio_pci_core_feature_token(struct vfio_device *device, u32 flags,
 int vfio_pci_core_ioctl_feature(struct vfio_device *device, u32 flags,
                                void __user *arg, size_t argsz)
 {
+       struct vfio_pci_core_device *vdev =
+               container_of(device, struct vfio_pci_core_device, vdev);
+
        switch (flags & VFIO_DEVICE_FEATURE_MASK) {
        case VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY:
-               return vfio_pci_core_pm_entry(device, flags, arg, argsz);
+               return vfio_pci_core_pm_entry(vdev, flags, arg, argsz);
        case VFIO_DEVICE_FEATURE_LOW_POWER_ENTRY_WITH_WAKEUP:
-               return vfio_pci_core_pm_entry_with_wakeup(device, flags,
+               return vfio_pci_core_pm_entry_with_wakeup(vdev, flags,
                                                          arg, argsz);
        case VFIO_DEVICE_FEATURE_LOW_POWER_EXIT:
-               return vfio_pci_core_pm_exit(device, flags, arg, argsz);
+               return vfio_pci_core_pm_exit(vdev, flags, arg, argsz);
        case VFIO_DEVICE_FEATURE_PCI_VF_TOKEN:
-               return vfio_pci_core_feature_token(device, flags, arg, argsz);
+               return vfio_pci_core_feature_token(vdev, flags, arg, argsz);
        default:
                return -ENOTTY;
        }