[PATCH 1/1] UBUNTU: psb: fully disable detearing code paths as a run time option

Colin King colin.king at canonical.com
Wed Apr 7 14:36:43 UTC 2010


From: Colin Ian King <colin.king at canonical.com>

BugLink: http://bugs.launchpad.net/bugs/556710

Extend the semantics of the psb detear module paramater to totally
disable the detearing code paths.  This makes detear=0 functionally
indentical to compiling the psb driver with PSB_DETEAR not defined
(and hence disabled) in psb_drv.h. This provides the driver with the
ability to totally disable detearing at module load time rather than
at compile time.

Disabling detearing is a workaround to a couple of known issues:

1) Playing MS-MPEG4 encoded video with Xv which causes X to crash
2) Playing a video while the screen is turned off (with DPMPS or
xrandr) which causes X to hang

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 ubuntu/media/drm-poulsbo/psb_irq.c      |    2 +-
 ubuntu/media/drm-poulsbo/psb_schedule.c |    2 +-
 ubuntu/media/drm-poulsbo/psb_sgx.c      |    6 +++---
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/ubuntu/media/drm-poulsbo/psb_irq.c b/ubuntu/media/drm-poulsbo/psb_irq.c
index f3e19c6..51e1c41 100644
--- a/ubuntu/media/drm-poulsbo/psb_irq.c
+++ b/ubuntu/media/drm-poulsbo/psb_irq.c
@@ -197,7 +197,7 @@ irqreturn_t psb_irq_handler(DRM_IRQ_ARGS)
 
 	if (vdc_stat) {
 #ifdef PSB_DETEAR
-		if(psb_blit_info.cmd_ready) {
+		if (drm_psb_detear && psb_blit_info.cmd_ready) {
 			psb_blit_info.cmd_ready = 0;
 			psb_blit_2d_reg_write(dev_priv, psb_blit_info.cmdbuf);
 			/* to resume the blocked psb_cmdbuf_2d() */
diff --git a/ubuntu/media/drm-poulsbo/psb_schedule.c b/ubuntu/media/drm-poulsbo/psb_schedule.c
index 959f8f9..a4b4021 100644
--- a/ubuntu/media/drm-poulsbo/psb_schedule.c
+++ b/ubuntu/media/drm-poulsbo/psb_schedule.c
@@ -1208,7 +1208,7 @@ static int psb_setup_task_devlocked(struct drm_device *dev,
 		task->scene = psb_scene_ref(scene);
 
 #ifdef PSB_DETEAR
-	if(PSB_VIDEO_BLIT == arg->sVideoInfo.flag) {
+	if (drm_psb_detear && PSB_VIDEO_BLIT == arg->sVideoInfo.flag) {
 		task->bVideoFlag = PSB_VIDEO_BLIT;
 		task->x = arg->sVideoInfo.x;
 		task->y = arg->sVideoInfo.y;
diff --git a/ubuntu/media/drm-poulsbo/psb_sgx.c b/ubuntu/media/drm-poulsbo/psb_sgx.c
index 3027113..1722877 100644
--- a/ubuntu/media/drm-poulsbo/psb_sgx.c
+++ b/ubuntu/media/drm-poulsbo/psb_sgx.c
@@ -177,7 +177,7 @@ int psb_2d_submit(struct drm_psb_private *dev_priv, uint32_t * cmdbuf,
 #ifdef PSB_DETEAR
 		/* delayed 2D blit tasks are not executed right now,
 		   let's save a copy of the task */
-		if(dev_priv->blit_2d) {
+		if (drm_psb_detear && dev_priv->blit_2d) {
 			/* FIXME: should use better approach other
 			   than the dev_priv->blit_2d to distinguish
 			   delayed 2D blit tasks */
@@ -929,7 +929,7 @@ static int psb_cmdbuf_2d(struct drm_file *priv,
 		return -EAGAIN;
 
 #ifdef PSB_DETEAR
-	if(arg->sVideoInfo.flag == (PSB_DELAYED_2D_BLIT)) {
+	if (drm_psb_detear && arg->sVideoInfo.flag == (PSB_DELAYED_2D_BLIT)) {
 		dev_priv->blit_2d = 1;
 	}
 #endif	/* PSB_DETEAR */
@@ -940,7 +940,7 @@ static int psb_cmdbuf_2d(struct drm_file *priv,
 		goto out_unlock;
 
 #ifdef PSB_DETEAR
-	if(arg->sVideoInfo.flag == (PSB_DELAYED_2D_BLIT)) {
+	if (drm_psb_detear && arg->sVideoInfo.flag == (PSB_DELAYED_2D_BLIT)) {
 		arg->sVideoInfo.flag = 0;
 		clear_bit(0, &psb_blit_info.vdc_bit);
 		psb_blit_info.cmd_ready = 1;
-- 
1.6.3.3





More information about the kernel-team mailing list