Commit 2a6789ae authored by Francisco Jerez's avatar Francisco Jerez Committed by Ben Skeggs

drm/nouveau: Make fences take a weak channel reference.

Fences didn't increment the channel reference count, and the fenced
channel could go away at any time. Fixes a potential race in
nouveau_fence_update().
Signed-off-by: default avatarFrancisco Jerez <currojerez@riseup.net>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent f091a3d4
...@@ -64,6 +64,7 @@ nouveau_fence_del(struct kref *ref) ...@@ -64,6 +64,7 @@ nouveau_fence_del(struct kref *ref)
struct nouveau_fence *fence = struct nouveau_fence *fence =
container_of(ref, struct nouveau_fence, refcount); container_of(ref, struct nouveau_fence, refcount);
nouveau_channel_ref(NULL, &fence->channel);
kfree(fence); kfree(fence);
} }
...@@ -113,7 +114,7 @@ nouveau_fence_new(struct nouveau_channel *chan, struct nouveau_fence **pfence, ...@@ -113,7 +114,7 @@ nouveau_fence_new(struct nouveau_channel *chan, struct nouveau_fence **pfence,
if (!fence) if (!fence)
return -ENOMEM; return -ENOMEM;
kref_init(&fence->refcount); kref_init(&fence->refcount);
fence->channel = chan; nouveau_channel_ref(chan, &fence->channel);
if (emit) if (emit)
ret = nouveau_fence_emit(fence); ret = nouveau_fence_emit(fence);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment