Commit 12ca45fea91cfbb09df828bea958b47348caee6d

  • avatar
  • Eric Anholt <eric @anh…lt.net> (Committer)
  • Mon Nov 30 18:44:23 CET 2009
  • avatar
  • Daniel Vetter <daniel.vetter @ff…l.ch> (Author)
  • Sat Apr 25 10:08:26 CEST 2037
drm/i915: overlay: extract some duplicated code

I've suspected some bug there wrt to suspend, but that was not
the case. Clean up the code anyway.

Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Eric Anholt <eric@anholt.net>
  
375375 if (ret != 0)
376376 return ret;
377377
378 overlay->active = 0;
379378 overlay->hw_wedged = 0;
380379 overlay->last_flip_req = 0;
381380 return ret;
382381}
383382
383static void intel_overlay_off_tail(struct intel_overlay *overlay)
384{
385 struct drm_gem_object *obj;
386
387 /* never have the overlay hw on without showing a frame */
388 BUG_ON(!overlay->vid_bo);
389 obj = overlay->vid_bo->obj;
390
391 i915_gem_object_unpin(obj);
392 drm_gem_object_unreference(obj);
393 overlay->vid_bo = NULL;
394
395 overlay->crtc->overlay = NULL;
396 overlay->crtc = NULL;
397 overlay->active = 0;
398}
399
384400/* recover from an interruption due to a signal
385401 * We have to be careful not to repeat work forever an make forward progess. */
386402int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
454454 return ret;
455455
456456 case SWITCH_OFF_STAGE_2:
457 BUG_ON(!overlay->vid_bo);
458 obj = overlay->vid_bo->obj;
459
460 i915_gem_object_unpin(obj);
461 drm_gem_object_unreference(obj);
462 overlay->vid_bo = NULL;
463
464 overlay->crtc->overlay = NULL;
465 overlay->crtc = NULL;
466
467 overlay->active = 0;
457 intel_overlay_off_tail(overlay);
468458 break;
469459 default:
470460 BUG_ON(overlay->hw_wedged != NEEDS_WAIT_FOR_FLIP);
837837{
838838 int ret;
839839 struct overlay_registers *regs;
840 struct drm_gem_object *obj;
841840 struct drm_device *dev = overlay->dev;
842841
843842 BUG_ON(!mutex_is_locked(&dev->struct_mutex));
860860 if (ret != 0)
861861 return ret;
862862
863 /* never have the overlay hw on without showing a frame */
864 BUG_ON(!overlay->vid_bo);
865 obj = overlay->vid_bo->obj;
866
867 i915_gem_object_unpin(obj);
868 drm_gem_object_unreference(obj);
869 overlay->vid_bo = NULL;
870
871 overlay->crtc->overlay = NULL;
872 overlay->crtc = NULL;
863 intel_overlay_off_tail(overlay);
873864
874865 return 0;
875866}