search for: nouveau_fence_new

Displaying 20 results from an estimated 54 matches for "nouveau_fence_new".

2023 Aug 29
1
[PATCH drm-misc-next] drm/nouveau: fence: fix undefined fence state after emit
nouveau_fence_emit() can fail before and after initializing the dma-fence and hence before and after initializing the dma-fence' kref. In order to avoid nouveau_fence_emit() potentially failing before dma-fence initialization pass the channel to nouveau_fence_new() already and perform the required check before even allocating the fence. While at it, restore the original behavior of nouveau_fence_new() and add nouveau_fence_create() for separate (pre-)allocation instead. Always splitting up allocation end emit wasn't a good idea in the first place. Henc...
2022 Aug 19
4
[PATCH] nouveau: explicitly wait on the fence in nouveau_bo_move_m2mf
...m/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c index 35bb0bb3fe61..126b3c6e12f9 100644 --- a/drivers/gpu/drm/nouveau/nouveau_bo.c +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c @@ -822,6 +822,15 @@ nouveau_bo_move_m2mf(struct ttm_buffer_object *bo, int evict, if (ret == 0) { ret = nouveau_fence_new(chan, false, &fence); if (ret == 0) { + /* TODO: figure out a better solution here + * + * wait on the fence here explicitly as going through + * ttm_bo_move_accel_cleanup somehow doesn't seem to do it. + * + * Without this the operation can timeout and we'll...
2020 Jul 29
0
BUG: unable to handle page fault for address nouveau_fence_new
...003ff R12: 00000001067fdb37 R13: ffff9a53f5c07480 R14: 0000000000000dc0 R15: ffff9a53f5c07480 FS: 00007fb65997f700(0000) GS:ffff9a53f6cc0000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00000001067fdb67 CR3: 000000013d42d000 CR4: 00000000000406e0 Call Trace: nouveau_fence_new+0x42/0xc0 [nouveau] nouveau_gem_ioctl_pushbuf+0xe30/0x1230 [nouveau] ? nouveau_gem_ioctl_new+0xf0/0xf0 [nouveau] drm_ioctl_kernel+0xcc/0x110 [drm] drm_ioctl+0x202/0x390 [drm] ? nouveau_gem_ioctl_new+0xf0/0xf0 [nouveau] nouveau_drm_ioctl+0x91/0xd0 [nouveau] ksys_ioctl+0xa4/0xd0 __x64_sys_ioc...
2010 Jan 06
0
[PATCH] Fix null deref in nouveau_fence_emit due to deleted fence
...ence); + validate_fini_list(&op->gart_list, fence); + validate_fini_list(&op->both_list, fence); } static int @@ -420,10 +413,6 @@ nouveau_gem_pushbuf_validate(struct nouveau_channel *chan, INIT_LIST_HEAD(&op->gart_list); INIT_LIST_HEAD(&op->both_list); - ret = nouveau_fence_new(chan, &op->fence, false); - if (ret) - return ret; - if (nr_buffers == 0) return 0; @@ -541,6 +530,7 @@ nouveau_gem_ioctl_pushbuf(struct drm_device *dev, void *data, struct drm_nouveau_gem_pushbuf_bo *bo = NULL; struct nouveau_channel *chan; struct validate_op op; + struct nouv...
2014 Jun 16
2
[PATCH 1/2] gallium/nouveau: decouple nouveau_fence implementation from screen
...ns(+), 78 deletions(-) diff --git a/src/gallium/drivers/nouveau/nouveau_fence.c b/src/gallium/drivers/nouveau/nouveau_fence.c index c686710..09b3b1e 100644 --- a/src/gallium/drivers/nouveau/nouveau_fence.c +++ b/src/gallium/drivers/nouveau/nouveau_fence.c @@ -31,14 +31,14 @@ #endif boolean -nouveau_fence_new(struct nouveau_screen *screen, struct nouveau_fence **fence, +nouveau_fence_new(struct nouveau_fence_mgr *mgr, struct nouveau_fence **fence, boolean emit) { *fence = CALLOC_STRUCT(nouveau_fence); if (!*fence) return FALSE; - (*fence)->screen = screen;...
2023 Aug 05
1
[PATCH drm-misc-next] nouveau/dmem: fix copy-paste error in nouveau_dmem_migrate_chunk()
.../gpu/drm/nouveau/nouveau_dmem.c b/drivers/gpu/drm/nouveau/nouveau_dmem.c index 4ad40e42cae1..61e84562094a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_dmem.c +++ b/drivers/gpu/drm/nouveau/nouveau_dmem.c @@ -678,7 +678,7 @@ static void nouveau_dmem_migrate_chunk(struct nouveau_drm *drm, } if (!nouveau_fence_new(&fence)) - nouveau_fence_emit(fence, chunk->drm->dmem->migrate.chan); + nouveau_fence_emit(fence, drm->dmem->migrate.chan); migrate_vma_pages(args); nouveau_dmem_fence_done(&fence); nouveau_pfns_map(svmm, args->vma->vm_mm, args->start, pfns, i); base-commit:...
2020 Jul 28
1
BUG: unable to handle page fault for address nouveau_fence_new
...003ff R12: 00000001067fdb37 R13: ffff9a53f5c07480 R14: 0000000000000dc0 R15: ffff9a53f5c07480 FS: 00007fb65997f700(0000) GS:ffff9a53f6cc0000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00000001067fdb67 CR3: 000000013d42d000 CR4: 00000000000406e0 Call Trace: nouveau_fence_new+0x42/0xc0 [nouveau] nouveau_gem_ioctl_pushbuf+0xe30/0x1230 [nouveau] ? nouveau_gem_ioctl_new+0xf0/0xf0 [nouveau] drm_ioctl_kernel+0xcc/0x110 [drm] drm_ioctl+0x202/0x390 [drm] ? nouveau_gem_ioctl_new+0xf0/0xf0 [nouveau] nouveau_drm_ioctl+0x91/0xd0 [nouveau] ksys_ioctl+0xa4/0xd0 __x64_sys_ioc...
2013 Nov 30
1
[PATCH 1/2] nouveau: avoid leaking fences while waiting
...lists.freedesktop.org> --- TBH I'm pretty confused by the whole fence refcounting logic and its interaction with emits, updates, etc. However valgrind was happy with this. But it wasn't happy when I was doing nouveau_fence_wait from nv50_draw_elements, saying that the fence allocated by nouveau_fence_new was leaked. (Note that the kick handler when doing vbo stuff does NOT do nouveau_fence_next on its own... but adding that there still didn't fix all my issues, nor is it likely desirable.) src/gallium/drivers/nouveau/nouveau_fence.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletio...
2016 Feb 02
2
[Bug 93968] New: BUG in nouveau_fbcon_sync()
...fffff813fb6c5>] dump_stack+0x4e/0x79 [ 37.438538] [<ffffffff810a6fb9>] ___might_sleep+0x149/0x200 [ 37.438540] [<ffffffff810a70b9>] __might_sleep+0x49/0x80 [ 37.438544] [<ffffffff81202dfd>] kmem_cache_alloc_trace+0x20d/0x2e0 [ 37.438600] [<ffffffffa0272e9b>] ? nouveau_fence_new+0x3b/0x90 [nouveau] [ 37.438624] [<ffffffffa0272e9b>] nouveau_fence_new+0x3b/0x90 [nouveau] [ 37.438649] [<ffffffffa02707b2>] nouveau_channel_idle+0x42/0xb0 [nouveau] [ 37.438673] [<ffffffffa026bb3f>] nouveau_fbcon_sync+0x7f/0xb0 [nouveau] [ 37.438677] [<ffffffff814...
2010 May 14
1
Kernel module fails to initialize on AMD751 based system with NV34
...22/0x40 May 14 19:17:28 max-desktop kernel: [ 3.743667] [<d8a286c8>] nouveau_dma_wait+0x38/0x1b0 [nouveau] May 14 19:17:28 max-desktop kernel: [ 3.743715] [<d8a2a4ec>] nouveau_fence_emit+0x12c/0x170 [nouveau] May 14 19:17:28 max-desktop kernel: [ 3.743763] [<d8a2a5b0>] nouveau_fence_new+0x80/0xe0 [nouveau] May 14 19:17:28 max-desktop kernel: [ 3.743778] [<c0356582>] ? ioread32+0x22/0x40 May 14 19:17:28 max-desktop kernel: [ 3.743821] [<d8a2144b>] nouveau_channel_free+0x8b/0x1f0 [nouveau] May 14 19:17:28 max-desktop kernel: [ 3.743865] [<d8a21a8e>] nou...
2015 Mar 29
1
[PATCH] nouveau: synchronize "scratch runout" destruction with the command stream
...L, &nv->scratch.runout[nv->scratch.nr_runout]); - } while (nv->scratch.nr_runout); - FREE(nv->scratch.runout); + struct bos *b = MALLOC(sizeof(*b)); + b->arr = nv->scratch.runout; + b->nr = nv->scratch.nr_runout; + + struct nouveau_fence *fence = NULL; + nouveau_fence_new(nv->screen, &fence, TRUE); + nouveau_fence_work(fence, unref_bos, b); + nv->scratch.end = 0; nv->scratch.runout = NULL; + nv->scratch.nr_runout = 0; } /* Allocate an extra bo if we can't fit everything we need simultaneously. -- 2.1.0
2019 Aug 08
0
[PATCH 6/9] nouveau: simplify nouveau_dmem_migrate_to_ram
..., - nouveau_dmem_page_addr(spage)); - if (ret) { - dst_pfns[i] = MIGRATE_PFN_ERROR; - __free_page(dpage); - continue; - } - } + if (drm->dmem->migrate.copy_func(drm, 1, NOUVEAU_APER_HOST, *dma_addr, + NOUVEAU_APER_VRAM, nouveau_dmem_page_addr(spage))) + goto error_dma_unmap; - nouveau_fence_new(drm->dmem->migrate.chan, false, &fault->fence); - - return; + args->dst[0] = migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED; + ret = 0; +error_dma_unmap: + dma_unmap_page(dev, *dma_addr, PAGE_SIZE, DMA_BIDIRECTIONAL); +error_free_page: + __free_page(dpage); error: - for (ad...
2019 Jul 29
0
[PATCH 5/9] nouveau: simplify nouveau_dmem_migrate_to_ram
...NOUVEAU_APER_VRAM, - nouveau_dmem_page_addr(spage)); - if (ret) { - dst_pfns[i] = MIGRATE_PFN_ERROR; - __free_page(dpage); - continue; - } - } + *dma_addr = dma_map_page(dev, dpage, 0, PAGE_SIZE, DMA_BIDIRECTIONAL); + if (dma_mapping_error(dev, *dma_addr)) + goto error_free_page; - nouveau_fence_new(drm->dmem->migrate.chan, false, &fault->fence); + if (drm->dmem->migrate.copy_func(drm, 1, NOUVEAU_APER_HOST, *dma_addr, + NOUVEAU_APER_VRAM, nouveau_dmem_page_addr(spage))) + goto error_dma_unmap; - return; + *dst = migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED; +e...
2019 Aug 08
1
[PATCH 6/9] nouveau: simplify nouveau_dmem_migrate_to_ram
...{ > - dst_pfns[i] = MIGRATE_PFN_ERROR; > - __free_page(dpage); > - continue; > - } > - } > + if (drm->dmem->migrate.copy_func(drm, 1, NOUVEAU_APER_HOST, *dma_addr, > + NOUVEAU_APER_VRAM, nouveau_dmem_page_addr(spage))) > + goto error_dma_unmap; > > - nouveau_fence_new(drm->dmem->migrate.chan, false, &fault->fence); > - > - return; > + args->dst[0] = migrate_pfn(page_to_pfn(dpage)) | MIGRATE_PFN_LOCKED; > + ret = 0; This needs to be "return 0;" here so that dpage is not unmapped while the DMA I/O is in progress. It gets unma...
2014 Jun 17
2
[PATCH try 2 1/2] gallium/nouveau: decouple nouveau_fence implementation from screen
...tions(+), 78 deletions(-) diff --git a/src/gallium/drivers/nouveau/nouveau_fence.c b/src/gallium/drivers/nouveau/nouveau_fence.c index c686710..09b3b1e 100644 --- a/src/gallium/drivers/nouveau/nouveau_fence.c +++ b/src/gallium/drivers/nouveau/nouveau_fence.c @@ -31,14 +31,14 @@ #endif boolean -nouveau_fence_new(struct nouveau_screen *screen, struct nouveau_fence **fence, +nouveau_fence_new(struct nouveau_fence_mgr *mgr, struct nouveau_fence **fence, boolean emit) { *fence = CALLOC_STRUCT(nouveau_fence); if (!*fence) return FALSE; - (*fence)->screen = screen; + (...
2019 Jul 29
0
[PATCH 6/9] nouveau: simplify nouveau_dmem_migrate_vma
...ntinue; - } - - ret = copy(drm, 1, NOUVEAU_APER_VRAM, - nouveau_dmem_page_addr(dpage), - NOUVEAU_APER_HOST, - migrate->dma[migrate->dma_nr++]); - if (ret) { - nouveau_dmem_page_free_locked(drm, dpage); - dst_pfns[i] = 0; - continue; - } - } + struct page *dpage, *spage; - nouveau_fence_new(drm->dmem->migrate.chan, false, &migrate->fence); + spage = migrate_pfn_to_page(src); + if (!spage || !(src & MIGRATE_PFN_MIGRATE)) + goto out; - return; + dpage = nouveau_dmem_page_alloc_locked(drm); + if (!dpage) + return 0; -error: - for (addr = start, i = 0; addr < end...
2015 Jan 02
2
[PATCH] nv50: enable texture compression
...t;= 0x01000101); + BEGIN_NV04(push, NV50_3D(RT_CONTROL), 1); PUSH_DATA (push, 1); @@ -871,7 +878,7 @@ nv50_screen_create(struct nouveau_device *dev) if (!nv50_blitter_create(screen)) goto fail; - nv50_screen_init_hwctx(screen); + nv50_screen_init_hwctx(dev, screen); nouveau_fence_new(&screen->base, &screen->base.fence.current, FALSE); -- 2.2.1
2017 Aug 13
1
[Bug 102192] New: Dell XPS 15 9560: PU: 1 PID: 58 at drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.c:190 gf100_vm_flush+0x1b3/0x1c0
...ll Trace: [ 1730.734259] nvkm_vm_unmap_at+0xb9/0x100 [nouveau] [ 1730.734272] nvkm_vm_unmap+0x1b/0x20 [nouveau] [ 1730.734288] nouveau_vram_manager_del+0x60/0x80 [nouveau] [ 1730.734291] ttm_bo_mem_put+0x2a/0x30 [ttm] [ 1730.734293] ttm_bo_move_accel_cleanup+0x10c/0x200 [ttm] [ 1730.734308] ? nouveau_fence_new+0x58/0x90 [nouveau] [ 1730.734324] nouveau_bo_move_m2mf.constprop.14+0x170/0x1a0 [nouveau] [ 1730.734340] nouveau_bo_move+0xac/0x430 [nouveau] [ 1730.734342] ttm_bo_handle_move_mem+0x280/0x5b0 [ttm] [ 1730.734344] ttm_bo_evict+0x116/0x2b0 [ttm] [ 1730.734346] ? find_busiest_group+0x122/0x980 [...
2015 Jan 02
0
[PATCH] nv50: enable texture compression
..._3D(RT_CONTROL), 1); > PUSH_DATA (push, 1); > > @@ -871,7 +878,7 @@ nv50_screen_create(struct nouveau_device *dev) > if (!nv50_blitter_create(screen)) > goto fail; > > - nv50_screen_init_hwctx(screen); > + nv50_screen_init_hwctx(dev, screen); > > nouveau_fence_new(&screen->base, &screen->base.fence.current, FALSE); > > -- > 2.2.1 > > _______________________________________________ > Nouveau mailing list > Nouveau at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/nouveau
2014 May 14
0
[RFC PATCH v1 07/16] drm/nouveau: rework to new fence interface
...nouveau_fence_del); + fence_put(&(*pfence)->base); *pfence = NULL; } @@ -307,7 +377,7 @@ struct nouveau_fence * nouveau_fence_ref(struct nouveau_fence *fence) { if (fence) - kref_get(&fence->kref); + fence_get(&fence->base); return fence; } @@ -325,9 +395,7 @@ nouveau_fence_new(struct nouveau_channel *chan, bool sysmem, if (!fence) return -ENOMEM; - INIT_LIST_HEAD(&fence->work); fence->sysmem = sysmem; - kref_init(&fence->kref); ret = nouveau_fence_emit(fence, chan); if (ret) @@ -336,3 +404,85 @@ nouveau_fence_new(struct nouveau_channel *ch...