Commit 6568d423 authored by Vivek Kasireddy's avatar Vivek Kasireddy Committed by Dmitry Osipenko
Browse files

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



While fixing a shared VGA resource ownership issue, commit 5dd8b536
("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: 5dd8b536 ("drm/virtio: Lock the VGA resources during initialization")
Suggested-by: default avatarDmitry 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: default avatarVivek Kasireddy <vivek.kasireddy@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250114075759.2616551-1-vivek.kasireddy@intel.com


Reviewed-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
Signed-off-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250114075759.2616551-1-vivek.kasireddy@intel.com
parent c03dd019
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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 (pdev) {
		if (pci_is_vga(pdev))
		vga_put(pdev, VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM);
			vga_put(pdev,
				VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM);

error:
		pci_dev_put(pdev);
	}

	return ret;
}