]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
vfio/pci: match IGD devices in display controller class
authorTomita Moeko <tomitamoeko@gmail.com>
Thu, 23 Jan 2025 16:34:15 +0000 (00:34 +0800)
committerAlex Williamson <alex.williamson@redhat.com>
Thu, 27 Feb 2025 18:30:07 +0000 (11:30 -0700)
IGD device can either expose as a VGA controller or display controller
depending on whether it is configured as the primary display device in
BIOS. In both cases, the OpRegion may be present. A new helper function
vfio_pci_is_intel_display() is introduced to check if the device might
be an IGD device.

Signed-off-by: Tomita Moeko <tomitamoeko@gmail.com>
Link: https://lore.kernel.org/r/20250123163416.7653-1-tomitamoeko@gmail.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
drivers/vfio/pci/vfio_pci.c
drivers/vfio/pci/vfio_pci_igd.c
drivers/vfio/pci/vfio_pci_priv.h

index e727941f589de5316667ebe451745f5b4b9e6e75..5f169496376af1d8b4c6a8c596569a36d4fa1013 100644 (file)
@@ -111,9 +111,7 @@ static int vfio_pci_open_device(struct vfio_device *core_vdev)
        if (ret)
                return ret;
 
-       if (vfio_pci_is_vga(pdev) &&
-           pdev->vendor == PCI_VENDOR_ID_INTEL &&
-           IS_ENABLED(CONFIG_VFIO_PCI_IGD)) {
+       if (vfio_pci_is_intel_display(pdev)) {
                ret = vfio_pci_igd_init(vdev);
                if (ret && ret != -ENODEV) {
                        pci_warn(pdev, "Failed to setup Intel IGD regions\n");
index dd70e2431bd74271ae932a6509a60857af6c7da5..ef490a4545f4804941e3a21fb2b4c178cfb01913 100644 (file)
@@ -435,6 +435,12 @@ static int vfio_pci_igd_cfg_init(struct vfio_pci_core_device *vdev)
        return 0;
 }
 
+bool vfio_pci_is_intel_display(struct pci_dev *pdev)
+{
+       return (pdev->vendor == PCI_VENDOR_ID_INTEL) &&
+              ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY);
+}
+
 int vfio_pci_igd_init(struct vfio_pci_core_device *vdev)
 {
        int ret;
index 5e4fa69aee16c13966391328440e9353b5e33427..a9972eacb2936b0f580d9f07c120d193f8c360a0 100644 (file)
@@ -67,8 +67,14 @@ void vfio_pci_memory_unlock_and_restore(struct vfio_pci_core_device *vdev,
                                        u16 cmd);
 
 #ifdef CONFIG_VFIO_PCI_IGD
+bool vfio_pci_is_intel_display(struct pci_dev *pdev);
 int vfio_pci_igd_init(struct vfio_pci_core_device *vdev);
 #else
+static inline bool vfio_pci_is_intel_display(struct pci_dev *pdev)
+{
+       return false;
+}
+
 static inline int vfio_pci_igd_init(struct vfio_pci_core_device *vdev)
 {
        return -ENODEV;