cxl: Rework context lifetimes
This reworks contexts lifetimes a bit to enable the kernel API where we may want to reuse contexts. Here we will want to start and stop contexts without freeing them. Start context does the get pid & ctx so stop context will need to do the puts. Here we move put pid & ctx to the detach context path which will become part of the stop context path. Signed-off-by: Michael Neuling <mikey@neuling.org> Acked-by: Ian Munsie <imunsie@au1.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
2f663527bd
commit
7bb5d91a4d
|
@ -186,6 +186,9 @@ int __detach_context(struct cxl_context *ctx)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
WARN_ON(cxl_detach_process(ctx));
|
WARN_ON(cxl_detach_process(ctx));
|
||||||
|
flush_work(&ctx->fault_work); /* Only needed for dedicated process */
|
||||||
|
put_pid(ctx->pid);
|
||||||
|
cxl_ctx_put();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +207,6 @@ void cxl_context_detach(struct cxl_context *ctx)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
afu_release_irqs(ctx, ctx);
|
afu_release_irqs(ctx, ctx);
|
||||||
flush_work(&ctx->fault_work); /* Only needed for dedicated process */
|
|
||||||
wake_up_all(&ctx->wq);
|
wake_up_all(&ctx->wq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -245,7 +247,6 @@ static void reclaim_ctx(struct rcu_head *rcu)
|
||||||
free_page((u64)ctx->sstp);
|
free_page((u64)ctx->sstp);
|
||||||
ctx->sstp = NULL;
|
ctx->sstp = NULL;
|
||||||
|
|
||||||
put_pid(ctx->pid);
|
|
||||||
kfree(ctx);
|
kfree(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,6 @@ static int afu_release(struct inode *inode, struct file *file)
|
||||||
*/
|
*/
|
||||||
cxl_context_free(ctx);
|
cxl_context_free(ctx);
|
||||||
|
|
||||||
cxl_ctx_put();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue