diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 40 | 
1 files changed, 36 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 728e15e5d68a..ec9e45004bff 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -426,12 +426,20 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev,  	size_t acc_size;  	int r; -	page_align = roundup(bp->byte_align, PAGE_SIZE) >> PAGE_SHIFT; -	if (bp->domain & (AMDGPU_GEM_DOMAIN_GDS | AMDGPU_GEM_DOMAIN_GWS | -			  AMDGPU_GEM_DOMAIN_OA)) +	/* Note that GDS/GWS/OA allocates 1 page per byte/resource. */ +	if (bp->domain & (AMDGPU_GEM_DOMAIN_GWS | AMDGPU_GEM_DOMAIN_OA)) { +		/* GWS and OA don't need any alignment. */ +		page_align = bp->byte_align;  		size <<= PAGE_SHIFT; -	else +	} else if (bp->domain & AMDGPU_GEM_DOMAIN_GDS) { +		/* Both size and alignment must be a multiple of 4. */ +		page_align = ALIGN(bp->byte_align, 4); +		size = ALIGN(size, 4) << PAGE_SHIFT; +	} else { +		/* Memory should be aligned at least to a page size. */ +		page_align = ALIGN(bp->byte_align, PAGE_SIZE) >> PAGE_SHIFT;  		size = ALIGN(size, PAGE_SIZE); +	}  	if (!amdgpu_bo_validate_size(adev, size, bp->domain))  		return -ENOMEM; @@ -1277,6 +1285,30 @@ void amdgpu_bo_fence(struct amdgpu_bo *bo, struct dma_fence *fence,  }  /** + * amdgpu_sync_wait_resv - Wait for BO reservation fences + * + * @bo: buffer object + * @owner: fence owner + * @intr: Whether the wait is interruptible + * + * Returns: + * 0 on success, errno otherwise. + */ +int amdgpu_bo_sync_wait(struct amdgpu_bo *bo, void *owner, bool intr) +{ +	struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); +	struct amdgpu_sync sync; +	int r; + +	amdgpu_sync_create(&sync); +	amdgpu_sync_resv(adev, &sync, bo->tbo.resv, owner, false); +	r = amdgpu_sync_wait(&sync, intr); +	amdgpu_sync_free(&sync); + +	return r; +} + +/**   * amdgpu_bo_gpu_offset - return GPU offset of bo   * @bo:	amdgpu object for which we query the offset   * | 
