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

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
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -15,7 +15,8 @@
#include <linux/pseudo_fs.h>
#include <linux/poll.h>
#include <linux/sched/signal.h>

#include <linux/interrupt.h>
#include <asm/xive.h>
#include <misc/ocxl.h>

#include <uapi/misc/cxl.h>
@@ -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 device *dev = afu->dev;
	struct ocxlflash_irqs *irq;
	void __iomem *vtrig;
	struct xive_irq_data *xd;
	u32 virq;
	int rc = 0;

@@ -204,15 +205,15 @@ static int afu_map_irq(u64 flags, struct ocxlflash_context *ctx, int num,
		goto err1;
	}

	vtrig = ioremap(irq->ptrig, PAGE_SIZE);
	if (unlikely(!vtrig)) {
		dev_err(dev, "%s: Trigger page mapping failed\n", __func__);
		rc = -ENOMEM;
	xd = irq_get_handler_data(virq);
	if (unlikely(!xd)) {
		dev_err(dev, "%s: Can't get interrupt data\n", __func__);
		rc = -ENXIO;
		goto err2;
	}

	irq->virq = virq;
	irq->vtrig = vtrig;
	irq->vtrig = xd->trig_mmio;
out:
	return rc;
err2:
@@ -259,8 +260,6 @@ static void afu_unmap_irq(u64 flags, struct ocxlflash_context *ctx, int num,
	}

	irq = &ctx->irqs[num];
	if (irq->vtrig)
		iounmap(irq->vtrig);

	if (irq_find_mapping(NULL, irq->hwirq)) {
		free_irq(irq->virq, cookie);
@@ -648,7 +647,6 @@ static int alloc_afu_irqs(struct ocxlflash_context *ctx, int num)
		}

		irqs[i].hwirq = hwirq;
		irqs[i].ptrig = addr;
	}

	ctx->irqs = irqs;
+0 −1
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@
struct ocxlflash_irqs {
	int hwirq;
	u32 virq;
	u64 ptrig;
	void __iomem *vtrig;
};