Message ID | 20161003174303.4839-1-lersek@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 4 October 2016 at 03:43, Laszlo Ersek <lersek@redhat.com> wrote: > 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 Thanks guys, I've pushed this into drm-next. Dave.
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 {