From 9510c8110910af408da21717eab928bf0d47284f Mon Sep 17 00:00:00 2001 From: Josh Boyer Date: Tue, 4 Oct 2016 14:22:46 -0400 Subject: Add patch to fix Xorg starting with virtio (rhbz 1366842) --- drm-virtio-reinstate-drm_virtio_set_busid.patch | 95 +++++++++++++++++++++++++ kernel.spec | 6 ++ 2 files changed, 101 insertions(+) create mode 100644 drm-virtio-reinstate-drm_virtio_set_busid.patch diff --git a/drm-virtio-reinstate-drm_virtio_set_busid.patch b/drm-virtio-reinstate-drm_virtio_set_busid.patch new file mode 100644 index 000000000..52698e235 --- /dev/null +++ b/drm-virtio-reinstate-drm_virtio_set_busid.patch @@ -0,0 +1,95 @@ +From 61d19a658598b2d3ea80a5a02a59d9ea0ff08ce6 Mon Sep 17 00:00:00 2001 +From: Laszlo Ersek +Date: Mon, 3 Oct 2016 19:43:03 +0200 +Subject: [PATCH] drm: virtio: reinstate drm_virtio_set_busid() + +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 +Cc: Daniel Vetter +Cc: David Airlie +Cc: Emil Velikov +Cc: Gerd Hoffmann +Cc: Gustavo Padovan +Cc: Hans de Goede +Cc: Joachim Frieben +Cc: stable@vger.kernel.org +Reported-by: Joachim Frieben +Fixes: a325725633c26aa66ab940f762a6b0778edf76c0 +Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1366842 +Signed-off-by: Laszlo Ersek +Reviewed-by: Emil Velikov +--- + 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(+) + +diff --git a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c +index 7f0e93f87a55..88a39165edd5 100644 +--- a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c ++++ b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c +@@ -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; +diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c +index c13f70cfc461..5820b7020ae5 100644 +--- a/drivers/gpu/drm/virtio/virtgpu_drv.c ++++ b/drivers/gpu/drm/virtio/virtgpu_drv.c +@@ -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, +diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h +index b18ef3111f0c..acf556a35cb2 100644 +--- a/drivers/gpu/drm/virtio/virtgpu_drv.h ++++ b/drivers/gpu/drm/virtio/virtgpu_drv.h +@@ -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 { +-- +2.7.4 + diff --git a/kernel.spec b/kernel.spec index b1b42cc03..c2c168bc8 100644 --- a/kernel.spec +++ b/kernel.spec @@ -624,6 +624,9 @@ Patch849: 0001-iio-Use-event-header-from-kernel-tree.patch #CVE-2016-7425 rhbz 1377330 1377331 Patch850: arcmsr-buffer-overflow-in-archmsr_iop_message_xfer.patch +#rhbz 1366842 +Patch851: drm-virtio-reinstate-drm_virtio_set_busid.patch + # END OF PATCH DEFINITIONS %endif @@ -2160,6 +2163,9 @@ fi # # %changelog +* Tue Oct 04 2016 Josh Boyer +- Add patch to fix Xorg starting with virtio (rhbz 1366842) + * Mon Oct 03 2016 Justin M. Forbes - 4.8.0-1 - Disable debugging options. - Linux v4.8 -- cgit