mirror of
https://github.com/torvalds/linux.git
synced 2026-05-01 04:52:32 -04:00
Merge drm/drm-next into drm-misc-next
We haven't done any backmerge for a while due to the merge window, and it starts to become an issue for komeda. Let's bring 5.4-rc1 in. Signed-off-by: Maxime Ripard <mripard@kernel.org>
This commit is contained in:
@@ -444,6 +444,22 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
|
||||
if (r)
|
||||
goto error;
|
||||
|
||||
/* clear the space being freed */
|
||||
if (old_mem->mem_type == TTM_PL_VRAM &&
|
||||
(ttm_to_amdgpu_bo(bo)->flags &
|
||||
AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE)) {
|
||||
struct dma_fence *wipe_fence = NULL;
|
||||
|
||||
r = amdgpu_fill_buffer(ttm_to_amdgpu_bo(bo), AMDGPU_POISON,
|
||||
NULL, &wipe_fence);
|
||||
if (r) {
|
||||
goto error;
|
||||
} else if (wipe_fence) {
|
||||
dma_fence_put(fence);
|
||||
fence = wipe_fence;
|
||||
}
|
||||
}
|
||||
|
||||
/* Always block for VM page tables before committing the new location */
|
||||
if (bo->type == ttm_bo_type_kernel)
|
||||
r = ttm_bo_move_accel_cleanup(bo, fence, true, new_mem);
|
||||
@@ -778,7 +794,6 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages)
|
||||
struct hmm_range *range;
|
||||
unsigned long i;
|
||||
uint64_t *pfns;
|
||||
int retry = 0;
|
||||
int r = 0;
|
||||
|
||||
if (!mm) /* Happens during process shutdown */
|
||||
@@ -819,10 +834,11 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages)
|
||||
0 : range->flags[HMM_PFN_WRITE];
|
||||
range->pfn_flags_mask = 0;
|
||||
range->pfns = pfns;
|
||||
hmm_range_register(range, mirror, start,
|
||||
start + ttm->num_pages * PAGE_SIZE, PAGE_SHIFT);
|
||||
range->start = start;
|
||||
range->end = start + ttm->num_pages * PAGE_SIZE;
|
||||
|
||||
hmm_range_register(range, mirror);
|
||||
|
||||
retry:
|
||||
/*
|
||||
* Just wait for range to be valid, safe to ignore return value as we
|
||||
* will use the return value of hmm_range_fault() below under the
|
||||
@@ -831,24 +847,12 @@ retry:
|
||||
hmm_range_wait_until_valid(range, HMM_RANGE_DEFAULT_TIMEOUT);
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
|
||||
r = hmm_range_fault(range, true);
|
||||
if (unlikely(r < 0)) {
|
||||
if (likely(r == -EAGAIN)) {
|
||||
/*
|
||||
* return -EAGAIN, mmap_sem is dropped
|
||||
*/
|
||||
if (retry++ < MAX_RETRY_HMM_RANGE_FAULT)
|
||||
goto retry;
|
||||
else
|
||||
pr_err("Retry hmm fault too many times\n");
|
||||
}
|
||||
|
||||
goto out_up_read;
|
||||
}
|
||||
|
||||
r = hmm_range_fault(range, 0);
|
||||
up_read(&mm->mmap_sem);
|
||||
|
||||
if (unlikely(r < 0))
|
||||
goto out_free_pfns;
|
||||
|
||||
for (i = 0; i < ttm->num_pages; i++) {
|
||||
pages[i] = hmm_device_entry_to_page(range, pfns[i]);
|
||||
if (unlikely(!pages[i])) {
|
||||
@@ -864,9 +868,6 @@ retry:
|
||||
|
||||
return 0;
|
||||
|
||||
out_up_read:
|
||||
if (likely(r != -EAGAIN))
|
||||
up_read(&mm->mmap_sem);
|
||||
out_free_pfns:
|
||||
hmm_range_unregister(range);
|
||||
kvfree(pfns);
|
||||
@@ -1599,6 +1600,7 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
|
||||
.move = &amdgpu_bo_move,
|
||||
.verify_access = &amdgpu_verify_access,
|
||||
.move_notify = &amdgpu_bo_move_notify,
|
||||
.release_notify = &amdgpu_bo_release_notify,
|
||||
.fault_reserve_notify = &amdgpu_bo_fault_reserve_notify,
|
||||
.io_mem_reserve = &amdgpu_ttm_io_mem_reserve,
|
||||
.io_mem_free = &amdgpu_ttm_io_mem_free,
|
||||
@@ -1721,6 +1723,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
uint64_t gtt_size;
|
||||
int r;
|
||||
u64 vis_vram_limit;
|
||||
void *stolen_vga_buf;
|
||||
|
||||
mutex_init(&adev->mman.gtt_window_lock);
|
||||
|
||||
@@ -1729,7 +1732,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
&amdgpu_bo_driver,
|
||||
adev->ddev->anon_inode->i_mapping,
|
||||
adev->ddev->vma_offset_manager,
|
||||
adev->need_dma32);
|
||||
dma_addressing_limited(adev->dev));
|
||||
if (r) {
|
||||
DRM_ERROR("failed initializing buffer object driver(%d).\n", r);
|
||||
return r;
|
||||
@@ -1776,7 +1779,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
r = amdgpu_bo_create_kernel(adev, adev->gmc.stolen_size, PAGE_SIZE,
|
||||
AMDGPU_GEM_DOMAIN_VRAM,
|
||||
&adev->stolen_vga_memory,
|
||||
NULL, NULL);
|
||||
NULL, &stolen_vga_buf);
|
||||
if (r)
|
||||
return r;
|
||||
DRM_INFO("amdgpu: %uM of VRAM memory ready\n",
|
||||
@@ -1840,8 +1843,9 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
*/
|
||||
void amdgpu_ttm_late_init(struct amdgpu_device *adev)
|
||||
{
|
||||
void *stolen_vga_buf;
|
||||
/* return the VGA stolen memory (if any) back to VRAM */
|
||||
amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, NULL);
|
||||
amdgpu_bo_free_kernel(&adev->stolen_vga_memory, NULL, &stolen_vga_buf);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user