cxl: Rework detach context functions
Rework __detach_context() and cxl_context_detach() so we can reuse them in the kernel API. 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
6428832a7b
commit
eda3693c84
|
@ -174,7 +174,7 @@ int cxl_context_iomap(struct cxl_context *ctx, struct vm_area_struct *vma)
|
||||||
* return until all outstanding interrupts for this context have completed. The
|
* return until all outstanding interrupts for this context have completed. The
|
||||||
* hardware should no longer access *ctx after this has returned.
|
* hardware should no longer access *ctx after this has returned.
|
||||||
*/
|
*/
|
||||||
static void __detach_context(struct cxl_context *ctx)
|
int __detach_context(struct cxl_context *ctx)
|
||||||
{
|
{
|
||||||
enum cxl_context_status status;
|
enum cxl_context_status status;
|
||||||
|
|
||||||
|
@ -183,12 +183,10 @@ static void __detach_context(struct cxl_context *ctx)
|
||||||
ctx->status = CLOSED;
|
ctx->status = CLOSED;
|
||||||
mutex_unlock(&ctx->status_mutex);
|
mutex_unlock(&ctx->status_mutex);
|
||||||
if (status != STARTED)
|
if (status != STARTED)
|
||||||
return;
|
return -EBUSY;
|
||||||
|
|
||||||
WARN_ON(cxl_detach_process(ctx));
|
WARN_ON(cxl_detach_process(ctx));
|
||||||
afu_release_irqs(ctx, ctx);
|
return 0;
|
||||||
flush_work(&ctx->fault_work); /* Only needed for dedicated process */
|
|
||||||
wake_up_all(&ctx->wq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -199,7 +197,15 @@ static void __detach_context(struct cxl_context *ctx)
|
||||||
*/
|
*/
|
||||||
void cxl_context_detach(struct cxl_context *ctx)
|
void cxl_context_detach(struct cxl_context *ctx)
|
||||||
{
|
{
|
||||||
__detach_context(ctx);
|
int rc;
|
||||||
|
|
||||||
|
rc = __detach_context(ctx);
|
||||||
|
if (rc)
|
||||||
|
return;
|
||||||
|
|
||||||
|
afu_release_irqs(ctx, ctx);
|
||||||
|
flush_work(&ctx->fault_work); /* Only needed for dedicated process */
|
||||||
|
wake_up_all(&ctx->wq);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -216,7 +222,7 @@ void cxl_context_detach_all(struct cxl_afu *afu)
|
||||||
* Anything done in here needs to be setup before the IDR is
|
* Anything done in here needs to be setup before the IDR is
|
||||||
* created and torn down after the IDR removed
|
* created and torn down after the IDR removed
|
||||||
*/
|
*/
|
||||||
__detach_context(ctx);
|
cxl_context_detach(ctx);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We are force detaching - remove any active PSA mappings so
|
* We are force detaching - remove any active PSA mappings so
|
||||||
|
|
|
@ -636,6 +636,7 @@ int cxl_context_init(struct cxl_context *ctx, struct cxl_afu *afu, bool master,
|
||||||
struct address_space *mapping);
|
struct address_space *mapping);
|
||||||
void cxl_context_free(struct cxl_context *ctx);
|
void cxl_context_free(struct cxl_context *ctx);
|
||||||
int cxl_context_iomap(struct cxl_context *ctx, struct vm_area_struct *vma);
|
int cxl_context_iomap(struct cxl_context *ctx, struct vm_area_struct *vma);
|
||||||
|
int __detach_context(struct cxl_context *ctx);
|
||||||
|
|
||||||
/* This matches the layout of the H_COLLECT_CA_INT_INFO retbuf */
|
/* This matches the layout of the H_COLLECT_CA_INT_INFO retbuf */
|
||||||
struct cxl_irq_info {
|
struct cxl_irq_info {
|
||||||
|
|
Loading…
Reference in a new issue