]> www.infradead.org Git - users/hch/misc.git/commitdiff
vfio: Dump migration features under debugfs
authorCédric Le Goater <clg@redhat.com>
Thu, 18 Sep 2025 12:19:28 +0000 (14:19 +0200)
committerAlex Williamson <alex.williamson@redhat.com>
Mon, 6 Oct 2025 17:22:48 +0000 (11:22 -0600)
A debugfs directory was recently added for VFIO devices. Add a new
"features" file under the migration sub-directory to expose which
features the device supports.

Signed-off-by: Cédric Le Goater <clg@redhat.com>
Link: https://lore.kernel.org/r/20250918121928.1921871-1-clg@redhat.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Documentation/ABI/testing/debugfs-vfio
drivers/vfio/debugfs.c

index 90f7c262f591306bdb99295ab4e857ca0e0b537a..70ec2d454686290e13380340dfd6a5a67a642533 100644 (file)
@@ -23,3 +23,9 @@ Contact:      Longfang Liu <liulongfang@huawei.com>
 Description:   Read the live migration status of the vfio device.
                The contents of the state file reflects the migration state
                relative to those defined in the vfio_device_mig_state enum
+
+What:          /sys/kernel/debug/vfio/<device>/migration/features
+Date:          Oct 2025
+KernelVersion: 6.18
+Contact:       Cédric Le Goater <clg@redhat.com>
+Description:   Read the migration features of the vfio device.
index 298bd866f15766b50e342511d8a83f0621cb4f55..8b0ca7a09064072b3d489dab8072dbb1a2871d10 100644 (file)
@@ -58,6 +58,23 @@ static int vfio_device_state_read(struct seq_file *seq, void *data)
        return 0;
 }
 
+static int vfio_device_features_read(struct seq_file *seq, void *data)
+{
+       struct device *vf_dev = seq->private;
+       struct vfio_device *vdev = container_of(vf_dev, struct vfio_device, device);
+
+       if (vdev->migration_flags & VFIO_MIGRATION_STOP_COPY)
+               seq_puts(seq, "stop-copy\n");
+       if (vdev->migration_flags & VFIO_MIGRATION_P2P)
+               seq_puts(seq, "p2p\n");
+       if (vdev->migration_flags & VFIO_MIGRATION_PRE_COPY)
+               seq_puts(seq, "pre-copy\n");
+       if (vdev->log_ops)
+               seq_puts(seq, "dirty-tracking\n");
+
+       return 0;
+}
+
 void vfio_device_debugfs_init(struct vfio_device *vdev)
 {
        struct device *dev = &vdev->device;
@@ -72,6 +89,8 @@ void vfio_device_debugfs_init(struct vfio_device *vdev)
                                                        vdev->debug_root);
                debugfs_create_devm_seqfile(dev, "state", vfio_dev_migration,
                                            vfio_device_state_read);
+               debugfs_create_devm_seqfile(dev, "features", vfio_dev_migration,
+                                           vfio_device_features_read);
        }
 }