forked from mirrors/linux
		
	Revert "drm/virtio: drop prime import/export callbacks"
This patch does more harm than good, as it breaks both Xwayland and gnome-shell with X11. Xwayland requires DRI3 & DRI3 requires PRIME. X11 crash for obscure double-free reason which are hard to debug (starting X11 by hand doesn't trigger the crash). I don't see an apparent problem implementing those stub prime functions, they may return an error at run-time, and it seems to be handled fine by GNOME at least. This reverts commitb318e3ff7c. [airlied: This broke userspace for virtio-gpus, and regressed things from DRI3 to DRI2. This brings back the original problem, but it's better than regressions.] Fixes:b318e3ff7c("drm/virtio: drop prime import/export callbacks") Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
		
							parent
							
								
									9fa246256e
								
							
						
					
					
						commit
						a0cecc23cf
					
				
					 3 changed files with 20 additions and 0 deletions
				
			
		|  | @ -205,10 +205,14 @@ static struct drm_driver driver = { | ||||||
| #if defined(CONFIG_DEBUG_FS) | #if defined(CONFIG_DEBUG_FS) | ||||||
| 	.debugfs_init = virtio_gpu_debugfs_init, | 	.debugfs_init = virtio_gpu_debugfs_init, | ||||||
| #endif | #endif | ||||||
|  | 	.prime_handle_to_fd = drm_gem_prime_handle_to_fd, | ||||||
|  | 	.prime_fd_to_handle = drm_gem_prime_fd_to_handle, | ||||||
| 	.gem_prime_export = drm_gem_prime_export, | 	.gem_prime_export = drm_gem_prime_export, | ||||||
| 	.gem_prime_import = drm_gem_prime_import, | 	.gem_prime_import = drm_gem_prime_import, | ||||||
| 	.gem_prime_pin = virtgpu_gem_prime_pin, | 	.gem_prime_pin = virtgpu_gem_prime_pin, | ||||||
| 	.gem_prime_unpin = virtgpu_gem_prime_unpin, | 	.gem_prime_unpin = virtgpu_gem_prime_unpin, | ||||||
|  | 	.gem_prime_get_sg_table = virtgpu_gem_prime_get_sg_table, | ||||||
|  | 	.gem_prime_import_sg_table = virtgpu_gem_prime_import_sg_table, | ||||||
| 	.gem_prime_vmap = virtgpu_gem_prime_vmap, | 	.gem_prime_vmap = virtgpu_gem_prime_vmap, | ||||||
| 	.gem_prime_vunmap = virtgpu_gem_prime_vunmap, | 	.gem_prime_vunmap = virtgpu_gem_prime_vunmap, | ||||||
| 	.gem_prime_mmap = virtgpu_gem_prime_mmap, | 	.gem_prime_mmap = virtgpu_gem_prime_mmap, | ||||||
|  |  | ||||||
|  | @ -354,6 +354,10 @@ int virtio_gpu_object_wait(struct virtio_gpu_object *bo, bool no_wait); | ||||||
| /* virtgpu_prime.c */ | /* virtgpu_prime.c */ | ||||||
| int virtgpu_gem_prime_pin(struct drm_gem_object *obj); | int virtgpu_gem_prime_pin(struct drm_gem_object *obj); | ||||||
| void virtgpu_gem_prime_unpin(struct drm_gem_object *obj); | void virtgpu_gem_prime_unpin(struct drm_gem_object *obj); | ||||||
|  | struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj); | ||||||
|  | struct drm_gem_object *virtgpu_gem_prime_import_sg_table( | ||||||
|  | 	struct drm_device *dev, struct dma_buf_attachment *attach, | ||||||
|  | 	struct sg_table *sgt); | ||||||
| void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj); | void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj); | ||||||
| void virtgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); | void virtgpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); | ||||||
| int virtgpu_gem_prime_mmap(struct drm_gem_object *obj, | int virtgpu_gem_prime_mmap(struct drm_gem_object *obj, | ||||||
|  |  | ||||||
|  | @ -39,6 +39,18 @@ void virtgpu_gem_prime_unpin(struct drm_gem_object *obj) | ||||||
| 	WARN_ONCE(1, "not implemented"); | 	WARN_ONCE(1, "not implemented"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | struct sg_table *virtgpu_gem_prime_get_sg_table(struct drm_gem_object *obj) | ||||||
|  | { | ||||||
|  | 	return ERR_PTR(-ENODEV); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | struct drm_gem_object *virtgpu_gem_prime_import_sg_table( | ||||||
|  | 	struct drm_device *dev, struct dma_buf_attachment *attach, | ||||||
|  | 	struct sg_table *table) | ||||||
|  | { | ||||||
|  | 	return ERR_PTR(-ENODEV); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj) | void *virtgpu_gem_prime_vmap(struct drm_gem_object *obj) | ||||||
| { | { | ||||||
| 	struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); | 	struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Dave Airlie
						Dave Airlie