Commit 18a16a76 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau: return error from nouveau_ramht_remove() if not found



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 938c40ed
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -926,20 +926,14 @@ int nouveau_ioctl_gpuobj_free(struct drm_device *dev, void *data,
			      struct drm_file *file_priv)
{
	struct drm_nouveau_gpuobj_free *objfree = data;
	struct nouveau_gpuobj *gpuobj;
	struct nouveau_channel *chan;
	int ret = -ENOENT;
	int ret;

	chan = nouveau_channel_get(dev, file_priv, objfree->channel);
	if (IS_ERR(chan))
		return PTR_ERR(chan);

	gpuobj = nouveau_ramht_find(chan, objfree->handle);
	if (gpuobj) {
		nouveau_ramht_remove(chan, objfree->handle);
		ret = 0;
	}

	ret = nouveau_ramht_remove(chan, objfree->handle);
	nouveau_channel_put(&chan);
	return ret;
}
+3 −2
Original line number Diff line number Diff line
@@ -214,18 +214,19 @@ nouveau_ramht_remove_hash(struct nouveau_channel *chan, u32 handle)
	spin_unlock_irqrestore(&chan->ramht->lock, flags);
}

void
int
nouveau_ramht_remove(struct nouveau_channel *chan, u32 handle)
{
	struct nouveau_ramht_entry *entry;

	entry = nouveau_ramht_remove_entry(chan, handle);
	if (!entry)
		return;
		return -ENOENT;

	nouveau_ramht_remove_hash(chan, entry->handle);
	nouveau_gpuobj_ref(NULL, &entry->gpuobj);
	kfree(entry);
	return 0;
}

struct nouveau_gpuobj *
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ extern void nouveau_ramht_ref(struct nouveau_ramht *, struct nouveau_ramht **,

extern int  nouveau_ramht_insert(struct nouveau_channel *, u32 handle,
				 struct nouveau_gpuobj *);
extern void nouveau_ramht_remove(struct nouveau_channel *, u32 handle);
extern int  nouveau_ramht_remove(struct nouveau_channel *, u32 handle);
extern struct nouveau_gpuobj *
nouveau_ramht_find(struct nouveau_channel *chan, u32 handle);