mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	drm/gem: Test for imported GEM buffers with helper
Add drm_gem_is_imported() that tests if a GEM object's buffer has been imported. Update the GEM code accordingly. GEM code usually tests for imports if import_attach has been set in struct drm_gem_object. But attaching a dma-buf on import requires a DMA-capable importer device, which is not the case for many serial busses like USB or I2C. The new helper tests if a GEM object's dma-buf has been created from the GEM object. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Anusha Srivatsa <asrivats@redhat.com> Reviewed-by: Christian König <christian.koenig@amd.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250226172457.217725-2-tzimmermann@suse.de
This commit is contained in:
		
							parent
							
								
									ced7486468
								
							
						
					
					
						commit
						b57aa47d39
					
				
					 2 changed files with 16 additions and 2 deletions
				
			
		|  | @ -348,7 +348,7 @@ int drm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, | |||
| 		return -ENOENT; | ||||
| 
 | ||||
| 	/* Don't allow imported objects to be mapped */ | ||||
| 	if (obj->import_attach) { | ||||
| 	if (drm_gem_is_imported(obj)) { | ||||
| 		ret = -EINVAL; | ||||
| 		goto out; | ||||
| 	} | ||||
|  | @ -1178,7 +1178,7 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent, | |||
| 			  drm_vma_node_start(&obj->vma_node)); | ||||
| 	drm_printf_indent(p, indent, "size=%zu\n", obj->size); | ||||
| 	drm_printf_indent(p, indent, "imported=%s\n", | ||||
| 			  str_yes_no(obj->import_attach)); | ||||
| 			  str_yes_no(drm_gem_is_imported(obj))); | ||||
| 
 | ||||
| 	if (obj->funcs->print_info) | ||||
| 		obj->funcs->print_info(p, indent, obj); | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ | |||
|  */ | ||||
| 
 | ||||
| #include <linux/kref.h> | ||||
| #include <linux/dma-buf.h> | ||||
| #include <linux/dma-resv.h> | ||||
| #include <linux/list.h> | ||||
| #include <linux/mutex.h> | ||||
|  | @ -575,6 +576,19 @@ static inline bool drm_gem_object_is_shared_for_memory_stats(struct drm_gem_obje | |||
| 	return (obj->handle_count > 1) || obj->dma_buf; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * drm_gem_is_imported() - Tests if GEM object's buffer has been imported | ||||
|  * @obj: the GEM object | ||||
|  * | ||||
|  * Returns: | ||||
|  * True if the GEM object's buffer has been imported, false otherwise | ||||
|  */ | ||||
| static inline bool drm_gem_is_imported(const struct drm_gem_object *obj) | ||||
| { | ||||
| 	/* The dma-buf's priv field points to the original GEM object. */ | ||||
| 	return obj->dma_buf && (obj->dma_buf->priv != obj); | ||||
| } | ||||
| 
 | ||||
| #ifdef CONFIG_LOCKDEP | ||||
| /**
 | ||||
|  * drm_gem_gpuva_set_lock() - Set the lock protecting accesses to the gpuva list. | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Thomas Zimmermann
						Thomas Zimmermann