Index: external/bsd/drm2/dist/drm/drm_prime.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/dist/drm/drm_prime.c,v retrieving revision 1.7 diff -p -u -r1.7 drm_prime.c --- external/bsd/drm2/dist/drm/drm_prime.c 27 Aug 2018 15:32:39 -0000 1.7 +++ external/bsd/drm2/dist/drm/drm_prime.c 4 Oct 2019 12:43:59 -0000 @@ -910,10 +910,12 @@ drm_prime_bus_dmamap_load_sgt(bus_dma_ta segs = kcalloc(sgt->sgt_npgs, sizeof(segs[0]), GFP_KERNEL); if (segs == NULL) { ret = -ENOMEM; +printk(KERN_ERR "%s:%d drm_prime_bus_dmamap_load_sgt kcalloc failed: %d\n", __func__, __LINE__, ret); goto out0; } ret = drm_prime_sg_to_bus_dmamem(dmat, segs, nsegs, &nsegs, sgt); +if (ret) printk(KERN_ERR "%s:%d drm_prime_sg_to_bus_dmamem failed: %d\n", __func__, __LINE__, ret); if (ret) goto out1; KASSERT(nsegs <= sgt->sgt_npgs); @@ -921,6 +923,7 @@ drm_prime_bus_dmamap_load_sgt(bus_dma_ta /* XXX errno NetBSD->Linux */ ret = -bus_dmamap_load_raw(dmat, map, segs, nsegs, size, BUS_DMA_NOWAIT); +if (ret) printk(KERN_ERR "%s:%d drm_prime_sg_to_bus_dmamem failed: %d\n", __func__, __LINE__, ret); if (ret) goto out1; Index: external/bsd/drm2/dist/drm/radeon/radeon_ttm.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/dist/drm/radeon/radeon_ttm.c,v retrieving revision 1.15 diff -p -u -r1.15 radeon_ttm.c --- external/bsd/drm2/dist/drm/radeon/radeon_ttm.c 27 Aug 2018 15:22:54 -0000 1.15 +++ external/bsd/drm2/dist/drm/radeon/radeon_ttm.c 4 Oct 2019 12:43:59 -0000 @@ -774,6 +774,7 @@ static int radeon_ttm_tt_populate(struct #ifdef __NetBSD__ r = drm_prime_bus_dmamap_load_sgt(ttm->bdev->dmat, gtt->ttm.dma_address, ttm->sg); +if (r) printk(KERN_ERR "%s:%d drm_prime_bus_dmamap_load_sgt failed: %d\n", __func__, __LINE__, r); if (r) return r; #else Index: external/bsd/drm2/dist/drm/ttm/ttm_bo.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/dist/drm/ttm/ttm_bo.c,v retrieving revision 1.15 diff -p -u -r1.15 ttm_bo.c --- external/bsd/drm2/dist/drm/ttm/ttm_bo.c 2 Feb 2019 21:46:27 -0000 1.15 +++ external/bsd/drm2/dist/drm/ttm/ttm_bo.c 4 Oct 2019 12:43:59 -0000 @@ -276,6 +276,7 @@ static int ttm_bo_add_ttm(struct ttm_buf case ttm_bo_type_kernel: bo->ttm = bdev->driver->ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT, page_flags, glob->dummy_read_page); +if (bo->ttm == NULL) printk(KERN_ERR "%s:%d driver->ttm_tt_create failed\n", __func__, __LINE__); if (unlikely(bo->ttm == NULL)) ret = -ENOMEM; break; @@ -284,6 +285,7 @@ static int ttm_bo_add_ttm(struct ttm_buf page_flags | TTM_PAGE_FLAG_SG, glob->dummy_read_page); if (unlikely(bo->ttm == NULL)) { +if (ret) printk(KERN_ERR "%s:%d driver->ttm_tt_create failed\n", __func__, __LINE__); ret = -ENOMEM; break; } @@ -1027,6 +1029,7 @@ static int ttm_bo_move_buffer(struct ttm * instead of doing it here. */ ret = ttm_bo_wait(bo, false, interruptible, no_wait_gpu); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_wait failed: %d\n", __func__, __LINE__, ret); if (ret) return ret; mem.num_pages = bo->num_pages; @@ -1040,10 +1043,12 @@ static int ttm_bo_move_buffer(struct ttm */ ret = ttm_bo_mem_space(bo, placement, &mem, interruptible, no_wait_gpu); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_mem_space failed: %d\n", __func__, __LINE__, ret); if (ret) goto out_unlock; ret = ttm_bo_handle_move_mem(bo, &mem, false, interruptible, no_wait_gpu); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_handle_move_mem failed: %d\n", __func__, __LINE__, ret); out_unlock: if (ret && mem.mm_node) ttm_bo_mem_put(bo, &mem); @@ -1101,6 +1106,7 @@ int ttm_bo_validate(struct ttm_buffer_ob if (!ttm_bo_mem_compat(placement, &bo->mem, &new_flags)) { ret = ttm_bo_move_buffer(bo, placement, interruptible, no_wait_gpu); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_mem_compat failed: %d\n", __func__, __LINE__, ret); if (ret) return ret; } else { @@ -1116,6 +1122,7 @@ int ttm_bo_validate(struct ttm_buffer_ob */ if (bo->mem.mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { ret = ttm_bo_add_ttm(bo, true); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_add_ttm failed: %d\n", __func__, __LINE__, ret); if (ret) return ret; } @@ -1219,6 +1226,7 @@ int ttm_bo_init(struct ttm_bo_device *bd bo->type == ttm_bo_type_sg) ret = drm_vma_offset_add(&bdev->vma_manager, &bo->vma_node, bo->mem.num_pages); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_init failed: %d\n", __func__, __LINE__, ret); /* passed reservation objects should already be locked, * since otherwise lockdep will be angered in radeon. @@ -1229,7 +1237,10 @@ int ttm_bo_init(struct ttm_bo_device *bd } if (likely(!ret)) +{ ret = ttm_bo_validate(bo, placement, interruptible, false); +if (ret) printk(KERN_ERR "%s:%d ttm_bo_validate failed: %d\n", __func__, __LINE__, ret); +} if (!resv) ttm_bo_unreserve(bo); Index: external/bsd/drm2/dist/drm/ttm/ttm_memory.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/dist/drm/ttm/ttm_memory.c,v retrieving revision 1.4 diff -p -u -r1.4 ttm_memory.c --- external/bsd/drm2/dist/drm/ttm/ttm_memory.c 27 Aug 2018 14:41:10 -0000 1.4 +++ external/bsd/drm2/dist/drm/ttm/ttm_memory.c 4 Oct 2019 12:43:59 -0000 @@ -568,8 +568,17 @@ static int ttm_mem_global_alloc_zone(str != 0)) { if (no_wait) return -ENOMEM; - if (unlikely(count-- == 0)) - return -ENOMEM; + if (unlikely(count-- == 0)) { + if (interruptible) { + interruptible = false; + kpause("ttmgaz", true, 1, NULL); + count = TTM_MEMORY_ALLOC_RETRIES; + } else { + printk(KERN_ERR "%s:%d No memory\n", + __func__, __LINE__); + return -ENOMEM; + } + } ttm_shrink(glob, false, memory + (memory >> 2) + 16); } Index: external/bsd/drm2/dist/drm/ttm/ttm_tt.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/dist/drm/ttm/ttm_tt.c,v retrieving revision 1.11 diff -p -u -r1.11 ttm_tt.c --- external/bsd/drm2/dist/drm/ttm/ttm_tt.c 27 Aug 2018 04:58:37 -0000 1.11 +++ external/bsd/drm2/dist/drm/ttm/ttm_tt.c 4 Oct 2019 12:43:59 -0000 @@ -354,10 +354,12 @@ int ttm_tt_bind(struct ttm_tt *ttm, stru return 0; ret = ttm->bdev->driver->ttm_tt_populate(ttm); +if (ret) printk(KERN_ERR "%s:%d ttm_tt_populate failed: %d\n", __func__, __LINE__, ret); if (ret) return ret; ret = ttm->func->bind(ttm, bo_mem); +if (ret) printk(KERN_ERR "%s:%d ttm -> bind failed: %d\n", __func__, __LINE__, ret); if (unlikely(ret != 0)) return ret; Index: external/bsd/drm2/ttm/ttm_bus_dma.c =================================================================== RCS file: /cvsroot/src/sys/external/bsd/drm2/ttm/ttm_bus_dma.c,v retrieving revision 1.8 diff -p -u -r1.8 ttm_bus_dma.c --- external/bsd/drm2/ttm/ttm_bus_dma.c 21 Apr 2019 15:49:50 -0000 1.8 +++ external/bsd/drm2/ttm/ttm_bus_dma.c 4 Oct 2019 12:43:59 -0000 @@ -64,6 +64,7 @@ ttm_bus_dma_populate(struct ttm_dma_tt * /* Wire the uvm pages and fill the ttm page array. */ ret = ttm_tt_wire(&ttm_dma->ttm); +if (ret) printk(KERN_ERR "%s:%d ttm_tt_wire failed: %d\n", __func__, __LINE__, ret); if (ret) goto fail0; @@ -78,6 +79,7 @@ ttm_bus_dma_populate(struct ttm_dma_tt * ret = -bus_dmamap_load_pglist(ttm_dma->ttm.bdev->dmat, ttm_dma->dma_address, &ttm_dma->ttm.pglist, (ttm_dma->ttm.num_pages << PAGE_SHIFT), BUS_DMA_NOWAIT); +if (ret) printk(KERN_ERR "%s:%d bus_dmamap_load_pglist failed: %d\n", __func__, __LINE__, ret); if (ret) goto fail1;