mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alex Williamson <alex@shazbot.org>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: Simon Song <xinmengs@nvidia.com>,
	dakr@kernel.org, acourbot@nvidia.com, yishaih@nvidia.com,
	skolothumtho@nvidia.com, kevin.tian@intel.com,
	jhubbard@nvidia.com, ecourtney@nvidia.com, cjia@nvidia.com,
	smitra@nvidia.com, kjaju@nvidia.com, alkumar@nvidia.com,
	ankita@nvidia.com, aniketa@nvidia.com, kwankhede@nvidia.com,
	targupta@nvidia.com, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org, zhiwang@kernel.org, zhiw@nvidia.com,
	Alex Williamson <alex.williamson@nvidia.com>,
	alex@shazbot.org
Subject: Re: [PATCH v3 1/1] vfio/pci: Remove the core dependency on driver data
Date: Fri, 9 Oct 2026 15:18:21 -0600	[thread overview]
Message-ID: <20261009151821.461dbefa@shazbot.org> (raw)
In-Reply-To: <20261009192800.GG13920@nvidia.com>

On Fri, 9 Oct 2026 16:28:00 -0300
Jason Gunthorpe <jgg@nvidia.com> wrote:

> On Mon, Oct 05, 2026 at 11:42:36AM -0700, Simon Song wrote:
> > vfio-pci-core currently has runtime functions that interpret pci
> > driver_data as a pointer to vfio_pci_core_device, and enforce vfio
> > variant drivers must set vfio_pci_core_device to their pci driver_data.
> > This constrains variant drivers' private-data layout, including the
> > typed driver data used by the Rust PCI infrastructure.
> > 
> > Add VFIO_PCI_CORE_DEFINE_CALLBACKS marcos to generate wrapper code for
> > each vfio variant driver, update vfio variant drivers to store their
> > private strctures in driver_data and use generated wrapper to pass the
> > vfio core device to helpers.
> > 
> > Select the vga decode callback during vfio_pci_vga_init based on if
> > vfio_vga_disabled, the callback only use pci_dev and does not require
> > driver_data
> > 
> > Assisted-by: LLM
> > Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
> > Suggested-by: Alex Williamson <alex.williamson@nvidia.com>
> > Suggested-by: Danilo Krummrich <dakr@kernel.org>
> > Link: https://lore.kernel.org/all/DLFD2ZDSK9YQ.3A4R66G8UJMD8@kernel.org/
> > Signed-off-by: Simon Song <xinmengs@nvidia.com>
> > ---
> >  .../vfio/pci/hisilicon/hisi_acc_vfio_pci.c    | 27 ++++----
> >  drivers/vfio/pci/ism/main.c                   | 19 +++---
> >  drivers/vfio/pci/mlx5/main.c                  | 13 ++--
> >  drivers/vfio/pci/nvgrace-gpu/main.c           | 19 +++---
> >  drivers/vfio/pci/pds/pci_drv.c                |  8 ++-
> >  drivers/vfio/pci/pds/vfio_dev.c               |  5 +-
> >  drivers/vfio/pci/qat/main.c                   | 12 ++--
> >  drivers/vfio/pci/vfio_pci.c                   | 33 +++++++++-
> >  drivers/vfio/pci/vfio_pci_core.c              | 61 +++++++------------
> >  drivers/vfio/pci/virtio/main.c                |  8 ++-
> >  drivers/vfio/pci/xe/main.c                    |  8 ++-
> >  include/linux/vfio_pci_core.h                 | 41 ++++++++++++-
> >  12 files changed, 159 insertions(+), 95 deletions(-)  
> 
> This looks OK to me, but it probably should have been 3 patches,
> mixing the VGA stuff into all of this (and you have a smart approach)
> is not how upstream likes to see things arranged.

The VGA stuff actually goes away entirely when this is rebased onto
Dave's vgaarb changes in linux-next[1].  All 3 VGA related chunks are
simply dropped.  vga_client_register() takes an opaque pointer, which
then already removes the dependency on the pci_dev drvdata.

To apply, the below 3 chunks are dropped in their entirety.  If this
looks right, please someone double check, I'll apply it.  Thanks,

Alex

[1]https://lore.kernel.org/all/20260922071807.2533884-1-airlied@gmail.com/

diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c
index 362c375a0579..f8ed54841723 100644
--- a/drivers/vfio/pci/vfio_pci_core.c
+++ b/drivers/vfio/pci/vfio_pci_core.c
@@ -153,6 +153,12 @@ static inline void vfio_pci_core_debugfs_init(struct vfio_pci_core_device *vdev)
 }
 #endif /* CONFIG_VFIO_DEBUGFS */
 
+static unsigned int vfio_pci_vga_decode_all(struct pci_dev *pdev, bool single_vga)
+{
+	return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM |
+	       VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
+}
+
 /*
  * Our VGA arbiter participation is limited since we don't know anything
  * about the device itself.  However, if the device is the only VGA device
@@ -161,16 +167,14 @@ static inline void vfio_pci_core_debugfs_init(struct vfio_pci_core_device *vdev)
  * has no way to get to it and routing can be disabled externally at the
  * bridge.
  */
-static unsigned int vfio_pci_set_decode(struct pci_dev *pdev, bool single_vga)
+static unsigned int vfio_pci_vga_decode_novga(struct pci_dev *pdev, bool single_vga)
 {
-	struct vfio_pci_core_device *vdev = dev_get_drvdata(&pdev->dev);
 	struct pci_dev *tmp = NULL;
 	unsigned char max_busnr;
 	unsigned int decodes;
 
-	if (single_vga || !vfio_vga_disabled(vdev) || pci_is_root_bus(pdev->bus))
-		return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM |
-		       VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM;
+	if (single_vga || pci_is_root_bus(pdev->bus))
+		return vfio_pci_vga_decode_all(pdev, single_vga);
 
 	max_busnr = pci_bus_max_busnr(pdev->bus);
 	decodes = VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
@@ -2148,20 +2138,27 @@ static void vfio_pci_vf_uninit(struct vfio_pci_core_device *vdev)
 
 static int vfio_pci_vga_init(struct vfio_pci_core_device *vdev)
 {
+	unsigned int (*set_decode)(struct pci_dev *pdev, bool single_vga);
 	struct pci_dev *pdev = vdev->pdev;
 	int ret;
 
 	if (!vfio_pci_is_vga(pdev))
 		return 0;
 
+	/* VGA access is fixed for the lifetime of this registration. */
+	if (vfio_vga_disabled(vdev))
+		set_decode = vfio_pci_vga_decode_novga;
+	else
+		set_decode = vfio_pci_vga_decode_all;
+
 	ret = aperture_remove_conflicting_pci_devices(pdev, vdev->vdev.ops->name);
 	if (ret)
 		return ret;
 
-	ret = vga_client_register(pdev, vfio_pci_set_decode);
+	ret = vga_client_register(pdev, set_decode);
 	if (ret)
 		return ret;
-	vga_set_legacy_decoding(pdev, vfio_pci_set_decode(pdev, false));
+	vga_set_legacy_decoding(pdev, set_decode(pdev, false));
 	return 0;
 }
 

  reply	other threads:[~2026-10-09 21:18 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-05 18:42 [PATCH v3 0/1] vfio/pci: Give drivers control of PCI driver_data Simon Song
2026-10-05 18:42 ` [PATCH v3 1/1] vfio/pci: Remove the core dependency on driver data Simon Song
2026-10-05 19:21   ` Danilo Krummrich
2026-10-09 19:28   ` Jason Gunthorpe
2026-10-09 21:18     ` Alex Williamson [this message]
2026-10-10 10:41       ` Danilo Krummrich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261009151821.461dbefa@shazbot.org \
    --to=alex@shazbot.org \
    --cc=acourbot@nvidia.com \
    --cc=alex.williamson@nvidia.com \
    --cc=alkumar@nvidia.com \
    --cc=aniketa@nvidia.com \
    --cc=ankita@nvidia.com \
    --cc=cjia@nvidia.com \
    --cc=dakr@kernel.org \
    --cc=ecourtney@nvidia.com \
    --cc=jgg@nvidia.com \
    --cc=jhubbard@nvidia.com \
    --cc=kevin.tian@intel.com \
    --cc=kjaju@nvidia.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=skolothumtho@nvidia.com \
    --cc=smitra@nvidia.com \
    --cc=targupta@nvidia.com \
    --cc=xinmengs@nvidia.com \
    --cc=yishaih@nvidia.com \
    --cc=zhiw@nvidia.com \
    --cc=zhiwang@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®