[Nouveau] [xf86-video-nouveau] Properly cleanup fb for reverse-prime-offload

Hans de Goede hdegoede at redhat.com
Mon Jun 27 06:24:56 UTC 2016


Hi Ilia, Ben, et al.

Can I please get a review of this patch, and assuming the review is favorable,
can someone please push this ?

Regards,

Hans


p.s.

Is it ok if I request push rights to the nouveau repos / group
at freedesktop.org ?


On 03-06-16 14:46, Hans De Goede wrote:
> drmmode_set_scanout_pixmap(pix) adds drmmod->fb_id through a call
> to drmmode_xf86crtc_resize(), but on a subsequent
> drmmode_set_scanout_pixmap(NULL) it would not remove the fb.
>
> This keeps the crtc marked as busy, which causes the dgpu to not
> being able to runtime suspend, after an output attached to the dgpu
> has been used once. Which causes burning through an additional 10W
> of power and the laptop to run quite hot.
>
> This commit adds the missing remove fb call, allowing the dgpu to runtime
> suspend after an external monitor has been plugged into the laptop.
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  src/drmmode_display.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
> index b950f42..f326e46 100644
> --- a/src/drmmode_display.c
> +++ b/src/drmmode_display.c
> @@ -680,10 +680,16 @@ drmmode_set_scanout_pixmap(xf86CrtcPtr crtc, PixmapPtr ppix)
>  	PixmapPtr screenpix = screen->GetScreenPixmap(screen);
>  	xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
>  	drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
> +	drmmode_ptr drmmode = drmmode_crtc->drmmode;
>  	int c, total_width = 0, max_height = 0, this_x = 0;
>  	if (!ppix) {
> -		if (crtc->randr_crtc->scanout_pixmap)
> +		if (crtc->randr_crtc->scanout_pixmap) {
>  			PixmapStopDirtyTracking(crtc->randr_crtc->scanout_pixmap, screenpix);
> +			if (drmmode && drmmode->fb_id) {
> +				drmModeRmFB(drmmode->fd, drmmode->fb_id);
> +				drmmode->fb_id = 0;
> +			}
> +		}
>  		drmmode_crtc->scanout_pixmap_x = 0;
>  		return TRUE;
>  	}
>


More information about the Nouveau mailing list