[PATCH weston 1.0] compositor-drm: Remove drm_disable_unused_sprites()

ning.tang at intel.com ning.tang at intel.com
Wed Dec 26 23:36:35 PST 2012


From: Ning Tang <ning.tang at intel.com>

If a sprite is no longer used, it is disabled on the call to
drmModeSetPlane() when doing the output repaint, since its
pending_fb_id is 0.

This patch is a backport patch on weston 1.0.
Originally from Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
commit 3b2bd44d924744fa4635390e91afe569351e7d8d

Some platform has a heavy CPU load caused by redundant drmModeRmFB,
which is called in drm_disable_unused_sprites and would trigger drm_err.

Signed-off-by: Ning Tang <ning.tang at intel.com>
---
 src/compositor-drm.c | 36 ------------------------------------
 1 file changed, 36 deletions(-)

diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index a2169dd..09d2734 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -183,8 +183,6 @@ struct drm_seat {
 
 static void
 drm_output_set_cursor(struct drm_output *output);
-static void
-drm_disable_unused_sprites(struct weston_output *output_base);
 
 static int
 drm_sprite_crtc_supported(struct weston_output *output_base, uint32_t supported)
@@ -423,8 +421,6 @@ drm_output_repaint(struct weston_output *output_base,
 		output->vblank_pending = 1;
 	}
 
-	drm_disable_unused_sprites(&output->base);
-
 	return;
 }
 
@@ -532,38 +528,6 @@ drm_surface_transform_supported(struct weston_surface *es)
 	return 1;
 }
 
-static void
-drm_disable_unused_sprites(struct weston_output *output_base)
-{
-	struct weston_compositor *ec = output_base->compositor;
-	struct drm_compositor *c =(struct drm_compositor *) ec;
-	struct drm_output *output = (struct drm_output *) output_base;
-	struct drm_sprite *s;
-	int ret;
-
-	wl_list_for_each(s, &c->sprite_list, link) {
-		if (s->pending_fb_id)
-			continue;
-
-		ret = drmModeSetPlane(c->drm.fd, s->plane_id,
-				      output->crtc_id, 0, 0,
-				      0, 0, 0, 0, 0, 0, 0, 0);
-		if (ret)
-			weston_log("failed to disable plane: %d: %s\n",
-				ret, strerror(errno));
-		drmModeRmFB(c->drm.fd, s->fb_id);
-
-		if (s->surface) {
-			s->surface = NULL;
-			wl_list_remove(&s->destroy_listener.link);
-		}
-
-		assert(!s->pending_surface);
-		s->fb_id = 0;
-		s->pending_fb_id = 0;
-	}
-}
-
 /*
  * This function must take care to damage any previously assigned surface
  * if the sprite ends up binding to a different surface than in the
-- 
1.8.0.2



More information about the wayland-devel mailing list