diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_object.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_object.c | 15 | 
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 830f1a7b486..1f1a4c803c1 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c @@ -115,9 +115,7 @@ int radeon_bo_create(struct radeon_device *rdev,  	size = ALIGN(size, PAGE_SIZE); -	if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) { -		rdev->mman.bdev.dev_mapping = rdev->ddev->dev_mapping; -	} +	rdev->mman.bdev.dev_mapping = rdev->ddev->dev_mapping;  	if (kernel) {  		type = ttm_bo_type_kernel;  	} else if (sg) { @@ -138,7 +136,6 @@ int radeon_bo_create(struct radeon_device *rdev,  	acc_size = ttm_bo_dma_acc_size(&rdev->mman.bdev, size,  				       sizeof(struct radeon_bo)); -retry:  	bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL);  	if (bo == NULL)  		return -ENOMEM; @@ -152,13 +149,15 @@ retry:  	bo->surface_reg = -1;  	INIT_LIST_HEAD(&bo->list);  	INIT_LIST_HEAD(&bo->va); + +retry:  	radeon_ttm_placement_from_domain(bo, domain);  	/* Kernel allocation are uninterruptible */ -	mutex_lock(&rdev->vram_mutex); +	down_read(&rdev->pm.mclk_lock);  	r = ttm_bo_init(&rdev->mman.bdev, &bo->tbo, size, type,  			&bo->placement, page_align, 0, !kernel, NULL,  			acc_size, sg, &radeon_ttm_bo_destroy); -	mutex_unlock(&rdev->vram_mutex); +	up_read(&rdev->pm.mclk_lock);  	if (unlikely(r != 0)) {  		if (r != -ERESTARTSYS) {  			if (domain == RADEON_GEM_DOMAIN_VRAM) { @@ -219,9 +218,9 @@ void radeon_bo_unref(struct radeon_bo **bo)  		return;  	rdev = (*bo)->rdev;  	tbo = &((*bo)->tbo); -	mutex_lock(&rdev->vram_mutex); +	down_read(&rdev->pm.mclk_lock);  	ttm_bo_unref(&tbo); -	mutex_unlock(&rdev->vram_mutex); +	up_read(&rdev->pm.mclk_lock);  	if (tbo == NULL)  		*bo = NULL;  }  |