drm/nouveau/pm: prevent freeing the wrong engine context

This fixes a crash when multiple PM engine contexts are created.

Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Martin Peres <[email protected]>
Signed-off-by: Ben Skeggs <[email protected]>
This commit is contained in:
Samuel Pitoiset 2015-06-07 22:40:11 +02:00 • committed by Ben Skeggs
commit 3693d54405

View file

@ -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);
}