فهرست منبع

drm/exynos: hold event_lock while accessing pageflip_event_list

Signed-off-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Imre Deak 12 سال پیش
والد
کامیت
85473328ba
1فایلهای تغییر یافته به همراه5 افزوده شده و 0 حذف شده
  1. 5 0
      drivers/gpu/drm/exynos/exynos_drm_crtc.c

+ 5 - 0
drivers/gpu/drm/exynos/exynos_drm_crtc.c

@@ -236,16 +236,21 @@ static int exynos_drm_crtc_page_flip(struct drm_crtc *crtc,
 			goto out;
 			goto out;
 		}
 		}
 
 
+		spin_lock_irq(&dev->event_lock);
 		list_add_tail(&event->base.link,
 		list_add_tail(&event->base.link,
 				&dev_priv->pageflip_event_list);
 				&dev_priv->pageflip_event_list);
+		spin_unlock_irq(&dev->event_lock);
 
 
 		crtc->fb = fb;
 		crtc->fb = fb;
 		ret = exynos_drm_crtc_mode_set_base(crtc, crtc->x, crtc->y,
 		ret = exynos_drm_crtc_mode_set_base(crtc, crtc->x, crtc->y,
 						    NULL);
 						    NULL);
 		if (ret) {
 		if (ret) {
 			crtc->fb = old_fb;
 			crtc->fb = old_fb;
+
+			spin_lock_irq(&dev->event_lock);
 			drm_vblank_put(dev, exynos_crtc->pipe);
 			drm_vblank_put(dev, exynos_crtc->pipe);
 			list_del(&event->base.link);
 			list_del(&event->base.link);
+			spin_unlock_irq(&dev->event_lock);
 
 
 			goto out;
 			goto out;
 		}
 		}