diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 16 | 
1 files changed, 12 insertions, 4 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index b7742e62972a..716f2afeb6a9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -251,8 +251,8 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,  	adev = amdgpu_get_adev(bo->bdev);  	ring = adev->mman.buffer_funcs_ring; -	old_start = old_mem->start << PAGE_SHIFT; -	new_start = new_mem->start << PAGE_SHIFT; +	old_start = (u64)old_mem->start << PAGE_SHIFT; +	new_start = (u64)new_mem->start << PAGE_SHIFT;  	switch (old_mem->mem_type) {  	case TTM_PL_VRAM: @@ -335,7 +335,7 @@ static int amdgpu_move_vram_ram(struct ttm_buffer_object *bo,  	if (unlikely(r)) {  		goto out_cleanup;  	} -	r = ttm_bo_move_ttm(bo, true, no_wait_gpu, new_mem); +	r = ttm_bo_move_ttm(bo, true, interruptible, no_wait_gpu, new_mem);  out_cleanup:  	ttm_bo_mem_put(bo, &tmp_mem);  	return r; @@ -368,7 +368,7 @@ static int amdgpu_move_ram_vram(struct ttm_buffer_object *bo,  	if (unlikely(r)) {  		return r;  	} -	r = ttm_bo_move_ttm(bo, true, no_wait_gpu, &tmp_mem); +	r = ttm_bo_move_ttm(bo, true, interruptible, no_wait_gpu, &tmp_mem);  	if (unlikely(r)) {  		goto out_cleanup;  	} @@ -950,6 +950,8 @@ static struct list_head *amdgpu_ttm_lru_tail(struct ttm_buffer_object *tbo)  	struct list_head *res = lru->lru[tbo->mem.mem_type];  	lru->lru[tbo->mem.mem_type] = &tbo->lru; +	while ((++lru)->lru[tbo->mem.mem_type] == res) +		lru->lru[tbo->mem.mem_type] = &tbo->lru;  	return res;  } @@ -960,6 +962,8 @@ static struct list_head *amdgpu_ttm_swap_lru_tail(struct ttm_buffer_object *tbo)  	struct list_head *res = lru->swap_lru;  	lru->swap_lru = &tbo->swap; +	while ((++lru)->swap_lru == res) +		lru->swap_lru = &tbo->swap;  	return res;  } @@ -1011,6 +1015,10 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)  		lru->swap_lru = &adev->mman.bdev.glob->swap_lru;  	} +	for (j = 0; j < TTM_NUM_MEM_TYPES; ++j) +		adev->mman.guard.lru[j] = NULL; +	adev->mman.guard.swap_lru = NULL; +  	adev->mman.initialized = true;  	r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,  				adev->mc.real_vram_size >> PAGE_SHIFT); |