diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2015-06-07 22:40:11 +0200 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-06-09 08:08:33 +1000 |
commit | 7b1d1fcf86a76e2c81dbb5af1d1d278c148577cd (patch) | |
tree | 4ddfb5ffa6ac8dd0b411b6357837b1aba9e083d4 | |
parent | 000fcf2695d15b7fc73c5ab64ea1dc8f8fcc52d7 (diff) |
pm: prevent freeing the wrong engine context
This fixes a crash when multiple PM engine contexts are created.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Martin Peres <martin.peres@free.fr>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | drm/nouveau/nvkm/engine/pm/base.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drm/nouveau/nvkm/engine/pm/base.c b/drm/nouveau/nvkm/engine/pm/base.c index 2006c445..274457ca 100644 --- a/drm/nouveau/nvkm/engine/pm/base.c +++ b/drm/nouveau/nvkm/engine/pm/base.c @@ -332,9 +332,12 @@ static void nvkm_perfctx_dtor(struct nvkm_object *object) { struct nvkm_pm *ppm = (void *)object->engine; + struct nvkm_perfctx *ctx = (void *)object; + mutex_lock(&nv_subdev(ppm)->mutex); - nvkm_engctx_destroy(&ppm->context->base); - ppm->context = NULL; + nvkm_engctx_destroy(&ctx->base); + if (ppm->context == ctx) + ppm->context = NULL; mutex_unlock(&nv_subdev(ppm)->mutex); } |