Skip to content

Commit

Permalink
drm/i915: overlay: extract some duplicated code
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Daniel Vetter authored and Eric Anholt committed Nov 30, 2009
1 parent 2644487 commit 12ca45f
Showing 1 changed file with 19 additions and 23 deletions.
42 changes: 19 additions & 23 deletions drivers/gpu/drm/i915/intel_overlay.c
Original file line number Diff line number Diff line change
Expand Up @@ -375,12 +375,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,
Expand Down Expand Up @@ -438,17 +454,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);
Expand Down Expand Up @@ -831,7 +837,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));
Expand All @@ -855,16 +860,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;
}
Expand Down

0 comments on commit 12ca45f

Please sign in to comment.