diff options
| author | Dave Airlie <airlied@redhat.com> | 2020-12-10 16:55:41 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2020-12-10 16:55:53 +1000 | 
| commit | b10733527bfd864605c33ab2e9a886eec317ec39 (patch) | |
| tree | d7d671d2fa69e628e2ac898ba8e9ab10c6481c3c /drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |
| parent | 60f2f74978e69fdb63e7a26179cbd5c50d4845c2 (diff) | |
| parent | f8aab60422c371425365d386dfd51e0c6c5b1041 (diff) | |
Merge tag 'amd-drm-next-5.11-2020-12-09' of git://people.freedesktop.org/~agd5f/linux into drm-next
amd-drm-next-5.11-2020-12-09:
amdgpu:
- SR-IOV fixes
- Navy Flounder updates
- Sienna Cichlid updates
- Dimgrey Cavefish updates
- Vangogh updates
- Misc SMU fixes
- Misc display fixes
- Last big hunk of W=1 warning fixes
- Cursor validation fixes
- CI BACO updates
From: Alex Deucher <alexdeucher@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201210045344.21566-1-alexander.deucher@amd.com
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 41 | 
1 files changed, 23 insertions, 18 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index c9f94fbeb018..d0a1fee1f5f6 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c @@ -70,26 +70,12 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,  	bp.type = type;  	bp.resv = resv;  	bp.preferred_domain = initial_domain; -retry:  	bp.flags = flags;  	bp.domain = initial_domain;  	r = amdgpu_bo_create(adev, &bp, &bo); -	if (r) { -		if (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 (%ld, %d, %u, %d)\n", -				  size, initial_domain, alignment, r); -		} +	if (r)  		return r; -	} +  	*obj = &bo->tbo.base;  	(*obj)->funcs = &amdgpu_gem_object_funcs; @@ -239,7 +225,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,  	uint64_t size = args->in.bo_size;  	struct dma_resv *resv = NULL;  	struct drm_gem_object *gobj; -	uint32_t handle; +	uint32_t handle, initial_domain;  	int r;  	/* reject invalid gem flags */ @@ -283,9 +269,28 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,  		resv = vm->root.base.bo->tbo.base.resv;  	} +retry: +	initial_domain = (u32)(0xffffffff & args->in.domains);  	r = amdgpu_gem_object_create(adev, size, args->in.alignment, -				     (u32)(0xffffffff & args->in.domains), +				     initial_domain,  				     flags, ttm_bo_type_device, resv, &gobj); +	if (r) { +		if (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); +		} +		return r; +	} +  	if (flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID) {  		if (!r) {  			struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj); | 
