summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2020-01-23 05:32:05 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2020-01-23 05:32:05 -0800
commit57d865b12cf74951a98eadad9329924704740c19 (patch)
tree5a14405cb7c526ce952fc9fde98d111dadcb9cd2
parentb9b56f9e9744bef1d5c73f90b4b616bd50560d98 (diff)
parent0fcd3a890a212625d49e944e7e101ba9d44a2ba1 (diff)
downloaddisplay-drivers-57d865b12cf74951a98eadad9329924704740c19.tar.gz
Merge "drm: msm: sde: handle event disable failure"
-rw-r--r--msm/sde/sde_crtc.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c
index b6aa7350..b3a5df5c 100644
--- a/msm/sde/sde_crtc.c
+++ b/msm/sde/sde_crtc.c
@@ -6258,7 +6258,7 @@ static int _sde_crtc_event_disable(struct sde_kms *kms,
spin_lock_irqsave(&crtc->spin_lock, flags);
list_for_each_entry(node, &crtc->user_event_list, list) {
if (node->event == event) {
- list_del(&node->list);
+ list_del_init(&node->list);
found = true;
break;
}
@@ -6286,7 +6286,14 @@ static int _sde_crtc_event_disable(struct sde_kms *kms,
}
ret = node->func(crtc_drm, false, &node->irq);
- kfree(node);
+ if (ret) {
+ spin_lock_irqsave(&crtc->spin_lock, flags);
+ list_add_tail(&node->list, &crtc->user_event_list);
+ spin_unlock_irqrestore(&crtc->spin_lock, flags);
+ } else {
+ kfree(node);
+ }
+
pm_runtime_put_sync(crtc_drm->dev->dev);
return ret;
}