Merge drm/drm-next into drm-misc-next
Backmerging drm-next into drm-misc-next for nouveau and panel updates. Resolves a conflict between ttm and nouveau, where struct ttm_mem_res got renamed to struct ttm_resource. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
This commit is contained in:
@@ -82,17 +82,18 @@ static int ttm_agp_bind(struct ttm_tt *ttm, struct ttm_resource *bo_mem)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ttm_agp_unbind(struct ttm_tt *ttm)
|
||||
static void ttm_agp_unbind(struct ttm_tt *ttm)
|
||||
{
|
||||
struct ttm_agp_backend *agp_be = container_of(ttm, struct ttm_agp_backend, ttm);
|
||||
|
||||
if (agp_be->mem) {
|
||||
if (agp_be->mem->is_bound)
|
||||
return agp_unbind_memory(agp_be->mem);
|
||||
if (agp_be->mem->is_bound) {
|
||||
agp_unbind_memory(agp_be->mem);
|
||||
return;
|
||||
}
|
||||
agp_free_memory(agp_be->mem);
|
||||
agp_be->mem = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ttm_agp_destroy(struct ttm_tt *ttm)
|
||||
|
@@ -643,7 +643,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo,
|
||||
ttm_bo_wait(bo, false, false);
|
||||
|
||||
ttm_bo_cleanup_memtype_use(bo);
|
||||
return 0;
|
||||
return ttm_tt_create(bo, false);
|
||||
}
|
||||
|
||||
evict_mem = bo->mem;
|
||||
@@ -844,8 +844,10 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo,
|
||||
if (!fence)
|
||||
return 0;
|
||||
|
||||
if (no_wait_gpu)
|
||||
if (no_wait_gpu) {
|
||||
dma_fence_put(fence);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
dma_resv_add_shared_fence(bo->base.resv, fence);
|
||||
|
||||
@@ -1152,8 +1154,13 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
|
||||
/*
|
||||
* Remove the backing store if no placement is given.
|
||||
*/
|
||||
if (!placement->num_placement && !placement->num_busy_placement)
|
||||
return ttm_bo_pipeline_gutting(bo);
|
||||
if (!placement->num_placement && !placement->num_busy_placement) {
|
||||
ret = ttm_bo_pipeline_gutting(bo);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return ttm_tt_create(bo, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether we need to move buffer.
|
||||
@@ -1170,6 +1177,14 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
|
||||
ttm_flag_masked(&bo->mem.placement, new_flags,
|
||||
~TTM_PL_MASK_MEMTYPE);
|
||||
}
|
||||
/*
|
||||
* We might need to add a TTM.
|
||||
*/
|
||||
if (bo->mem.mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
|
||||
ret = ttm_tt_create(bo, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_validate);
|
||||
@@ -1673,7 +1688,7 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(ttm_bo_swapout);
|
||||
|
||||
void ttm_bo_swapout_all(struct ttm_bo_device *bdev)
|
||||
void ttm_bo_swapout_all(void)
|
||||
{
|
||||
struct ttm_operation_ctx ctx = {
|
||||
.interruptible = false,
|
||||
|
@@ -531,15 +531,12 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
|
||||
.interruptible = false,
|
||||
.no_wait_gpu = false
|
||||
};
|
||||
struct ttm_tt *ttm;
|
||||
struct ttm_tt *ttm = bo->ttm;
|
||||
pgprot_t prot;
|
||||
int ret;
|
||||
|
||||
ret = ttm_tt_create(bo, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
BUG_ON(!ttm);
|
||||
|
||||
ttm = bo->ttm;
|
||||
ret = ttm_tt_populate(ttm, &ctx);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@@ -300,8 +300,10 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,
|
||||
break;
|
||||
case -EBUSY:
|
||||
case -ERESTARTSYS:
|
||||
dma_fence_put(moving);
|
||||
return VM_FAULT_NOPAGE;
|
||||
default:
|
||||
dma_fence_put(moving);
|
||||
return VM_FAULT_SIGBUS;
|
||||
}
|
||||
|
||||
@@ -347,11 +349,6 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,
|
||||
|
||||
};
|
||||
|
||||
if (ttm_tt_create(bo, true)) {
|
||||
ret = VM_FAULT_OOM;
|
||||
goto out_io_unlock;
|
||||
}
|
||||
|
||||
ttm = bo->ttm;
|
||||
if (ttm_tt_populate(bo->ttm, &ctx)) {
|
||||
ret = VM_FAULT_OOM;
|
||||
@@ -506,8 +503,10 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
|
||||
int ttm_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
|
||||
void *buf, int len, int write)
|
||||
{
|
||||
unsigned long offset = (addr) - vma->vm_start;
|
||||
struct ttm_buffer_object *bo = vma->vm_private_data;
|
||||
unsigned long offset = (addr) - vma->vm_start +
|
||||
((vma->vm_pgoff - drm_vma_node_start(&bo->base.vma_node))
|
||||
<< PAGE_SHIFT);
|
||||
int ret;
|
||||
|
||||
if (len < 1 || (offset + len) >> PAGE_SHIFT > bo->num_pages)
|
||||
|
@@ -50,9 +50,6 @@ int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)
|
||||
|
||||
dma_resv_assert_held(bo->base.resv);
|
||||
|
||||
if (bo->ttm)
|
||||
return 0;
|
||||
|
||||
if (bdev->need_dma32)
|
||||
page_flags |= TTM_PAGE_FLAG_DMA32;
|
||||
|
||||
@@ -70,6 +67,7 @@ int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)
|
||||
page_flags |= TTM_PAGE_FLAG_SG;
|
||||
break;
|
||||
default:
|
||||
bo->ttm = NULL;
|
||||
pr_err("Illegal buffer object type\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
@@ -244,7 +242,6 @@ int ttm_tt_init(struct ttm_tt *ttm, struct ttm_buffer_object *bo,
|
||||
ttm_tt_init_fields(ttm, bo, page_flags);
|
||||
|
||||
if (ttm_tt_alloc_page_directory(ttm)) {
|
||||
ttm_tt_destroy(ttm);
|
||||
pr_err("Failed allocating page table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -268,7 +265,6 @@ int ttm_dma_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_buffer_object *bo,
|
||||
|
||||
INIT_LIST_HEAD(&ttm_dma->pages_list);
|
||||
if (ttm_dma_tt_alloc_page_directory(ttm_dma)) {
|
||||
ttm_tt_destroy(ttm);
|
||||
pr_err("Failed allocating page table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -290,7 +286,6 @@ int ttm_sg_tt_init(struct ttm_dma_tt *ttm_dma, struct ttm_buffer_object *bo,
|
||||
else
|
||||
ret = ttm_dma_tt_alloc_page_directory(ttm_dma);
|
||||
if (ret) {
|
||||
ttm_tt_destroy(ttm);
|
||||
pr_err("Failed allocating page table\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -313,11 +308,8 @@ EXPORT_SYMBOL(ttm_dma_tt_fini);
|
||||
|
||||
void ttm_tt_unbind(struct ttm_tt *ttm)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (ttm->state == tt_bound) {
|
||||
ret = ttm->func->unbind(ttm);
|
||||
BUG_ON(ret);
|
||||
ttm->func->unbind(ttm);
|
||||
ttm->state = tt_unbound;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user