summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorSree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>2013-08-13 15:18:05 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:20:00 -0700
commitbe5d954ad64fb531f677fc08fd101308d4bb15ea (patch)
treef2a167819f44d532261b176e4b1ce0c4ff03d54b /drivers/video/fbdev
parent181fe45da1502dde00ebe5dd1d488ecc74fcebc7 (diff)
msm: mdss: Avoid deadlock in interrupt handler
Reduce the locking scope in irq_dispatch so that mdss_lock is not held when the irq_handler is dispatched. The dispatched irq_handler will try to acquire mdp_lock but another active process can already have mdp_lock and tries to procure mdss_lock creating a deadlock situation. Not locking with mdss_lock is acceptable as the calls will be synchronized through mdp_lock from MDP clients. Change-Id: I586b7e00c046dd4081b4e838e62e0a0556f4c717 Signed-off-by: Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c
index 3487c5d6e526..3444db67b3e4 100644
--- a/drivers/video/fbdev/msm/mdss_mdp.c
+++ b/drivers/video/fbdev/msm/mdss_mdp.c
@@ -179,9 +179,10 @@ static inline int mdss_irq_dispatch(u32 hw_ndx, int irq, void *ptr)
spin_lock(&mdss_lock);
hw = mdss_irq_handlers[hw_ndx];
+ spin_unlock(&mdss_lock);
+
if (hw)
rc = hw->irq_handler(irq, hw->ptr);
- spin_unlock(&mdss_lock);
return rc;
}