[1/2] drm/i915: overlay: extract some duplicated code
diff mbox

Message ID 06891ed1f1ed308aecf6544268ed86bb61a393f9.2124259224.git.daniel.vetter@ffwll.ch
State Accepted, archived
Headers show

Commit Message

Daniel Vetter April 25, 2037, 8:08 a.m. UTC
None

Patch
diff mbox

diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c
index 890274f..d18f563 100644
--- a/drivers/gpu/drm/i915/intel_overlay.c
+++ b/drivers/gpu/drm/i915/intel_overlay.c
@@ -413,12 +413,28 @@  static int intel_overlay_off(struct intel_overlay *overlay)
 	if (ret != 0)
 		return ret;
 
-	overlay->active = 0;
 	overlay->hw_wedged = 0;
 	overlay->last_flip_req = 0;
 	return ret;
 }
 
+static void intel_overlay_off_tail(struct intel_overlay *overlay)
+{
+	struct drm_gem_object *obj;
+
+	/* never have the overlay hw on without showing a frame */
+	BUG_ON(!overlay->vid_bo);
+	obj = overlay->vid_bo->obj;
+
+	i915_gem_object_unpin(obj);
+	drm_gem_object_unreference(obj);
+	overlay->vid_bo = NULL;
+
+	overlay->crtc->overlay = NULL;
+	overlay->crtc = NULL;
+	overlay->active = 0;
+}
+
 /* recover from an interruption due to a signal
  * We have to be careful not to repeat work forever an make forward progess. */
 int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
@@ -476,17 +492,7 @@  int intel_overlay_recover_from_interrupt(struct intel_overlay *overlay,
 				return ret;
 
 		case SWITCH_OFF_STAGE_2:
-			BUG_ON(!overlay->vid_bo);
-			obj = overlay->vid_bo->obj;
-
-			i915_gem_object_unpin(obj);
-			drm_gem_object_unreference(obj);
-			overlay->vid_bo = NULL;
-
-			overlay->crtc->overlay = NULL;
-			overlay->crtc = NULL;
-
-			overlay->active = 0;
+			intel_overlay_off_tail(overlay);
 			break;
 		default:
 			BUG_ON(overlay->hw_wedged != NEEDS_WAIT_FOR_FLIP);
@@ -869,7 +875,6 @@  int intel_overlay_switch_off(struct intel_overlay *overlay)
 {
 	int ret;
 	struct overlay_registers *regs;
-	struct drm_gem_object *obj;
 	struct drm_device *dev = overlay->dev;
 
 	BUG_ON(!mutex_is_locked(&dev->struct_mutex));
@@ -897,16 +902,7 @@  int intel_overlay_switch_off(struct intel_overlay *overlay)
 	if (ret != 0)
 		return ret;
 
-	/* never have the overlay hw on without showing a frame */
-	BUG_ON(!overlay->vid_bo);
-	obj = overlay->vid_bo->obj;
-
-	i915_gem_object_unpin(obj);
-	drm_gem_object_unreference(obj);
-	overlay->vid_bo = NULL;
-
-	overlay->crtc->overlay = NULL;
-	overlay->crtc = NULL;
+	intel_overlay_off_tail(overlay);
 
 	return 0;
 }