Commit 3245ff58 authored by Laszlo Ersek's avatar Laszlo Ersek Committed by Greg Kroah-Hartman

drm: virtio: reinstate drm_virtio_set_busid()

commit c2cbc38b9715bd8318062e600668fc30e5a3fbfa upstream.

Before commit a3257256 ("drm: Lobotomize set_busid nonsense for !pci
drivers"), several DRM drivers for platform devices used to expose an
explicit "drm_driver.set_busid" callback, invariably backed by

Commit a3257256 removed drm_platform_set_busid(), along with the
referring .set_busid field initializations. This was justified because
interchangeable functionality had been implemented in drm_dev_alloc() /
drm_dev_init(), which DRM_IOCTL_SET_VERSION would rely on going forward.

However, commit a3257256 also removed drm_virtio_set_busid(), for
which the same consolidation was not appropriate: this .set_busid callback
had been implemented with drm_pci_set_busid(), and not
drm_platform_set_busid(). The error regressed Xorg/xserver on QEMU's
"virtio-vga" card; the drmGetBusid() function from libdrm would no longer
return stable PCI identifiers like "pci:0000:00:02.0", but rather unstable
platform ones like "virtio0".

Reinstate drm_virtio_set_busid() with judicious use of

  git checkout -p a3257256^ -- drivers/gpu/drm/virtio

Cc: Daniel Vetter <>
Cc: Emil Velikov <>
Cc: Gerd Hoffmann <>
Cc: Gustavo Padovan <>
Cc: Hans de Goede <>
Cc: Joachim Frieben <>
Reported-by: 's avatarJoachim Frieben <>
Fixes: a3257256
Ref: 's avatarLaszlo Ersek <>
Reviewed-by: 's avatarEmil Velikov <>
Signed-off-by: 's avatarDave Airlie <>
Signed-off-by: 's avatarGreg Kroah-Hartman <>
parent 336f2e1e
......@@ -27,6 +27,16 @@
#include "virtgpu_drv.h"
int drm_virtio_set_busid(struct drm_device *dev, struct drm_master *master)
struct pci_dev *pdev = dev->pdev;
if (pdev) {
return drm_pci_set_busid(dev, master);
return 0;
static void virtio_pci_kick_out_firmware_fb(struct pci_dev *pci_dev)
struct apertures_struct *ap;
......@@ -117,6 +117,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
static struct drm_driver driver = {
.set_busid = drm_virtio_set_busid,
.load = virtio_gpu_driver_load,
.unload = virtio_gpu_driver_unload,
.open = virtio_gpu_driver_open,
......@@ -49,6 +49,7 @@
/* virtgpu_drm_bus.c */
int drm_virtio_set_busid(struct drm_device *dev, struct drm_master *master);
int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev);
struct virtio_gpu_object {
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment