Commit 1e736f14 authored by Alex Mastro's avatar Alex Mastro Committed by Alex Williamson
Browse files

vfio/pci: print vfio-device syspath to fdinfo



Print the PCI device syspath to a vfio device's fdinfo. This enables tools
to query which device is associated with a given vfio device fd.

This results in output like below:

$ cat /proc/"$SOME_PID"/fdinfo/"$VFIO_FD" | grep vfio
vfio-device-syspath: /sys/devices/pci0000:e0/0000:e0:01.1/0000:e1:00.0/0000:e2:05.0/0000:e8:00.0

Signed-off-by: default avatarAlex Mastro <amastro@fb.com>
Reviewed-by: default avatarAmit Machhiwal <amachhiw@linux.ibm.com>
Tested-by: default avatarAmit Machhiwal <amachhiw@linux.ibm.com>
Link: https://lore.kernel.org/r/20250804-show-fdinfo-v4-1-96b14c5691b3@fb.com


Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 1b237f19
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -2166,6 +2166,20 @@ DMA Buffer files
where 'size' is the size of the DMA buffer in bytes. 'count' is the file count of
the DMA buffer file. 'exp_name' is the name of the DMA buffer exporter.

VFIO Device files
~~~~~~~~~~~~~~~~

::

	pos:    0
	flags:  02000002
	mnt_id: 17
	ino:    5122
	vfio-device-syspath: /sys/devices/pci0000:e0/0000:e0:01.1/0000:e1:00.0/0000:e2:05.0/0000:e8:00.0

where 'vfio-device-syspath' is the sysfs path corresponding to the VFIO device
file.

3.9	/proc/<pid>/map_files - Information about memory mapped files
---------------------------------------------------------------------
This directory contains symbolic links which represent memory mapped files
+20 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <linux/pseudo_fs.h>
#include <linux/rwsem.h>
#include <linux/sched.h>
#include <linux/seq_file.h>
#include <linux/slab.h>
#include <linux/stat.h>
#include <linux/string.h>
@@ -1355,6 +1356,22 @@ static int vfio_device_fops_mmap(struct file *filep, struct vm_area_struct *vma)
	return device->ops->mmap(device, vma);
}

#ifdef CONFIG_PROC_FS
static void vfio_device_show_fdinfo(struct seq_file *m, struct file *filep)
{
	char *path;
	struct vfio_device_file *df = filep->private_data;
	struct vfio_device *device = df->device;

	path = kobject_get_path(&device->dev->kobj, GFP_KERNEL);
	if (!path)
		return;

	seq_printf(m, "vfio-device-syspath: /sys%s\n", path);
	kfree(path);
}
#endif

const struct file_operations vfio_device_fops = {
	.owner		= THIS_MODULE,
	.open		= vfio_device_fops_cdev_open,
@@ -1364,6 +1381,9 @@ const struct file_operations vfio_device_fops = {
	.unlocked_ioctl	= vfio_device_fops_unl_ioctl,
	.compat_ioctl	= compat_ptr_ioctl,
	.mmap		= vfio_device_fops_mmap,
#ifdef CONFIG_PROC_FS
	.show_fdinfo	= vfio_device_show_fdinfo,
#endif
};

static struct vfio_device *vfio_device_from_file(struct file *file)