diff options
| author | Dave Airlie <airlied@redhat.com> | 2010-12-22 09:48:54 +1000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2010-12-22 09:48:54 +1000 | 
| commit | ae09f09e94d755ed45c58b695675636c0ec53f9e (patch) | |
| tree | 77cb9bac7d81f5b1250b8638a007e10c17b600af /drivers/gpu/drm/drm_irq.c | |
| parent | 1d99e5c57255d188773fb437391df24fe8faf575 (diff) | |
| parent | 5909a77ac62cc042f94bd262016cf468a2f96022 (diff) | |
| download | olio-linux-3.10-ae09f09e94d755ed45c58b695675636c0ec53f9e.tar.xz olio-linux-3.10-ae09f09e94d755ed45c58b695675636c0ec53f9e.zip  | |
Merge remote branch 'intel/drm-intel-next' of /ssd/git/drm-next into drm-core-next
* 'intel/drm-intel-next' of /ssd/git/drm-next: (771 commits)
  drm/i915: Undo "Uncouple render/power ctx before suspending"
  drm/i915: Allow the application to choose the constant addressing mode
  drm/i915: dynamic render p-state support for Sandy Bridge
  drm/i915: Enable EI mode for RCx decision making on Sandybridge
  drm/i915/sdvo: Border and stall select became test bits in gen5
  drm/i915: Add Guess-o-matic for pageflip timestamping.
  drm/i915: Add support for precise vblank timestamping (v2)
  drm/i915: Add frame buffer compression on Sandybridge
  drm/i915: Add self-refresh support on Sandybridge
  drm/i915: Wait for vblank before unpinning old fb
  Revert "drm/i915: Avoid using PIPE_CONTROL on Ironlake"
  drm/i915: Pass clock limits down to PLL matcher
  drm/i915: Poll for seqno completion if IRQ is disabled
  drm/i915/ringbuffer: Make IRQ refcnting atomic
  agp/intel: Fix missed cached memory flags setting in i965_write_entry()
  drm/i915/sdvo: Only use the SDVO pin if it is in the valid range
  drm/i915: Enable RC6 autodownclocking on Sandybridge
  drm/i915: Terminate the FORCE WAKE after we have finished reading
  drm/i915/gtt: Clear the cachelines upon resume
  drm/i915: Restore GTT mapping first upon resume
  ...
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
| -rw-r--r-- | drivers/gpu/drm/drm_irq.c | 19 | 
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 55160d7c38b..8304c42195f 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c @@ -1047,10 +1047,13 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe,  	struct timeval now;  	unsigned long flags;  	unsigned int seq; +	int ret;  	e = kzalloc(sizeof *e, GFP_KERNEL); -	if (e == NULL) -		return -ENOMEM; +	if (e == NULL) { +		ret = -ENOMEM; +		goto err_put; +	}  	e->pipe = pipe;  	e->base.pid = current->pid; @@ -1064,9 +1067,8 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe,  	spin_lock_irqsave(&dev->event_lock, flags);  	if (file_priv->event_space < sizeof e->event) { -		spin_unlock_irqrestore(&dev->event_lock, flags); -		kfree(e); -		return -ENOMEM; +		ret = -EBUSY; +		goto err_unlock;  	}  	file_priv->event_space -= sizeof e->event; @@ -1103,6 +1105,13 @@ static int drm_queue_vblank_event(struct drm_device *dev, int pipe,  	spin_unlock_irqrestore(&dev->event_lock, flags);  	return 0; + +err_unlock: +	spin_unlock_irqrestore(&dev->event_lock, flags); +	kfree(e); +err_put: +	drm_vblank_put(dev, e->pipe); +	return ret;  }  /**  |