Paul Kocialkowski <paul.kocialkowski@xxxxxxxxxxx> writes: > The binner BO is not required until the V3D is in use, so avoid > allocating it at probe and do it on the first non-dumb BO allocation. > > Keep track of which clients are using the V3D and liberate the buffer > when there is none left, using a kref. Protect the logic with a > mutex to avoid race conditions. > > The binner BO is created at the time of the first render ioctl and is > destroyed when there is no client and no exec job using it left. > > The Out-Of-Memory (OOM) interrupt also gets some tweaking, to avoid > enabling it before having allocated a binner bo. > > We also want to keep the BO alive during runtime suspend/resume to avoid > failing to allocate it at resume. This happens when the CMA pool is > full at that point and results in a hard crash. > > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@xxxxxxxxxxx> > @@ -313,6 +321,49 @@ static int bin_bo_alloc(struct vc4_dev *vc4) > return ret; > } > > +int vc4_v3d_bin_bo_get(struct vc4_dev *vc4, bool *used) > +{ > + int ret = 0; > + > + mutex_lock(&vc4->bin_bo_lock); > + > + if (used && *used) > + goto complete; > + > + if (used) > + *used = true; > + > + if (vc4->bin_bo) { > + kref_get(&vc4->bin_bo_kref); > + goto complete; > + } > + > + ret = bin_bo_alloc(vc4); I think this block wants to be: if (vc4->bin_bo) kref_get(&vc4->bin_bo_kref); else ret = bin_bo_alloc(vc4); if (ret == 0 && used) *used = true; (so we don't flag used if bin_bo_alloc fails) If you agree, then the series is: Reviewed-by: Eric Anholt <eric@xxxxxxxxxx> > + > +complete: > + mutex_unlock(&vc4->bin_bo_lock); > + > + return ret; > +}
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel