diff options
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_display.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_display.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 19 | ||||
| -rw-r--r-- | drivers/staging/imx-drm/ipuv3-crtc.c | 21 |
4 files changed, 11 insertions, 55 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 7bf22d4a3d96..f17dc2ab03ec 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
| @@ -638,17 +638,8 @@ nouveau_finish_page_flip(struct nouveau_channel *chan, | |||
| 638 | } | 638 | } |
| 639 | 639 | ||
| 640 | s = list_first_entry(&fctx->flip, struct nouveau_page_flip_state, head); | 640 | s = list_first_entry(&fctx->flip, struct nouveau_page_flip_state, head); |
| 641 | if (s->event) { | 641 | if (s->event) |
| 642 | struct drm_pending_vblank_event *e = s->event; | 642 | drm_send_vblank_event(dev, -1, s->event); |
| 643 | struct timeval now; | ||
| 644 | |||
| 645 | do_gettimeofday(&now); | ||
| 646 | e->event.sequence = 0; | ||
| 647 | e->event.tv_sec = now.tv_sec; | ||
| 648 | e->event.tv_usec = now.tv_usec; | ||
| 649 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | ||
| 650 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
| 651 | } | ||
| 652 | 643 | ||
| 653 | list_del(&s->head); | 644 | list_del(&s->head); |
| 654 | if (ps) | 645 | if (ps) |
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c index e38fd559f1ab..eb18bb7af1cc 100644 --- a/drivers/gpu/drm/radeon/radeon_display.c +++ b/drivers/gpu/drm/radeon/radeon_display.c | |||
| @@ -271,8 +271,6 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id) | |||
| 271 | { | 271 | { |
| 272 | struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; | 272 | struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[crtc_id]; |
| 273 | struct radeon_unpin_work *work; | 273 | struct radeon_unpin_work *work; |
| 274 | struct drm_pending_vblank_event *e; | ||
| 275 | struct timeval now; | ||
| 276 | unsigned long flags; | 274 | unsigned long flags; |
| 277 | u32 update_pending; | 275 | u32 update_pending; |
| 278 | int vpos, hpos; | 276 | int vpos, hpos; |
| @@ -328,14 +326,9 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id) | |||
| 328 | radeon_crtc->unpin_work = NULL; | 326 | radeon_crtc->unpin_work = NULL; |
| 329 | 327 | ||
| 330 | /* wakeup userspace */ | 328 | /* wakeup userspace */ |
| 331 | if (work->event) { | 329 | if (work->event) |
| 332 | e = work->event; | 330 | drm_send_vblank_event(rdev->ddev, crtc_id, work->event); |
| 333 | e->event.sequence = drm_vblank_count_and_time(rdev->ddev, crtc_id, &now); | 331 | |
| 334 | e->event.tv_sec = now.tv_sec; | ||
| 335 | e->event.tv_usec = now.tv_usec; | ||
| 336 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | ||
| 337 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
| 338 | } | ||
| 339 | spin_unlock_irqrestore(&rdev->ddev->event_lock, flags); | 332 | spin_unlock_irqrestore(&rdev->ddev->event_lock, flags); |
| 340 | 333 | ||
| 341 | drm_vblank_put(rdev->ddev, radeon_crtc->crtc_id); | 334 | drm_vblank_put(rdev->ddev, radeon_crtc->crtc_id); |
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c index 7dff49ed66e7..99e2034e49cc 100644 --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c | |||
| @@ -451,27 +451,16 @@ void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc) | |||
| 451 | { | 451 | { |
| 452 | struct drm_pending_vblank_event *event; | 452 | struct drm_pending_vblank_event *event; |
| 453 | struct drm_device *dev = scrtc->crtc.dev; | 453 | struct drm_device *dev = scrtc->crtc.dev; |
| 454 | struct timeval vblanktime; | ||
| 455 | unsigned long flags; | 454 | unsigned long flags; |
| 456 | 455 | ||
| 457 | spin_lock_irqsave(&dev->event_lock, flags); | 456 | spin_lock_irqsave(&dev->event_lock, flags); |
| 458 | event = scrtc->event; | 457 | event = scrtc->event; |
| 459 | scrtc->event = NULL; | 458 | scrtc->event = NULL; |
| 459 | if (event) { | ||
| 460 | drm_send_vblank_event(dev, 0, event); | ||
| 461 | drm_vblank_put(dev, 0); | ||
| 462 | } | ||
| 460 | spin_unlock_irqrestore(&dev->event_lock, flags); | 463 | spin_unlock_irqrestore(&dev->event_lock, flags); |
| 461 | |||
| 462 | if (event == NULL) | ||
| 463 | return; | ||
| 464 | |||
| 465 | event->event.sequence = drm_vblank_count_and_time(dev, 0, &vblanktime); | ||
| 466 | event->event.tv_sec = vblanktime.tv_sec; | ||
| 467 | event->event.tv_usec = vblanktime.tv_usec; | ||
| 468 | |||
| 469 | spin_lock_irqsave(&dev->event_lock, flags); | ||
| 470 | list_add_tail(&event->base.link, &event->base.file_priv->event_list); | ||
| 471 | wake_up_interruptible(&event->base.file_priv->event_wait); | ||
| 472 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
| 473 | |||
| 474 | drm_vblank_put(dev, 0); | ||
| 475 | } | 464 | } |
| 476 | 465 | ||
| 477 | static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, | 466 | static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, |
diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index ea61c869110f..ff5c63350932 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c | |||
| @@ -316,31 +316,14 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, | |||
| 316 | 316 | ||
| 317 | static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc) | 317 | static void ipu_crtc_handle_pageflip(struct ipu_crtc *ipu_crtc) |
| 318 | { | 318 | { |
| 319 | struct drm_pending_vblank_event *e; | ||
| 320 | struct timeval now; | ||
| 321 | unsigned long flags; | 319 | unsigned long flags; |
| 322 | struct drm_device *drm = ipu_crtc->base.dev; | 320 | struct drm_device *drm = ipu_crtc->base.dev; |
| 323 | 321 | ||
| 324 | spin_lock_irqsave(&drm->event_lock, flags); | 322 | spin_lock_irqsave(&drm->event_lock, flags); |
| 325 | 323 | if (ipu_crtc->page_flip_event) | |
| 326 | e = ipu_crtc->page_flip_event; | 324 | drm_send_vblank_event(drm, -1, ipu_crtc->page_flip_event); |
| 327 | if (!e) { | ||
| 328 | spin_unlock_irqrestore(&drm->event_lock, flags); | ||
| 329 | return; | ||
| 330 | } | ||
| 331 | |||
| 332 | do_gettimeofday(&now); | ||
| 333 | e->event.sequence = 0; | ||
| 334 | e->event.tv_sec = now.tv_sec; | ||
| 335 | e->event.tv_usec = now.tv_usec; | ||
| 336 | ipu_crtc->page_flip_event = NULL; | 325 | ipu_crtc->page_flip_event = NULL; |
| 337 | |||
| 338 | imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc); | 326 | imx_drm_crtc_vblank_put(ipu_crtc->imx_crtc); |
| 339 | |||
| 340 | list_add_tail(&e->base.link, &e->base.file_priv->event_list); | ||
| 341 | |||
| 342 | wake_up_interruptible(&e->base.file_priv->event_wait); | ||
| 343 | |||
| 344 | spin_unlock_irqrestore(&drm->event_lock, flags); | 327 | spin_unlock_irqrestore(&drm->event_lock, flags); |
| 345 | } | 328 | } |
| 346 | 329 | ||
