From e03d0030391689cfd0fbca293d44d83dd7d9e356 Mon Sep 17 00:00:00 2001 From: Ville Syrjälä Date: Thu, 28 Mar 2019 18:23:54 +0200 Subject: lib/igt_fb: Don't leak the bufmgr and batch for converted surfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remember to free the bufmgr and batch after the convert surface is destroyed. We'll do that by sucking the relevant code into free_linear_mapping(), and for the sake of symmetry we'll move the setup code into setup_linear_mapping(). Cc: Dhinakaran Pandiyan Signed-off-by: Ville Syrjälä Reviewed-by: Dhinakaran Pandiyan --- lib/igt_fb.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 4210f745..6a43fcc4 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -1693,6 +1693,11 @@ static void free_linear_mapping(struct fb_blit_upload *blit) gem_sync(fd, linear->fb.gem_handle); gem_close(fd, linear->fb.gem_handle); + + if (blit->batch) { + intel_batchbuffer_free(blit->batch); + drm_intel_bufmgr_destroy(blit->bufmgr); + } } static void destroy_cairo_surface__blit(void *arg) @@ -1714,9 +1719,6 @@ static void destroy_cairo_surface__rendercopy(void *arg) free_linear_mapping(blit); - intel_batchbuffer_free(blit->batch); - drm_intel_bufmgr_destroy(blit->bufmgr); - free(blit); } @@ -1726,6 +1728,12 @@ static void setup_linear_mapping(struct fb_blit_upload *blit) struct igt_fb *fb = blit->fb; struct fb_blit_linear *linear = &blit->linear; + if (use_rendercopy(fb)) { + blit->bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); + blit->batch = intel_batchbuffer_alloc(blit->bufmgr, + intel_get_drm_devid(fd)); + } + /* * We create a linear BO that we'll map for the CPU to write to (using * cairo). This linear bo will be then blitted to its final @@ -1795,10 +1803,6 @@ static void create_cairo_surface__rendercopy(int fd, struct igt_fb *fb) blit->fd = fd; blit->fb = fb; - blit->bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); - blit->batch = intel_batchbuffer_alloc(blit->bufmgr, - intel_get_drm_devid(fd)); - setup_linear_mapping(blit); cairo_format = drm_format_to_cairo(fb->drm_format); @@ -2787,12 +2791,6 @@ static void create_cairo_surface__convert(int fd, struct igt_fb *fb) blit->base.fd = fd; blit->base.fb = fb; - if (use_rendercopy(fb)) { - blit->base.bufmgr = drm_intel_bufmgr_gem_init(fd, 4096); - blit->base.batch = intel_batchbuffer_alloc(blit->base.bufmgr, - intel_get_drm_devid(fd)); - } - blit->shadow_ptr = igt_fb_create_cairo_shadow_buffer(fd, drm_format, fb->width, fb->height, -- cgit v1.2.3