Skip to content

Commit

Permalink
drm/i915: Fix current fb blocking for page flip
Browse files Browse the repository at this point in the history
Block execbuffer for the fb to be flipped away, not the one that is to
be flipped in.

[ickle: rewritten for -next]
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Acked-by: Kristian Høgsberg <krh@bitplanet.net>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
  • Loading branch information
Chia-I Wu authored and Chris Wilson committed Oct 21, 2010
1 parent f00a3dd commit dc3f82c
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -4991,9 +4991,7 @@ static void do_intel_finish_page_flip(struct drm_device *dev,

spin_unlock_irqrestore(&dev->event_lock, flags);

obj_priv = to_intel_bo(work->pending_flip_obj);

/* Initial scanout buffer will have a 0 pending flip count */
obj_priv = to_intel_bo(work->old_fb_obj);
atomic_clear_mask(1 << intel_crtc->plane,
&obj_priv->pending_flip.counter);
if (atomic_read(&obj_priv->pending_flip) == 0)
Expand Down Expand Up @@ -5092,9 +5090,14 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
if (ret)
goto cleanup_objs;

obj_priv = to_intel_bo(obj);
atomic_add(1 << intel_crtc->plane, &obj_priv->pending_flip);
/* Block clients from rendering to the new back buffer until
* the flip occurs and the object is no longer visible.
*/
atomic_add(1 << intel_crtc->plane,
&to_intel_bo(work->old_fb_obj)->pending_flip);

work->pending_flip_obj = obj;
obj_priv = to_intel_bo(obj);

if (IS_GEN3(dev) || IS_GEN2(dev)) {
u32 flip_mask;
Expand Down

0 comments on commit dc3f82c

Please sign in to comment.