|
@@ -3025,6 +3025,7 @@ static void sde_crtc_vblank_notify_work(struct kthread_work *work)
|
|
struct sde_crtc *sde_crtc;
|
|
struct sde_crtc *sde_crtc;
|
|
struct sde_crtc_vblank_event *vevent = container_of(work,
|
|
struct sde_crtc_vblank_event *vevent = container_of(work,
|
|
struct sde_crtc_vblank_event, work);
|
|
struct sde_crtc_vblank_event, work);
|
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
if (!vevent->crtc) {
|
|
if (!vevent->crtc) {
|
|
SDE_ERROR("invalid crtc\n");
|
|
SDE_ERROR("invalid crtc\n");
|
|
@@ -3036,9 +3037,9 @@ static void sde_crtc_vblank_notify_work(struct kthread_work *work)
|
|
|
|
|
|
sde_crtc_vblank_notify(vevent->crtc, vevent->ts);
|
|
sde_crtc_vblank_notify(vevent->crtc, vevent->ts);
|
|
|
|
|
|
- spin_lock(&sde_crtc->event_spin_lock);
|
|
|
|
|
|
+ spin_lock_irqsave(&sde_crtc->event_spin_lock, flags);
|
|
list_add_tail(&vevent->list, &sde_crtc->vblank_event_list);
|
|
list_add_tail(&vevent->list, &sde_crtc->vblank_event_list);
|
|
- spin_unlock(&sde_crtc->event_spin_lock);
|
|
|
|
|
|
+ spin_unlock_irqrestore(&sde_crtc->event_spin_lock, flags);
|
|
}
|
|
}
|
|
|
|
|
|
static void sde_crtc_vblank_cb(void *data, ktime_t ts)
|
|
static void sde_crtc_vblank_cb(void *data, ktime_t ts)
|