[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