diff options
Diffstat (limited to 'intel')
| -rw-r--r-- | intel/intel_bufmgr_gem.c | 17 | 
1 files changed, 17 insertions, 0 deletions
diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c index 9daa89ad..54c82d62 100644 --- a/intel/intel_bufmgr_gem.c +++ b/intel/intel_bufmgr_gem.c @@ -927,6 +927,8 @@ static int drm_intel_gem_bo_map(drm_intel_bo *bo, int write_enable)  	struct drm_i915_gem_set_domain set_domain;  	int ret; +	pthread_mutex_lock(&bufmgr_gem->lock); +  	/* Allow recursive mapping. Mesa may recursively map buffers with  	 * nested display loops.  	 */ @@ -950,6 +952,7 @@ static int drm_intel_gem_bo_map(drm_intel_bo *bo, int write_enable)  				"%s:%d: Error mapping buffer %d (%s): %s .\n",  				__FILE__, __LINE__, bo_gem->gem_handle,  				bo_gem->name, strerror(errno)); +			pthread_mutex_unlock(&bufmgr_gem->lock);  			return ret;  		}  		bo_gem->mem_virtual = (void *)(uintptr_t) mmap_arg.addr_ptr; @@ -974,9 +977,12 @@ static int drm_intel_gem_bo_map(drm_intel_bo *bo, int write_enable)  		fprintf(stderr, "%s:%d: Error setting to CPU domain %d: %s\n",  			__FILE__, __LINE__, bo_gem->gem_handle,  			strerror(errno)); +		pthread_mutex_unlock(&bufmgr_gem->lock);  		return ret;  	} +	pthread_mutex_unlock(&bufmgr_gem->lock); +  	return 0;  } @@ -987,6 +993,8 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)  	struct drm_i915_gem_set_domain set_domain;  	int ret; +	pthread_mutex_lock(&bufmgr_gem->lock); +  	/* Get a mapping of the buffer if we haven't before. */  	if (bo_gem->gtt_virtual == NULL) {  		struct drm_i915_gem_mmap_gtt mmap_arg; @@ -1010,6 +1018,7 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)  				__FILE__, __LINE__,  				bo_gem->gem_handle, bo_gem->name,  				strerror(errno)); +			pthread_mutex_unlock(&bufmgr_gem->lock);  			return ret;  		} @@ -1025,6 +1034,7 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)  				__FILE__, __LINE__,  				bo_gem->gem_handle, bo_gem->name,  				strerror(errno)); +			pthread_mutex_unlock(&bufmgr_gem->lock);  			return ret;  		}  	} @@ -1051,6 +1061,8 @@ int drm_intel_gem_bo_map_gtt(drm_intel_bo *bo)  			strerror(errno));  	} +	pthread_mutex_unlock(&bufmgr_gem->lock); +  	return ret;  } @@ -1065,7 +1077,9 @@ int drm_intel_gem_bo_unmap_gtt(drm_intel_bo *bo)  	assert(bo_gem->gtt_virtual != NULL); +	pthread_mutex_lock(&bufmgr_gem->lock);  	bo->virtual = NULL; +	pthread_mutex_unlock(&bufmgr_gem->lock);  	return ret;  } @@ -1082,6 +1096,8 @@ static int drm_intel_gem_bo_unmap(drm_intel_bo *bo)  	assert(bo_gem->mem_virtual != NULL); +	pthread_mutex_lock(&bufmgr_gem->lock); +  	/* Cause a flush to happen if the buffer's pinned for scanout, so the  	 * results show up in a timely manner.  	 */ @@ -1094,6 +1110,7 @@ static int drm_intel_gem_bo_unmap(drm_intel_bo *bo)  	ret = ret == -1 ? -errno : 0;  	bo->virtual = NULL; +	pthread_mutex_unlock(&bufmgr_gem->lock);  	return ret;  }  | 
