diff options
| author | Patrick McHardy <kaber@trash.net> | 2010-04-20 16:02:01 +0200 | 
|---|---|---|
| committer | Patrick McHardy <kaber@trash.net> | 2010-04-20 16:02:01 +0200 | 
| commit | 62910554656cdcd6b6f84a5154c4155aae4ca231 (patch) | |
| tree | dcf14004f6fd2ef7154362ff948bfeba0f3ea92d /drivers/gpu/drm/i915/i915_gem.c | |
| parent | 22265a5c3c103cf8c50be62e6c90d045eb649e6d (diff) | |
| parent | ab9304717f7624c41927f442e6b6d418b2d8b3e4 (diff) | |
| download | olio-linux-3.10-62910554656cdcd6b6f84a5154c4155aae4ca231.tar.xz olio-linux-3.10-62910554656cdcd6b6f84a5154c4155aae4ca231.zip  | |
Merge branch 'master' of /repos/git/net-next-2.6
Conflicts:
	Documentation/feature-removal-schedule.txt
	net/ipv6/netfilter/ip6t_REJECT.c
	net/netfilter/xt_limit.c
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 32 | 
1 files changed, 18 insertions, 14 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index fba37e9f775..368d726853d 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -31,6 +31,7 @@  #include "i915_drv.h"  #include "i915_trace.h"  #include "intel_drv.h" +#include <linux/slab.h>  #include <linux/swap.h>  #include <linux/pci.h> @@ -1466,9 +1467,6 @@ i915_gem_object_put_pages(struct drm_gem_object *obj)  		obj_priv->dirty = 0;  	for (i = 0; i < page_count; i++) { -		if (obj_priv->pages[i] == NULL) -			break; -  		if (obj_priv->dirty)  			set_page_dirty(obj_priv->pages[i]); @@ -2227,11 +2225,6 @@ i915_gem_evict_something(struct drm_device *dev, int min_size)  				seqno = i915_add_request(dev, NULL, obj->write_domain);  				if (seqno == 0)  					return -ENOMEM; - -				ret = i915_wait_request(dev, seqno); -				if (ret) -					return ret; -  				continue;  			}  		} @@ -2256,7 +2249,6 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,  	struct address_space *mapping;  	struct inode *inode;  	struct page *page; -	int ret;  	if (obj_priv->pages_refcount++ != 0)  		return 0; @@ -2279,11 +2271,9 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,  					   mapping_gfp_mask (mapping) |  					   __GFP_COLD |  					   gfpmask); -		if (IS_ERR(page)) { -			ret = PTR_ERR(page); -			i915_gem_object_put_pages(obj); -			return ret; -		} +		if (IS_ERR(page)) +			goto err_pages; +  		obj_priv->pages[i] = page;  	} @@ -2291,6 +2281,15 @@ i915_gem_object_get_pages(struct drm_gem_object *obj,  		i915_gem_object_do_bit_17_swizzle(obj);  	return 0; + +err_pages: +	while (i--) +		page_cache_release(obj_priv->pages[i]); + +	drm_free_large(obj_priv->pages); +	obj_priv->pages = NULL; +	obj_priv->pages_refcount--; +	return PTR_ERR(page);  }  static void sandybridge_write_fence_reg(struct drm_i915_fence_reg *reg) @@ -4730,6 +4729,11 @@ i915_gem_init_ringbuffer(struct drm_device *dev)  			ring->space += ring->Size;  	} +	if (IS_I9XX(dev) && !IS_GEN3(dev)) { +		I915_WRITE(MI_MODE, +			   (VS_TIMER_DISPATCH) << 16 | VS_TIMER_DISPATCH); +	} +  	return 0;  }  |