summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2019-03-28 18:23:54 +0200
committerVille Syrjälä <ville.syrjala@linux.intel.com>2019-04-16 19:06:06 +0300
commite03d0030391689cfd0fbca293d44d83dd7d9e356 (patch)
tree752cfa048fdba04ecc26b1eb489066bd1f0b5787
parent996de63aec09437c31b256e9d7215d7522b3dce7 (diff)
lib/igt_fb: Don't leak the bufmgr and batch for converted surfaces
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 <dhinakaran.pandiyan@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
-rw-r--r--lib/igt_fb.c24
1 files 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,