mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
drm/nouveau/ttm: fix crash as a result of a recent ttm change
"drm/ttm: callback move_notify any time bo placement change v4" failed to avoid a NULL pointer dereference in nouveau caused by move_notify being expected to handle that case now. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
b2e0d195d2
commit
f7b24c42da
3 changed files with 6 additions and 7 deletions
|
@ -682,8 +682,7 @@ nouveau_vma_getmap(struct nouveau_channel *chan, struct nouveau_bo *nvbo,
|
|||
if (mem->mem_type == TTM_PL_VRAM)
|
||||
nouveau_vm_map(vma, node);
|
||||
else
|
||||
nouveau_vm_map_sg(vma, 0, mem->num_pages << PAGE_SHIFT,
|
||||
node, node->pages);
|
||||
nouveau_vm_map_sg(vma, 0, mem->num_pages << PAGE_SHIFT, node);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -810,7 +809,6 @@ nouveau_bo_move_flips(struct ttm_buffer_object *bo, bool evict, bool intr,
|
|||
static void
|
||||
nouveau_bo_move_ntfy(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem)
|
||||
{
|
||||
struct nouveau_mem *node = new_mem->mm_node;
|
||||
struct nouveau_bo *nvbo = nouveau_bo(bo);
|
||||
struct nouveau_vma *vma;
|
||||
|
||||
|
@ -822,7 +820,7 @@ nouveau_bo_move_ntfy(struct ttm_buffer_object *bo, struct ttm_mem_reg *new_mem)
|
|||
nvbo->page_shift == vma->vm->spg_shift) {
|
||||
nouveau_vm_map_sg(vma, 0, new_mem->
|
||||
num_pages << PAGE_SHIFT,
|
||||
node, node->pages);
|
||||
new_mem->mm_node);
|
||||
} else {
|
||||
nouveau_vm_unmap(vma);
|
||||
}
|
||||
|
@ -1173,7 +1171,7 @@ nouveau_bo_vma_add(struct nouveau_bo *nvbo, struct nouveau_vm *vm,
|
|||
nouveau_vm_map(vma, nvbo->bo.mem.mm_node);
|
||||
else
|
||||
if (nvbo->bo.mem.mem_type == TTM_PL_TT)
|
||||
nouveau_vm_map_sg(vma, 0, size, node, node->pages);
|
||||
nouveau_vm_map_sg(vma, 0, size, node);
|
||||
|
||||
list_add_tail(&vma->head, &nvbo->vma_list);
|
||||
vma->refcount = 1;
|
||||
|
|
|
@ -78,9 +78,10 @@ nouveau_vm_map(struct nouveau_vma *vma, struct nouveau_mem *node)
|
|||
|
||||
void
|
||||
nouveau_vm_map_sg(struct nouveau_vma *vma, u64 delta, u64 length,
|
||||
struct nouveau_mem *mem, dma_addr_t *list)
|
||||
struct nouveau_mem *mem)
|
||||
{
|
||||
struct nouveau_vm *vm = vma->vm;
|
||||
dma_addr_t *list = mem->pages;
|
||||
int big = vma->node->type != vm->spg_shift;
|
||||
u32 offset = vma->node->offset + (delta >> 12);
|
||||
u32 bits = vma->node->type - 12;
|
||||
|
|
|
@ -89,7 +89,7 @@ void nouveau_vm_map_at(struct nouveau_vma *, u64 offset, struct nouveau_mem *);
|
|||
void nouveau_vm_unmap(struct nouveau_vma *);
|
||||
void nouveau_vm_unmap_at(struct nouveau_vma *, u64 offset, u64 length);
|
||||
void nouveau_vm_map_sg(struct nouveau_vma *, u64 offset, u64 length,
|
||||
struct nouveau_mem *, dma_addr_t *);
|
||||
struct nouveau_mem *);
|
||||
|
||||
/* nv50_vm.c */
|
||||
void nv50_vm_map_pgt(struct nouveau_gpuobj *pgd, u32 pde,
|
||||
|
|
Loading…
Reference in a new issue