diff options
author | Michael Neuling <mikey@neuling.org> | 2016-04-22 06:57:49 +0200 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2016-04-27 04:04:48 +0200 |
commit | 2bc79ffcbb817873cc43d63118008ab75181b73d (patch) | |
tree | 2f11750e0420af56962e11ef0c7da69f03e24eb3 /drivers/misc/cxl/context.c | |
parent | cxl: Keep IRQ mappings on context teardown (diff) | |
download | linux-2bc79ffcbb817873cc43d63118008ab75181b73d.tar.xz linux-2bc79ffcbb817873cc43d63118008ab75181b73d.zip |
cxl: Poll for outstanding IRQs when detaching a context
When detaching contexts, we may still have interrupts in the system
which are yet to be delivered to any CPU and be acked in the PSL.
This can result in a subsequent unrelated process getting an spurious
IRQ or an interrupt for a non-existent context.
This polls the PSL to ensure that the PSL is clear of IRQs for the
detached context, before removing the context from the idr.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Tested-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
Tested-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'drivers/misc/cxl/context.c')
-rw-r--r-- | drivers/misc/cxl/context.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/misc/cxl/context.c b/drivers/misc/cxl/context.c index 10370f280500..7edea9c19199 100644 --- a/drivers/misc/cxl/context.c +++ b/drivers/misc/cxl/context.c @@ -223,6 +223,13 @@ int __detach_context(struct cxl_context *ctx) cxl_ops->link_ok(ctx->afu->adapter, ctx->afu)); flush_work(&ctx->fault_work); /* Only needed for dedicated process */ + /* + * Wait until no further interrupts are presented by the PSL + * for this context. + */ + if (cxl_ops->irq_wait) + cxl_ops->irq_wait(ctx); + /* release the reference to the group leader and mm handling pid */ put_pid(ctx->pid); put_pid(ctx->glpid); |