Re: [PATCH v2 5/5] powerpc/powernv: Map EEH error types to OPAL error injection types
From: Sourabh Jain <hidden>
Date: 2026-06-07 13:47:02
Also in:
lkml
With the cover letter, this patch series seems to be about RTAS/pseries. I am not able to understand why powernv changes are part of this patch series. Could you please explain why they are included here? On 27/05/26 12:54, Narayana Murty N wrote:
quoted hunk ↗ jump to hunk
Add a mapping layer in pnv_eeh_err_inject() to translate generic EEH error types to OPAL-specific error injection types. This decouples the VFIO error injection interface from OPAL implementation details. Map EEH_ERR_TYPE_32 to OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR and EEH_ERR_TYPE_64 to OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64. Return -EINVAL for unsupported error types. This provides better abstraction between the generic EEH layer and platform-specific implementation. Signed-off-by: Narayana Murty N <redacted> --- arch/powerpc/include/uapi/asm/eeh.h | 20 ++++++++++++++++++-- arch/powerpc/platforms/powernv/eeh-powernv.c | 11 +++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-)diff --git a/arch/powerpc/include/uapi/asm/eeh.h b/arch/powerpc/include/uapi/asm/eeh.h index 86645cab2827..d88d82796905 100644 --- a/arch/powerpc/include/uapi/asm/eeh.h +++ b/arch/powerpc/include/uapi/asm/eeh.h@@ -16,8 +16,24 @@ #define EEH_PE_STATE_UNAVAIL 5 /* Unavailable */ /* EEH error types and functions */ -#define EEH_ERR_TYPE_32 0 /* 32-bits error */ -#define EEH_ERR_TYPE_64 1 /* 64-bits error */ +#define EEH_ERR_TYPE_FATAL 0x1 /* Fatal error */ +#define EEH_ERR_TYPE_RECOVERED_RANDOM 0x2 /* Recovered random event */ +#define EEH_ERR_TYPE_RECOVERED_SPECIAL 0x3 /* Recovered special event */ +#define EEH_ERR_TYPE_CORRUPTED_PAGE 0x4 /* Corrupted page */ +#define EEH_ERR_TYPE_CORRUPTED_SLB 0x5 /* Corrupted SLB */ +#define EEH_ERR_TYPE_TRANSLATOR_FAILURE 0x6 /* Translator failure */ +#define EEH_ERR_TYPE_32 0x7 /* 32-bit IOA bus error */ +#define EEH_ERR_TYPE_PLATFORM_SPECIFIC 0x8 /* Platform specific */ +#define EEH_ERR_TYPE_CORRUPTED_DCACHE_START 0x9 /* Corrupted D-cache start */ +#define EEH_ERR_TYPE_CORRUPTED_DCACHE_END 0xA /* Corrupted D-cache end */ +#define EEH_ERR_TYPE_CORRUPTED_ICACHE_START 0xB /* Corrupted I-cache start */ +#define EEH_ERR_TYPE_CORRUPTED_ICACHE_END 0xC /* Corrupted I-cache end */ +#define EEH_ERR_TYPE_CORRUPTED_TLB_START 0xD /* Corrupted TLB start */ +#define EEH_ERR_TYPE_CORRUPTED_TLB_END 0xE /* Corrupted TLB end */ +#define EEH_ERR_TYPE_64 0xF /* 64-bit IOA bus error */ +#define EEH_ERR_TYPE_UPSTREAM_IO_ERROR 0x10 /* Upstream IO error */ + +/* EEH supported function types */ #define EEH_ERR_FUNC_MIN 0 #define EEH_ERR_FUNC_LD_MEM_ADDR 0 /* Memory load */ #define EEH_ERR_FUNC_LD_MEM_DATA 1diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c index db3370d1673c..ee156d397e93 100644 --- a/arch/powerpc/platforms/powernv/eeh-powernv.c +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c@@ -1169,8 +1169,15 @@ static int pnv_eeh_err_inject(struct eeh_pe *pe, int type, int func, struct pnv_phb *phb = hose->private_data; s64 rc; - if (type != OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR && - type != OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64) { + /* Map generic EEH Type to OPAL Type */ + switch (type) { + case EEH_ERR_TYPE_32: + type = OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR; + break; + case EEH_ERR_TYPE_64: + type = OPAL_ERR_INJECT_TYPE_IOA_BUS_ERR64; + break; + default: pr_warn("%s: Invalid error type %d\n", __func__, type); return -ERANGE;