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:
Родитель
6428832a7b
Коммит
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
|
||||
* 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;
|
||||
|
||||
|
@ -183,12 +183,10 @@ static void __detach_context(struct cxl_context *ctx)
|
|||
ctx->status = CLOSED;
|
||||
mutex_unlock(&ctx->status_mutex);
|
||||
if (status != STARTED)
|
||||
return;
|
||||
return -EBUSY;
|
||||
|
||||
WARN_ON(cxl_detach_process(ctx));
|
||||
afu_release_irqs(ctx, ctx);
|
||||
flush_work(&ctx->fault_work); /* Only needed for dedicated process */
|
||||
wake_up_all(&ctx->wq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -199,7 +197,15 @@ static void __detach_context(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
|
||||
* 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
|
||||
|
|
|
@ -636,6 +636,7 @@ int cxl_context_init(struct cxl_context *ctx, struct cxl_afu *afu, bool master,
|
|||
struct address_space *mapping);
|
||||
void cxl_context_free(struct cxl_context *ctx);
|
||||
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 */
|
||||
struct cxl_irq_info {
|
||||
|
|
Загрузка…
Ссылка в новой задаче