diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-19 11:36:04 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-19 11:36:04 -0800 | 
| commit | f3485c82f75eeb951162dda663f45714627a85f5 (patch) | |
| tree | 8ffbcdba50bbbecbf1beee698a515d3342b415ac | |
| parent | db873cfc7c0a6f34ab0f1c811fc245273adf35af (diff) | |
| parent | ac5c4e76180a74c7f922f6fa71ace0cef45fa433 (diff) | |
Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
  drm/i915: GEM on PAE has problems - disable it for now.
  drm/i915: Don't return busy for buffers left on the flushing list.
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 9 | 
3 files changed, 19 insertions, 2 deletions
| diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 553dd4bc3075..afa8a12cd009 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -717,7 +717,7 @@ static int i915_getparam(struct drm_device *dev, void *data,  		value = dev->pci_device;  		break;  	case I915_PARAM_HAS_GEM: -		value = 1; +		value = dev_priv->has_gem;  		break;  	default:  		DRM_ERROR("Unknown parameter %d\n", param->param); @@ -830,6 +830,14 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)  	dev_priv->regs = ioremap(base, size); +#ifdef CONFIG_HIGHMEM64G +	/* don't enable GEM on PAE - needs agp + set_memory_* interface fixes */ +	dev_priv->has_gem = 0; +#else +	/* enable GEM by default */ +	dev_priv->has_gem = 1; +#endif +  	i915_gem_load(dev);  	/* Init HWS */ diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index adc972cc6bfc..b3cc4731aa7c 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -106,6 +106,8 @@ struct intel_opregion {  typedef struct drm_i915_private {  	struct drm_device *dev; +	int has_gem; +  	void __iomem *regs;  	drm_local_map_t *sarea; diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index ad672d854828..24fe8c10b4b2 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2309,7 +2309,14 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,  	}  	obj_priv = obj->driver_private; -	args->busy = obj_priv->active; +	/* Don't count being on the flushing list against the object being +	 * done.  Otherwise, a buffer left on the flushing list but not getting +	 * flushed (because nobody's flushing that domain) won't ever return +	 * unbusy and get reused by libdrm's bo cache.  The other expected +	 * consumer of this interface, OpenGL's occlusion queries, also specs +	 * that the objects get unbusy "eventually" without any interference. +	 */ +	args->busy = obj_priv->active && obj_priv->last_rendering_seqno != 0;  	drm_gem_object_unreference(obj);  	mutex_unlock(&dev->struct_mutex); | 
