Reviewed-by: Dave Airlie <airl...@redhat.com>
On 2 June 2016 at 05:04, Hans de Goede <hdego...@redhat.com> wrote: > drmmode_set_scanout_pixmap_gpu(pix) adds drmmod->fb_id through a call > to drmmode_xf86crtc_resize(), but on a subsequent > drmmode_set_scanout_pixmap_gpu(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. > > Note this also makes drmmode_set_scanout_pixmap_gpu(NULL) match the > behavior of drmmode_set_scanout_pixmap_cpu(NULL) which was already > removing the fb. > > Signed-off-by: Hans de Goede <hdego...@redhat.com> > --- > hw/xfree86/drivers/modesetting/drmmode_display.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c > b/hw/xfree86/drivers/modesetting/drmmode_display.c > index 5b90369..4c55c4e 100644 > --- a/hw/xfree86/drivers/modesetting/drmmode_display.c > +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c > @@ -643,11 +643,17 @@ drmmode_set_scanout_pixmap_gpu(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->fb_id) { > + drmModeRmFB(drmmode->fd, drmmode->fb_id); > + drmmode->fb_id = 0; > + } > + } > drmmode_crtc->prime_pixmap_x = 0; > return TRUE; > } > -- > 2.7.4 > > _______________________________________________ > xorg-devel@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: https://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel