diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 16 | 
1 files changed, 13 insertions, 3 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index bee38c326537..bb7350ea1d75 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -113,7 +113,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,  	bp.resv = resv;  	bp.preferred_domain = initial_domain;  	bp.flags = flags; -	bp.domain = initial_domain | AMDGPU_GEM_DOMAIN_CPU; +	bp.domain = initial_domain;  	bp.bo_ptr_size = sizeof(struct amdgpu_bo);  	r = amdgpu_bo_create_user(adev, &bp, &ubo); @@ -332,10 +332,20 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,  	}  	initial_domain = (u32)(0xffffffff & args->in.domains); +retry:  	r = amdgpu_gem_object_create(adev, size, args->in.alignment, -				     initial_domain, flags, ttm_bo_type_device, -				     resv, &gobj); +				     initial_domain, +				     flags, ttm_bo_type_device, resv, &gobj);  	if (r && r != -ERESTARTSYS) { +		if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) { +			flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; +			goto retry; +		} + +		if (initial_domain == AMDGPU_GEM_DOMAIN_VRAM) { +			initial_domain |= AMDGPU_GEM_DOMAIN_GTT; +			goto retry; +		}  		DRM_DEBUG("Failed to allocate GEM object (%llu, %d, %llu, %d)\n",  				size, initial_domain, args->in.alignment, r);  	} |