[PATCH weston 15/68] compositor-drm: Add explicit type member to drm_fb

Pekka Paalanen ppaalanen at gmail.com
Wed Feb 22 13:45:54 UTC 2017


On Tue, 21 Feb 2017 15:29:09 +0200
Pekka Paalanen <ppaalanen at gmail.com> wrote:

> On Fri,  9 Dec 2016 19:57:30 +0000
> Daniel Stone <daniels at collabora.com> wrote:
> 
> > Rather than magically trying to infer what the buffer is and what we
> > should do with it when we go to destroy it, add an explicit type
> > instead.
> > 
> > Differential Revision: https://phabricator.freedesktop.org/D1488
> > 
> > Signed-off-by: Daniel Stone <daniels at collabora.com>
> > ---
> >  libweston/compositor-drm.c | 50 +++++++++++++++++++++++++++++-----------------
> >  1 file changed, 32 insertions(+), 18 deletions(-)

> >  	weston_buffer_reference(&fb->buffer_ref, buffer);
> >  }
> >  
> > @@ -452,15 +461,19 @@ drm_output_release_fb(struct drm_output *output, struct drm_fb *fb)
> >  	if (!fb)
> >  		return;
> >  
> > -	if (fb->map &&
> > -            (fb != output->dumb[0] && fb != output->dumb[1])) {
> > -		drm_fb_destroy_dumb(fb);  
> 
> This piece sent me into a recursive "well, actually..." loop.
> 
> It looked like dead code at first hand, as this gets hit when
> output->dumb and fb don't match. When would that be? I would guess when
> video mode changed.
> 
> I think changing resolutions would hit this path, when flipping to a
> new dumb buffer of a different size than one coming out of scanout
> which cannot be destroyed until pageflip completed.
> 
> Except I am wrong in a couple of ways: destroying the buffer is fine,
> the kernel will keep it referenced as long as necessary anyway. And,
> drm_output_switch_mode() does destroy everything immediately.
> 
> So this bit is ok. Unless there is a third well-actually.

And there is it:

< MrCooper> pq: IME KMS framebuffers aren't reference-counted in the
kernel; destroying an fb which is still being scanned out by any CRTCs
turns off those CRTCs

Is it then so, that drm_output_switch_mode() is wrong to destroy the FB
immediately before even flipping a new one, but as it does so, there is
no leak introduced by removing the above drm_fb_destroy_dumb() call?

I.e. the patch does not regress anything because of a bug elsewhere?

If that is so, my R-b stands, as fixing switch_mode is a whole another
matter. Also the refcounting introduced later in this series offer a
much better basis for fixing switch_mode.


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 801 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20170222/9d3cafbd/attachment.sig>


More information about the wayland-devel mailing list