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.osipe...@collabora.com>
Cc: Gerd Hoffmann <kra...@redhat.com>
Cc: Gurchetan Singh <gurchetansi...@chromium.org>
Cc: Chia-I Wu <olva...@gmail.com>
Signed-off-by: Vivek Kasireddy <vivek.kasire...@intel.com>
---
 drivers/gpu/drm/virtio/virtgpu_drv.c | 21 +++++++++++----------
 1 file 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;
 }
-- 
2.47.1

Reply via email to