[Mesa-dev] [PATCH 07/16] radeonsi: add reference count to si_compute

Gert Wollny gw.fossdev at gmail.com
Mon Aug 21 06:36:17 UTC 2017


Am Sonntag, den 20.08.2017, 15:48 +0200 schrieb Marek Olšák:
> The patch seems OK to me.

Hmm, 

you're right in that I was wrong about "program", I still need learn to
think in patches. 

However, when I look at si_delete_compute_state where
si_compute_reference is called: 

 
>+   si_compute_reference(&program, NULL);
>+}
...
>+static inline void
>+si_compute_reference(struct si_compute **dst, struct si_compute *src)
>+{
>+     if (pipe_reference(&(*dst)->reference, &src->reference))
>+       si_destroy_compute(*dst);

then src will be a NULL pointer and de-referencing it is most likely
already undefined behavior. 

Anyway, in the end the address of a member is taken (i.e.
src+offsetof(src, reference), and passed as a pointer, and this pointer
 is later de-referenced in 

  pipe_reference_described

if it is not 0. 

For now this runs through because "reference" is the first element in
the si_compute struct, and hence its offset is 0 and &src->reference
will also be 0, but the moment someone decides to reorder si_compute
this may no longer the case and the code would break.

At the least it should be commented that the element reference within
the structure si_compute must always be at offset 0.

Best, 
Gert



More information about the mesa-dev mailing list