summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivek Kasireddy <vivek.kasireddy@intel.com>2025-01-13 23:57:59 -0800
committerDmitry Osipenko <dmitry.osipenko@collabora.com>2025-01-19 15:24:27 +0300
commit6568d423cb3000789b2b8493049883fcec09c329 (patch)
tree15f37005a4f52c4240e41480cccdfc4f49175bc5
parentc03dd019f0b56c40f42fa0e7785eaa109e0bdcd6 (diff)
drm/virtio: Don't return error if virtio-gpu PCI dev is not found
While fixing a shared VGA resource ownership issue, commit 5dd8b536bbda ("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: 5dd8b536bbda ("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> Link: https://patchwork.freedesktop.org/patch/msgid/20250114075759.2616551-1-vivek.kasireddy@intel.com Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250114075759.2616551-1-vivek.kasireddy@intel.com
-rw-r--r--drivers/gpu/drm/virtio/virtgpu_drv.c21
1 files changed, 11 insertions, 10 deletions
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;
}