cxl: Add cookie parameter to afu_release_irqs()
authorMichael Neuling <mikey@neuling.org>
Wed, 27 May 2015 06:07:07 +0000 (16:07 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 3 Jun 2015 03:27:17 +0000 (13:27 +1000)
Add cookie parameter to afu_release_irqs() so that we can pass in a different
cookie than the context structure.  This will be useful for other kernel
drivers that want to call this but get their own cookie back in the interrupt
handler.

Update all existing call sites.

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>
drivers/misc/cxl/context.c
drivers/misc/cxl/cxl.h
drivers/misc/cxl/file.c
drivers/misc/cxl/irq.c

index 78ce990d77cad25974563f1e322ef94ee77a99d9..36bb8e4195d5cfc97f575ca16d53c7630e9a353f 100644 (file)
@@ -186,7 +186,7 @@ static void __detach_context(struct cxl_context *ctx)
                return;
 
        WARN_ON(cxl_detach_process(ctx));
-       afu_release_irqs(ctx);
+       afu_release_irqs(ctx, ctx);
        flush_work(&ctx->fault_work); /* Only needed for dedicated process */
        wake_up_all(&ctx->wq);
 }
index b361b48d1b01cfb94f76b4f1aba7e8689590d359..a4dadc5b5dd7e50bf8e5bf1e4d02afeda180bb4f 100644 (file)
@@ -613,7 +613,7 @@ void cxl_release_psl_err_irq(struct cxl *adapter);
 int cxl_register_serr_irq(struct cxl_afu *afu);
 void cxl_release_serr_irq(struct cxl_afu *afu);
 int afu_register_irqs(struct cxl_context *ctx, u32 count);
-void afu_release_irqs(struct cxl_context *ctx);
+void afu_release_irqs(struct cxl_context *ctx, void *cookie);
 irqreturn_t cxl_slice_irq_err(int irq, void *data);
 
 int cxl_debugfs_init(void);
index 98552344382956eeae3021772fc42bc2ef050b03..676e2c8bc1abb388e2d1abb7a513439e4f5aaffd 100644 (file)
@@ -191,7 +191,7 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
 
        if ((rc = cxl_attach_process(ctx, false, work.work_element_descriptor,
                                     amr))) {
-               afu_release_irqs(ctx);
+               afu_release_irqs(ctx, ctx);
                goto out;
        }
 
index c8929c526691706b0c7d566b3e32bed760aad062..c740c7bc2bd257626caf6905d03a7186480e763f 100644 (file)
@@ -477,7 +477,7 @@ out:
        return -ENOMEM;
 }
 
-void afu_release_irqs(struct cxl_context *ctx)
+void afu_release_irqs(struct cxl_context *ctx, void *cookie)
 {
        irq_hw_number_t hwirq;
        unsigned int virq;
@@ -488,7 +488,7 @@ void afu_release_irqs(struct cxl_context *ctx)
                for (i = 0; i < ctx->irqs.range[r]; hwirq++, i++) {
                        virq = irq_find_mapping(NULL, hwirq);
                        if (virq)
-                               cxl_unmap_irq(virq, ctx);
+                               cxl_unmap_irq(virq, cookie);
                }
        }