diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-05 16:02:01 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-05 16:02:01 -0700 | 
| commit | fc1caf6eafb30ea185720e29f7f5eccca61ecd60 (patch) | |
| tree | 666dabc25a9b02e5c05f9eba32fa6b0d8027341a /drivers/gpu/drm/nouveau/nouveau_notifier.c | |
| parent | 9779714c8af09d57527f18d9aa2207dcc27a8687 (diff) | |
| parent | 96576a9e1a0cdb8a43d3af5846be0948f52b4460 (diff) | |
| download | olio-linux-3.10-fc1caf6eafb30ea185720e29f7f5eccca61ecd60.tar.xz olio-linux-3.10-fc1caf6eafb30ea185720e29f7f5eccca61ecd60.zip  | |
Merge branch 'drm-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (204 commits)
  agp: intel-agp: do not use PCI resources before pci_enable_device()
  agp: efficeon-agp: do not use PCI resources before pci_enable_device()
  drm: kill BKL from common code
  drm/kms: Simplify setup of the initial I2C encoder config.
  drm,io-mapping: Specify slot to use for atomic mappings
  drm/radeon/kms: only expose underscan on avivo chips
  drm/radeon: add new pci ids
  drm: Cleanup after failing to create master->unique and dev->name
  drm/radeon: tone down overchatty acpi debug messages.
  drm/radeon/kms: enable underscan option for digital connectors
  drm/radeon/kms: fix calculation of h/v scaling factors
  drm/radeon/kms/igp: sideport is AMD only
  drm/radeon/kms: handle the case of no active displays properly in the bandwidth code
  drm: move ttm global code to core drm
  drm/i915: Clear the Ironlake dithering flags when the pipe doesn't want it.
  drm/radeon/kms: make sure HPD is set to NONE on analog-only connectors
  drm/radeon/kms: make sure rio_mem is valid before unmapping it
  drm/agp/i915: trim stolen space to 32M
  drm/i915: Unset cursor if out-of-bounds upon mode change (v4)
  drm/i915: Unreference object not handle on creation
  ...
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_notifier.c')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_notifier.c | 30 | 
1 files changed, 12 insertions, 18 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_notifier.c b/drivers/gpu/drm/nouveau/nouveau_notifier.c index 9537f3e3011..3ec181ff50c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_notifier.c +++ b/drivers/gpu/drm/nouveau/nouveau_notifier.c @@ -55,7 +55,7 @@ nouveau_notifier_init_channel(struct nouveau_channel *chan)  	if (ret)  		goto out_err; -	ret = nouveau_mem_init_heap(&chan->notifier_heap, 0, ntfy->bo.mem.size); +	ret = drm_mm_init(&chan->notifier_heap, 0, ntfy->bo.mem.size);  	if (ret)  		goto out_err; @@ -80,7 +80,7 @@ nouveau_notifier_takedown_channel(struct nouveau_channel *chan)  	nouveau_bo_unpin(chan->notifier_bo);  	mutex_unlock(&dev->struct_mutex);  	drm_gem_object_unreference_unlocked(chan->notifier_bo->gem); -	nouveau_mem_takedown(&chan->notifier_heap); +	drm_mm_takedown(&chan->notifier_heap);  }  static void @@ -90,7 +90,7 @@ nouveau_notifier_gpuobj_dtor(struct drm_device *dev,  	NV_DEBUG(dev, "\n");  	if (gpuobj->priv) -		nouveau_mem_free_block(gpuobj->priv); +		drm_mm_put_block(gpuobj->priv);  }  int @@ -100,18 +100,13 @@ nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle,  	struct drm_device *dev = chan->dev;  	struct drm_nouveau_private *dev_priv = dev->dev_private;  	struct nouveau_gpuobj *nobj = NULL; -	struct mem_block *mem; +	struct drm_mm_node *mem;  	uint32_t offset;  	int target, ret; -	if (!chan->notifier_heap) { -		NV_ERROR(dev, "Channel %d doesn't have a notifier heap!\n", -			 chan->id); -		return -EINVAL; -	} - -	mem = nouveau_mem_alloc_block(chan->notifier_heap, size, 0, -				      (struct drm_file *)-2, 0); +	mem = drm_mm_search_free(&chan->notifier_heap, size, 0, 0); +	if (mem) +		mem = drm_mm_get_block(mem, size, 0);  	if (!mem) {  		NV_ERROR(dev, "Channel %d notifier block full\n", chan->id);  		return -ENOMEM; @@ -144,17 +139,17 @@ nouveau_notifier_alloc(struct nouveau_channel *chan, uint32_t handle,  				     mem->size, NV_DMA_ACCESS_RW, target,  				     &nobj);  	if (ret) { -		nouveau_mem_free_block(mem); +		drm_mm_put_block(mem);  		NV_ERROR(dev, "Error creating notifier ctxdma: %d\n", ret);  		return ret;  	} -	nobj->dtor   = nouveau_notifier_gpuobj_dtor; -	nobj->priv   = mem; +	nobj->dtor = nouveau_notifier_gpuobj_dtor; +	nobj->priv = mem;  	ret = nouveau_gpuobj_ref_add(dev, chan, handle, nobj, NULL);  	if (ret) {  		nouveau_gpuobj_del(dev, &nobj); -		nouveau_mem_free_block(mem); +		drm_mm_put_block(mem);  		NV_ERROR(dev, "Error referencing notifier ctxdma: %d\n", ret);  		return ret;  	} @@ -170,7 +165,7 @@ nouveau_notifier_offset(struct nouveau_gpuobj *nobj, uint32_t *poffset)  		return -EINVAL;  	if (poffset) { -		struct mem_block *mem = nobj->priv; +		struct drm_mm_node *mem = nobj->priv;  		if (*poffset >= mem->size)  			return false; @@ -189,7 +184,6 @@ nouveau_ioctl_notifier_alloc(struct drm_device *dev, void *data,  	struct nouveau_channel *chan;  	int ret; -	NOUVEAU_CHECK_INITIALISED_WITH_RETURN;  	NOUVEAU_GET_USER_CHANNEL_WITH_RETURN(na->channel, file_priv, chan);  	ret = nouveau_notifier_alloc(chan, na->handle, na->size, &na->offset);  |