Commit 1e89da5e authored by Frederic Barrat's avatar Frederic Barrat Committed by Michael Ellerman

scsi: cxlflash: Access interrupt trigger page from xive directly

xive is already mapping the trigger page in kernel space and it can be
accessed through standard APIs, so let's reuse it and simplify the code.
Signed-off-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
Reviewed-by: default avatarCédric Le Goater <clg@kaod.org>
Acked-by: default avatarMatthew R. Ochs <mrochs@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200403153838.29224-2-fbarrat@linux.ibm.com
parent d3e669f3
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
#include <linux/pseudo_fs.h> #include <linux/pseudo_fs.h>
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/sched/signal.h> #include <linux/sched/signal.h>
#include <linux/interrupt.h>
#include <asm/xive.h>
#include <misc/ocxl.h> #include <misc/ocxl.h>
#include <uapi/misc/cxl.h> #include <uapi/misc/cxl.h>
...@@ -180,7 +181,7 @@ static int afu_map_irq(u64 flags, struct ocxlflash_context *ctx, int num, ...@@ -180,7 +181,7 @@ static int afu_map_irq(u64 flags, struct ocxlflash_context *ctx, int num,
struct ocxl_hw_afu *afu = ctx->hw_afu; struct ocxl_hw_afu *afu = ctx->hw_afu;
struct device *dev = afu->dev; struct device *dev = afu->dev;
struct ocxlflash_irqs *irq; struct ocxlflash_irqs *irq;
void __iomem *vtrig; struct xive_irq_data *xd;
u32 virq; u32 virq;
int rc = 0; int rc = 0;
...@@ -204,15 +205,15 @@ static int afu_map_irq(u64 flags, struct ocxlflash_context *ctx, int num, ...@@ -204,15 +205,15 @@ static int afu_map_irq(u64 flags, struct ocxlflash_context *ctx, int num,
goto err1; goto err1;
} }
vtrig = ioremap(irq->ptrig, PAGE_SIZE); xd = irq_get_handler_data(virq);
if (unlikely(!vtrig)) { if (unlikely(!xd)) {
dev_err(dev, "%s: Trigger page mapping failed\n", __func__); dev_err(dev, "%s: Can't get interrupt data\n", __func__);
rc = -ENOMEM; rc = -ENXIO;
goto err2; goto err2;
} }
irq->virq = virq; irq->virq = virq;
irq->vtrig = vtrig; irq->vtrig = xd->trig_mmio;
out: out:
return rc; return rc;
err2: err2:
...@@ -259,8 +260,6 @@ static void afu_unmap_irq(u64 flags, struct ocxlflash_context *ctx, int num, ...@@ -259,8 +260,6 @@ static void afu_unmap_irq(u64 flags, struct ocxlflash_context *ctx, int num,
} }
irq = &ctx->irqs[num]; irq = &ctx->irqs[num];
if (irq->vtrig)
iounmap(irq->vtrig);
if (irq_find_mapping(NULL, irq->hwirq)) { if (irq_find_mapping(NULL, irq->hwirq)) {
free_irq(irq->virq, cookie); free_irq(irq->virq, cookie);
...@@ -648,7 +647,6 @@ static int alloc_afu_irqs(struct ocxlflash_context *ctx, int num) ...@@ -648,7 +647,6 @@ static int alloc_afu_irqs(struct ocxlflash_context *ctx, int num)
} }
irqs[i].hwirq = hwirq; irqs[i].hwirq = hwirq;
irqs[i].ptrig = addr;
} }
ctx->irqs = irqs; ctx->irqs = irqs;
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
struct ocxlflash_irqs { struct ocxlflash_irqs {
int hwirq; int hwirq;
u32 virq; u32 virq;
u64 ptrig;
void __iomem *vtrig; void __iomem *vtrig;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment