diff options
author | qctecmdr <qctecmdr@localhost> | 2020-01-23 05:32:05 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2020-01-23 05:32:05 -0800 |
commit | 57d865b12cf74951a98eadad9329924704740c19 (patch) | |
tree | 5a14405cb7c526ce952fc9fde98d111dadcb9cd2 | |
parent | b9b56f9e9744bef1d5c73f90b4b616bd50560d98 (diff) | |
parent | 0fcd3a890a212625d49e944e7e101ba9d44a2ba1 (diff) | |
download | display-drivers-57d865b12cf74951a98eadad9329924704740c19.tar.gz |
Merge "drm: msm: sde: handle event disable failure"
-rw-r--r-- | msm/sde/sde_crtc.c | 11 |
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; } |