vfio: Test kvm pointer in _vfio_device_get_kvm_safe()
authorYi Liu <yi.l.liu@intel.com>
Tue, 18 Jul 2023 13:55:44 +0000 (06:55 -0700)
committerAlex Williamson <alex.williamson@redhat.com>
Tue, 25 Jul 2023 16:19:45 +0000 (10:19 -0600)
This saves some lines when adding the kvm get logic for the vfio_device
cdev path.

This also renames _vfio_device_get_kvm_safe() to be vfio_device_get_kvm_safe().

Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Tested-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Tested-by: Yanting Jiang <yanting.jiang@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Link: https://lore.kernel.org/r/20230718135551.6592-20-yi.l.liu@intel.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/vfio/group.c
drivers/vfio/vfio.h
drivers/vfio/vfio_main.c

index 41a09a2..5c17ad8 100644 (file)
@@ -160,12 +160,7 @@ out_unlock:
 static void vfio_device_group_get_kvm_safe(struct vfio_device *device)
 {
        spin_lock(&device->group->kvm_ref_lock);
-       if (!device->group->kvm)
-               goto unlock;
-
-       _vfio_device_get_kvm_safe(device, device->group->kvm);
-
-unlock:
+       vfio_device_get_kvm_safe(device, device->group->kvm);
        spin_unlock(&device->group->kvm_ref_lock);
 }
 
index fb8f2fa..c2aa653 100644 (file)
@@ -340,11 +340,11 @@ enum { vfio_noiommu = false };
 #endif
 
 #ifdef CONFIG_HAVE_KVM
-void _vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm);
+void vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm);
 void vfio_device_put_kvm(struct vfio_device *device);
 #else
-static inline void _vfio_device_get_kvm_safe(struct vfio_device *device,
-                                            struct kvm *kvm)
+static inline void vfio_device_get_kvm_safe(struct vfio_device *device,
+                                           struct kvm *kvm)
 {
 }
 
index 8a9ebcc..5f7c315 100644 (file)
@@ -373,7 +373,7 @@ void vfio_unregister_group_dev(struct vfio_device *device)
 EXPORT_SYMBOL_GPL(vfio_unregister_group_dev);
 
 #ifdef CONFIG_HAVE_KVM
-void _vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm)
+void vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm)
 {
        void (*pfn)(struct kvm *kvm);
        bool (*fn)(struct kvm *kvm);
@@ -381,6 +381,9 @@ void _vfio_device_get_kvm_safe(struct vfio_device *device, struct kvm *kvm)
 
        lockdep_assert_held(&device->dev_set->lock);
 
+       if (!kvm)
+               return;
+
        pfn = symbol_get(kvm_put_kvm);
        if (WARN_ON(!pfn))
                return;