Skip to content

Commit

Permalink
drm: virtio: reinstate drm_virtio_set_busid()
Browse files Browse the repository at this point in the history
Before commit a325725 ("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
drm_platform_set_busid().

Commit a325725 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 a325725 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 a325725^ -- drivers/gpu/drm/virtio

Cc: Daniel Vetter <[email protected]>
Cc: Emil Velikov <[email protected]>
Cc: Gerd Hoffmann <[email protected]>
Cc: Gustavo Padovan <[email protected]>
Cc: Hans de Goede <[email protected]>
Cc: Joachim Frieben <[email protected]>
Cc: [email protected] # v4.8
Reported-by: Joachim Frieben <[email protected]>
Fixes: a325725
Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1366842
Signed-off-by: Laszlo Ersek <[email protected]>
Reviewed-by: Emil Velikov <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
  • Loading branch information
lersek authored and airlied committed Oct 4, 2016
1 parent 2adb29b commit c2cbc38
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 0 deletions.
10 changes: 10 additions & 0 deletions drivers/gpu/drm/virtio/virtgpu_drm_bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,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;
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/virtio/virtgpu_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ static const struct file_operations virtio_gpu_driver_fops = {

static struct drm_driver driver = {
.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
.set_busid = drm_virtio_set_busid,
.load = virtio_gpu_driver_load,
.unload = virtio_gpu_driver_unload,
.open = virtio_gpu_driver_open,
Expand Down
1 change: 1 addition & 0 deletions drivers/gpu/drm/virtio/virtgpu_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#define DRIVER_PATCHLEVEL 1

/* 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 {
Expand Down

0 comments on commit c2cbc38

Please sign in to comment.