Skip to contentSkip to conversation

Patch "drm: virtio: reinstate drm_virtio_set_busid()" has been added to the 4.8-stable tree

PATCH [email protected] 1 participant 1 message Oct 20, 2016

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

drm: virtio: reinstate drm_virtio_set_busid()

to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
drm-virtio-reinstate-drm_virtio_set_busid.patch
and it can be found in the queue-4.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From c2cbc38b9715bd8318062e600668fc30e5a3fbfa Mon Sep 17 00:00:00 2001

From: Laszlo Ersek <[email protected]>
Date: Mon, 3 Oct 2016 19:43:03 +0200
Subject: drm: virtio: reinstate drm_virtio_set_busid()

From: Laszlo Ersek <[email protected]>

commit c2cbc38b9715bd8318062e600668fc30e5a3fbfa upstream.

Before commit a325725633c2 ("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 a325725633c2 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 a325725633c2 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 a325725633c2^ -- 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]>
Fixes a325725633c26aa66ab940f762a6b0778edf76c0

Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1366842

---
 drivers/gpu/drm/virtio/virtgpu_drm_bus.c |   10 ++++++++++
 drivers/gpu/drm/virtio/virtgpu_drv.c     |    1 +
 drivers/gpu/drm/virtio/virtgpu_drv.h     |    1 +
 3 files changed, 12 insertions(+)
drivers/gpu/drm/virtio/virtgpu_drm_bus.c +10 -0
@@ -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;
drivers/gpu/drm/virtio/virtgpu_drv.c +1 -0
@@ -117,6 +117,7 @@ static const struct file_operations virt
 
 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,
drivers/gpu/drm/virtio/virtgpu_drv.h +1 -0
@@ -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 {

Patches currently in stable-queue which might be from [email protected] are

queue-4.8/drm-virtio-reinstate-drm_virtio_set_busid.patch