diff mbox series

drm/virtio: Don't return error if virtio-gpu PCI dev is not found

Message ID 20250114075759.2616551-1-vivek.kasireddy@intel.com (mailing list archive)
State New
Headers show
Series drm/virtio: Don't return error if virtio-gpu PCI dev is not found | expand

Commit Message

Vivek Kasireddy Jan. 14, 2025, 7:57 a.m. UTC
While fixing a shared VGA resource ownership issue, commit 5dd8b536bb
("drm/virtio: Lock the VGA resources during initialization") wrongly
assumed that there is always a PCI device associated with virtio-gpu
and it would return error if this device is not found during init.

This is incorrect, as virtio-gpu can be operated in MMIO mode (M68K)
where a PCI device would probably not be created for it. Therefore,
fix this issue by not erroring out if the associated PCI device is
not found during initialization.

Fixes: 5dd8b536bb ("drm/virtio: Lock the VGA resources during initialization")
Suggested-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
---
 drivers/gpu/drm/virtio/virtgpu_drv.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index d4309dba557b..2d88e390feb4 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -173,23 +173,24 @@  static int __init virtio_gpu_driver_init(void)
 	pdev = pci_get_device(PCI_VENDOR_ID_REDHAT_QUMRANET,
 			      PCI_DEVICE_ID_VIRTIO_GPU,
 			      NULL);
-	if (!pdev)
-		return -ENODEV;
-
-	if (pci_is_vga(pdev)) {
+	if (pdev && pci_is_vga(pdev)) {
 		ret = vga_get_interruptible(pdev,
 			VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM);
-		if (ret)
-			goto error;
+		if (ret) {
+			pci_dev_put(pdev);
+			return ret;
+		}
 	}
 
 	ret = register_virtio_driver(&virtio_gpu_driver);
 
-	if (pci_is_vga(pdev))
-		vga_put(pdev, VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM);
+	if (pdev) {
+		if (pci_is_vga(pdev))
+			vga_put(pdev,
+				VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM);
 
-error:
-	pci_dev_put(pdev);
+		pci_dev_put(pdev);
+	}
 
 	return ret;
 }