Messages in this thread | | | Subject | Re: [PATCH v2 2/2] drm/vc4: Allocated/liberate the binner BO at firstopen/lastclose | From | Paul Kocialkowski <> | Date | Thu, 21 Mar 2019 16:58:35 +0100 |
| |
Hi,
Le mercredi 20 mars 2019 à 09:58 -0700, Eric Anholt a écrit : > Paul Kocialkowski <paul.kocialkowski@bootlin.com> writes: > > > The binner BO is a pre-requisite to GPU operations, so we must ensure > > that it is always allocated when the GPU is in use. Currently, we are > > allocating it at probe time and liberating/allocating it during runtime > > pm cycles. > > > > First, since the binner buffer is only required for GPU rendering, it's > > a waste to allocate it when the driver probes since internal users of > > the driver (such as fbcon) won't try to use the GPU. > > > > Move the allocation/liberation to the firstopen/lastclose instead to > > only allocate it when userspace has opened the device and adapt the IRQ > > handler to return early when no binner BO was allocated yet. > > > > Second, because the buffer is allocated from the same pool as other GPU > > buffers, we might run into a situation where we are out of memory at > > runtime resume. This causes the binner BO allocation to fail and results > > in all subsequent operations to fail, resulting in a major hang in > > userspace. > > > > As a result, keep the buffer alive during runtime pm. > > > > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com> > > --- > > diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c > > index 4cd2ccfe15f4..efaba2b02f6c 100644 > > --- a/drivers/gpu/drm/vc4/vc4_irq.c > > +++ b/drivers/gpu/drm/vc4/vc4_irq.c > > @@ -64,6 +64,9 @@ vc4_overflow_mem_work(struct work_struct *work) > > struct vc4_exec_info *exec; > > unsigned long irqflags; > > > > + if (!bo) > > + return; > > + > > bin_bo_slot = vc4_v3d_get_bin_slot(vc4); > > if (bin_bo_slot < 0) { > > DRM_ERROR("Couldn't allocate binner overflow mem\n"); > > Hmm. We take the OOM IRQ on poweron, have no bin BO since nobody's > opened yet, and leave it. Do we ever get the OOM IRQ again after that? > Seems like vc4_allocate_bin_bo() might need to kick something so that we > can fill an OOM request.
I just had a look and it seems that we do get the OOM interrupt again after the bin BO is allocated. Actually, I can see it kicking from time to time when using X with glamor.
From what I understood, this looks fairly legitimate. Should we be worried about this?
Cheers,
Paul
-- Paul Kocialkowski, Bootlin Embedded Linux and kernel engineering https://bootlin.com
| |