[Skiboot] [PATCH] xive: Mask MMIO load/store to bad location FIR
Cédric Le Goater
clg at kaod.org
Wed Jan 24 18:32:46 AEDT 2018
On 01/23/2018 08:57 PM, Frederic Barrat wrote:
> For opencapi, the trigger page of an interrupt is mapped to user
> space. The intent is to write the page to raise an interrupt but
> there's nothing to prevent a user process from reading it, which has
> the infortunate consequence of checkstopping the system.
>
> Mask the FIR bit raised when an MMIO operation targets an invalid
> location. It's the recommendation from recent documentation and
> hostboot is expected to mask it at some point. In the meantime, let's
> play it safe.
>
> Signed-off-by: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
Reviewed-by: Cédric Le Goater <clg at kaod.org>
> ---
> hw/xive.c | 8 +++++++-
> include/xive.h | 2 ++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/hw/xive.c b/hw/xive.c
> index 271256bc..998705e9 100644
> --- a/hw/xive.c
> +++ b/hw/xive.c
> @@ -1774,7 +1774,13 @@ static bool xive_config_init(struct xive *x)
> /* Disable error reporting in the FIR for info errors
> * from the VC.
> */
> - xive_regw(x, CQ_FIRMASK_OR, 3ull);
> + xive_regw(x, CQ_FIRMASK_OR, CQ_FIR_VC_INFO_ERROR_0_1);
> +
> + /* Mask CI Load and Store to bad location, as IPI trigger
> + * pages may be mapped to user space, and a read on the
> + * trigger page causes a checkstop
> + */
> + xive_regw(x, CQ_FIRMASK_OR, CQ_FIR_PB_RCMDX_CI_ERR1);
>
> return true;
> }
> diff --git a/include/xive.h b/include/xive.h
> index 5262cb48..47dc2c29 100644
> --- a/include/xive.h
> +++ b/include/xive.h
> @@ -72,6 +72,8 @@
> #define CQ_RST_CTL 0x118
> #define X_CQ_FIRMASK 0x33
> #define CQ_FIRMASK 0x198
> +#define CQ_FIR_PB_RCMDX_CI_ERR1 PPC_BIT(19)
> +#define CQ_FIR_VC_INFO_ERROR_0_1 PPC_BITMASK(62,63)
> #define X_CQ_FIRMASK_AND 0x34
> #define CQ_FIRMASK_AND 0x1a0
> #define X_CQ_FIRMASK_OR 0x35
>
More information about the Skiboot
mailing list