Re: [PATCH] drm: virtio: reinstate drm_virtio_set_busid()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Greg,

On 10/03/16 19:43, Laszlo Ersek 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
> 
> Cc: Daniel Vetter <daniel.vetter@xxxxxxxx>
> Cc: Daniel Vetter <daniel.vetter@xxxxxxxxx>
> Cc: David Airlie <airlied@xxxxxxxxxx>
> Cc: Emil Velikov <emil.l.velikov@xxxxxxxxx>
> Cc: Gerd Hoffmann <kraxel@xxxxxxxxxx>
> Cc: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxxxx>
> Cc: Hans de Goede <hdegoede@xxxxxxxxxx>
> Cc: Joachim Frieben <jfrieben@xxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Reported-by: Joachim Frieben <jfrieben@xxxxxxxxxxx>
> Fixes: a325725633c26aa66ab940f762a6b0778edf76c0
> Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1366842
> Signed-off-by: Laszlo Ersek <lersek@xxxxxxxxxx>
> Reviewed-by: Emil Velikov <emil.l.velikov@xxxxxxxxx>
> ---
>  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(+)

Is there any particular reason this patch hasn't been cherry-picked to
linux-4.8.y? (I checked v4.8.2.)

According to "Option 1" in "Documentation/stable_kernel_rules.txt", I
think it should have been.

Anyway, it is commit c2cbc38b9715bd8318062e600668fc30e5a3fbfa upstream;
please consider including it in v4.8.3.

(Daniel: my offer to test any further reworkings for this still stands;
just please send me patches that I can apply cleanly with git-am.)

Thanks!
Laszlo

> 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 {
> 

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]