[Nouveau] [PATCH] nvc0: switch mechanism for shader eviction to be a while loop
Tobias Klausmann
tobias.johannes.klausmann at mni.thm.de
Sun May 10 06:47:46 PDT 2015
On 10.05.2015 07:57, Ilia Mirkin wrote:
> This aligns it to work similarly to nv50. However there's no library
> code there, so the whole thing can be freed. Here we end up with an
> allocated node that's not attached to a specific program.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86792
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> index c156e91..5589695 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> @@ -683,11 +683,12 @@ nvc0_program_upload_code(struct nvc0_context *nvc0, struct nvc0_program *prog)
> ret = nouveau_heap_alloc(screen->text_heap, size, prog, &prog->mem);
> if (ret) {
> struct nouveau_heap *heap = screen->text_heap;
> - struct nouveau_heap *iter;
> - for (iter = heap; iter && iter->next != heap; iter = iter->next) {
> - struct nvc0_program *evict = iter->priv;
> - if (evict)
> - nouveau_heap_free(&evict->mem);
> + /* Note that the code library, which is allocated before anything else,
> + * does not have a priv pointer. We can stop once we hit it.
> + */
> + while (heap->next && heap->next->priv) {
> + struct nvc0_program *evict = heap->next->priv;
> + nouveau_heap_free(&evict->mem);
> }
> debug_printf("WARNING: out of code space, evicting all shaders.\n");
> ret = nouveau_heap_alloc(heap, size, prog, &prog->mem);
The new comment is a bit upside down, but thats not really a problem
R-b here as well
More information about the Nouveau
mailing list