|
|
9510c81 |
From 61d19a658598b2d3ea80a5a02a59d9ea0ff08ce6 Mon Sep 17 00:00:00 2001
|
|
|
9510c81 |
From: Laszlo Ersek <lersek@redhat.com>
|
|
|
9510c81 |
Date: Mon, 3 Oct 2016 19:43:03 +0200
|
|
|
9510c81 |
Subject: [PATCH] drm: virtio: reinstate drm_virtio_set_busid()
|
|
|
9510c81 |
|
|
|
9510c81 |
Before commit a325725633c2 ("drm: Lobotomize set_busid nonsense for !pci
|
|
|
9510c81 |
drivers"), several DRM drivers for platform devices used to expose an
|
|
|
9510c81 |
explicit "drm_driver.set_busid" callback, invariably backed by
|
|
|
9510c81 |
drm_platform_set_busid().
|
|
|
9510c81 |
|
|
|
9510c81 |
Commit a325725633c2 removed drm_platform_set_busid(), along with the
|
|
|
9510c81 |
referring .set_busid field initializations. This was justified because
|
|
|
9510c81 |
interchangeable functionality had been implemented in drm_dev_alloc() /
|
|
|
9510c81 |
drm_dev_init(), which DRM_IOCTL_SET_VERSION would rely on going forward.
|
|
|
9510c81 |
|
|
|
9510c81 |
However, commit a325725633c2 also removed drm_virtio_set_busid(), for
|
|
|
9510c81 |
which the same consolidation was not appropriate: this .set_busid callback
|
|
|
9510c81 |
had been implemented with drm_pci_set_busid(), and not
|
|
|
9510c81 |
drm_platform_set_busid(). The error regressed Xorg/xserver on QEMU's
|
|
|
9510c81 |
"virtio-vga" card; the drmGetBusid() function from libdrm would no longer
|
|
|
9510c81 |
return stable PCI identifiers like "pci:0000:00:02.0", but rather unstable
|
|
|
9510c81 |
platform ones like "virtio0".
|
|
|
9510c81 |
|
|
|
9510c81 |
Reinstate drm_virtio_set_busid() with judicious use of
|
|
|
9510c81 |
|
|
|
9510c81 |
git checkout -p a325725633c2^ -- drivers/gpu/drm/virtio
|
|
|
9510c81 |
|
|
|
9510c81 |
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
|
|
|
9510c81 |
Cc: Daniel Vetter <daniel.vetter@intel.com>
|
|
|
9510c81 |
Cc: David Airlie <airlied@redhat.com>
|
|
|
9510c81 |
Cc: Emil Velikov <emil.l.velikov@gmail.com>
|
|
|
9510c81 |
Cc: Gerd Hoffmann <kraxel@redhat.com>
|
|
|
9510c81 |
Cc: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
|
|
|
9510c81 |
Cc: Hans de Goede <hdegoede@redhat.com>
|
|
|
9510c81 |
Cc: Joachim Frieben <jfrieben@hotmail.com>
|
|
|
9510c81 |
Cc: stable@vger.kernel.org
|
|
|
9510c81 |
Reported-by: Joachim Frieben <jfrieben@hotmail.com>
|
|
|
9510c81 |
Fixes: a325725633c26aa66ab940f762a6b0778edf76c0
|
|
|
9510c81 |
Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1366842
|
|
|
9510c81 |
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
9510c81 |
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
|
|
|
9510c81 |
---
|
|
|
9510c81 |
drivers/gpu/drm/virtio/virtgpu_drm_bus.c | 10 ++++++++++
|
|
|
9510c81 |
drivers/gpu/drm/virtio/virtgpu_drv.c | 1 +
|
|
|
9510c81 |
drivers/gpu/drm/virtio/virtgpu_drv.h | 1 +
|
|
|
9510c81 |
3 files changed, 12 insertions(+)
|
|
|
9510c81 |
|
|
|
9510c81 |
diff --git a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
|
|
|
9510c81 |
index 7f0e93f87a55..88a39165edd5 100644
|
|
|
9510c81 |
--- a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
|
|
|
9510c81 |
+++ b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c
|
|
|
9510c81 |
@@ -27,6 +27,16 @@
|
|
|
9510c81 |
|
|
|
9510c81 |
#include "virtgpu_drv.h"
|
|
|
9510c81 |
|
|
|
9510c81 |
+int drm_virtio_set_busid(struct drm_device *dev, struct drm_master *master)
|
|
|
9510c81 |
+{
|
|
|
9510c81 |
+ struct pci_dev *pdev = dev->pdev;
|
|
|
9510c81 |
+
|
|
|
9510c81 |
+ if (pdev) {
|
|
|
9510c81 |
+ return drm_pci_set_busid(dev, master);
|
|
|
9510c81 |
+ }
|
|
|
9510c81 |
+ return 0;
|
|
|
9510c81 |
+}
|
|
|
9510c81 |
+
|
|
|
9510c81 |
static void virtio_pci_kick_out_firmware_fb(struct pci_dev *pci_dev)
|
|
|
9510c81 |
{
|
|
|
9510c81 |
struct apertures_struct *ap;
|
|
|
9510c81 |
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
|
|
|
9510c81 |
index c13f70cfc461..5820b7020ae5 100644
|
|
|
9510c81 |
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
|
|
|
9510c81 |
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
|
|
|
9510c81 |
@@ -117,6 +117,7 @@ static const struct file_operations virtio_gpu_driver_fops = {
|
|
|
9510c81 |
|
|
|
9510c81 |
static struct drm_driver driver = {
|
|
|
9510c81 |
.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER | DRIVER_ATOMIC,
|
|
|
9510c81 |
+ .set_busid = drm_virtio_set_busid,
|
|
|
9510c81 |
.load = virtio_gpu_driver_load,
|
|
|
9510c81 |
.unload = virtio_gpu_driver_unload,
|
|
|
9510c81 |
.open = virtio_gpu_driver_open,
|
|
|
9510c81 |
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h
|
|
|
9510c81 |
index b18ef3111f0c..acf556a35cb2 100644
|
|
|
9510c81 |
--- a/drivers/gpu/drm/virtio/virtgpu_drv.h
|
|
|
9510c81 |
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.h
|
|
|
9510c81 |
@@ -49,6 +49,7 @@
|
|
|
9510c81 |
#define DRIVER_PATCHLEVEL 1
|
|
|
9510c81 |
|
|
|
9510c81 |
/* virtgpu_drm_bus.c */
|
|
|
9510c81 |
+int drm_virtio_set_busid(struct drm_device *dev, struct drm_master *master);
|
|
|
9510c81 |
int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev);
|
|
|
9510c81 |
|
|
|
9510c81 |
struct virtio_gpu_object {
|
|
|
9510c81 |
--
|
|
|
9510c81 |
2.7.4
|
|
|
9510c81 |
|