[PATCH] cxl: Prevent IRQ storm
Frederic Barrat
fbarrat at linux.vnet.ibm.com
Wed Apr 26 19:23:42 AEST 2017
Le 26/04/2017 à 08:40, Alastair D'Silva a écrit :
> From: Alastair D'Silva <alastair at d-silva.org>
>
> In some situations, a faulty AFU slice may create an interrupt storm,
> rendering the machine unusable. Since these interrupts are informational
> only, present the interrupt once, then mask it off to prevent it from
> being retriggered until the card is reset.
>
> Signed-off-by: Alastair D'Silva <alastair at d-silva.org>
> ---
Patch looks good, thanks!
It doesn't apply cleanly on the 'next' tree due to the capi2 patchset
though, so you should probably rebase on that tree. The bits have
changed a bit on PSL9, but the approach still works (error type reported
in the first byte, and the corresponding masking bits are still
right-shifted by 32).
Fred
> drivers/misc/cxl/native.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
> index 7ae7105..4e8010f 100644
> --- a/drivers/misc/cxl/native.c
> +++ b/drivers/misc/cxl/native.c
> @@ -996,7 +996,7 @@ static void native_irq_wait(struct cxl_context *ctx)
> static irqreturn_t native_slice_irq_err(int irq, void *data)
> {
> struct cxl_afu *afu = data;
> - u64 fir_slice, errstat, serr, afu_debug, afu_error, dsisr;
> + u64 fir_slice, errstat, serr, afu_debug, afu_error, dsisr, irq_mask;
>
> /*
> * slice err interrupt is only used with full PSL (no XSL)
> @@ -1014,6 +1014,10 @@ static irqreturn_t native_slice_irq_err(int irq, void *data)
> dev_crit(&afu->dev, "AFU_ERR_An: 0x%.16llx\n", afu_error);
> dev_crit(&afu->dev, "PSL_DSISR_An: 0x%.16llx\n", dsisr);
>
> + /* mask off the IRQ so it won't retrigger until the card is reset */
> + irq_mask = (serr & 0xff80000000000000ULL) >> 32;
> + serr |= irq_mask;
> +
> cxl_p1n_write(afu, CXL_PSL_SERR_An, serr);
>
> return IRQ_HANDLED;
>
More information about the Linuxppc-dev
mailing list