Re: [PATCH 2/2] drivers/vfio: Support EEH error injection

Alex Williamson
2015-03-13T20:35:29Z

On Wed, 2015-03-11 at 17:34 +1100, Gavin Shan wrote:
> The patch adds one more EEH sub-command (VFIO_EEH_PE_INJECT_ERR)
> to inject the specified EEH error, which is represented by
> (struct vfio_eeh_pe_err), to the indicated PE for testing purpose.
>
> Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
> ---
> Documentation/vfio.txt | 47 ++++++++++++++++++++++++++++++-------------
> drivers/vfio/vfio_spapr_eeh.c | 14 +++++++++++++
> include/uapi/linux/vfio.h | 34 ++++++++++++++++++++++++++++++-
> 3 files changed, 80 insertions(+), 15 deletions(-)
>
> diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
[snip]
> @@ -490,6 +499,29 @@ struct vfio_eeh_pe_op {
> #define VFIO_EEH_PE_RESET_HOT 6 /* Assert hot reset */
> #define VFIO_EEH_PE_RESET_FUNDAMENTAL 7 /* Assert fundamental reset */
> #define VFIO_EEH_PE_CONFIGURE 8 /* PE configuration */
> +#define VFIO_EEH_PE_INJECT_ERR 9 /* Inject EEH error */
> +#define VFIO_EEH_ERR_TYPE_32 0 /* 32-bits EEH error type */
> +#define VFIO_EEH_ERR_TYPE_64 1 /* 64-bits EEH error type */
> +#define VFIO_EEH_ERR_FUNC_LD_MEM_ADDR 0 /* Memory load */
> +#define VFIO_EEH_ERR_FUNC_LD_MEM_DATA 1
> +#define VFIO_EEH_ERR_FUNC_LD_IO_ADDR 2 /* IO load */
> +#define VFIO_EEH_ERR_FUNC_LD_IO_DATA 3
> +#define VFIO_EEH_ERR_FUNC_LD_CFG_ADDR 4 /* Config load */
> +#define VFIO_EEH_ERR_FUNC_LD_CFG_DATA 5
> +#define VFIO_EEH_ERR_FUNC_ST_MEM_ADDR 6 /* Memory store */
> +#define VFIO_EEH_ERR_FUNC_ST_MEM_DATA 7
> +#define VFIO_EEH_ERR_FUNC_ST_IO_ADDR 8 /* IO store */
> +#define VFIO_EEH_ERR_FUNC_ST_IO_DATA 9
> +#define VFIO_EEH_ERR_FUNC_ST_CFG_ADDR 10 /* Config store */
> +#define VFIO_EEH_ERR_FUNC_ST_CFG_DATA 11
> +#define VFIO_EEH_ERR_FUNC_DMA_RD_ADDR 12 /* DMA read */
> +#define VFIO_EEH_ERR_FUNC_DMA_RD_DATA 13
> +#define VFIO_EEH_ERR_FUNC_DMA_RD_MASTER 14
> +#define VFIO_EEH_ERR_FUNC_DMA_RD_TARGET 15
> +#define VFIO_EEH_ERR_FUNC_DMA_WR_ADDR 16 /* DMA write */
> +#define VFIO_EEH_ERR_FUNC_DMA_WR_DATA 17
> +#define VFIO_EEH_ERR_FUNC_DMA_WR_MASTER 18
> +#define VFIO_EEH_ERR_FUNC_DMA_WR_TARGET 19

This data duplication from patch 1/2 is kind of concerning. In one case
we're adding to arch/powerpc/include/asm/eeh.h, which is a kernel
internal interface and entirely changeable, in the other we're matching
those current definitions in uapi, which needs to be stable. Are these
indexes part of a spec that we can rely on them being stable or do we
need some sort of translation layer to go from the vfio uapi defined
value to the kernel internal version? Thanks,

Alex