drmmode_set_scanout_pixmap_cpu() uses drmmode_map_slave_bo(), which maps a dumb bo. However, when cleaning up scanout pixmaps, it never destroys it, leading to a leak of mapped memory. With enough modesets, this can result in an insane amount of memory being mapped. Add dumb_bo_destroy() of the backing bo as part of the cleanup process.
v1: Initial commit v2: Unchanged Signed-off-by: Alex Goins <ago...@nvidia.com> --- hw/xfree86/drivers/modesetting/drmmode_display.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c index 46d9694..9ec751e 100644 --- a/hw/xfree86/drivers/modesetting/drmmode_display.c +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c @@ -828,12 +828,14 @@ drmmode_set_scanout_pixmap_cpu(xf86CrtcPtr crtc, PixmapPtr ppix) if (crtc->randr_crtc->scanout_pixmap) { ppriv = msGetPixmapPriv(drmmode, crtc->randr_crtc->scanout_pixmap); drmModeRmFB(drmmode->fd, ppriv->fb_id); + dumb_bo_destroy(drmmode->fd, ppriv->backing_bo); if (crtc->randr_crtc->scanout_pixmap_back) { drmmode_FiniSharedPixmapFlipping(crtc, drmmode); ppriv = msGetPixmapPriv(drmmode, crtc->randr_crtc->scanout_pixmap_back); drmModeRmFB(drmmode->fd, ppriv->fb_id); + dumb_bo_destroy(drmmode->fd, ppriv->backing_bo); } } if (drmmode_crtc->slave_damage) { -- 1.9.1 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel