[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