[PATCH] powerpc/xive: Prevent page fault issues in the machine crash handler

Greg Kurz groug at kaod.org
Thu Oct 31 19:43:14 AEDT 2019


On Thu, 31 Oct 2019 07:31:00 +0100
Cédric Le Goater <clg at kaod.org> wrote:

> When the machine crash handler is invoked, all interrupts are masked
> but interrupts which have not been started yet do not have an ESB page
> mapped in the Linux address space. This crashes the 'crash kexec'
> sequence on sPAPR guests.
> 
> To fix, force the mapping of the ESB page when an interrupt is being
> mapped in the Linux IRQ number space. This is done by setting the
> initial state of the interrupt to OFF which is not necessarily the
> case on PowerNV.
> 
> Signed-off-by: Cédric Le Goater <clg at kaod.org>
> ---

Reviewed-by: Greg Kurz <groug at kaod.org>

>  arch/powerpc/sysdev/xive/common.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c
> index df832b09e3e9..f5fadbd2533a 100644
> --- a/arch/powerpc/sysdev/xive/common.c
> +++ b/arch/powerpc/sysdev/xive/common.c
> @@ -1035,6 +1035,15 @@ static int xive_irq_alloc_data(unsigned int virq, irq_hw_number_t hw)
>  	xd->target = XIVE_INVALID_TARGET;
>  	irq_set_handler_data(virq, xd);
>  
> +	/*
> +	 * Turn OFF by default the interrupt being mapped. A side
> +	 * effect of this check is the mapping the ESB page of the
> +	 * interrupt in the Linux address space. This prevents page
> +	 * fault issues in the crash handler which masks all
> +	 * interrupts.
> +	 */
> +	xive_esb_read(xd, XIVE_ESB_SET_PQ_01);
> +
>  	return 0;
>  }
>  



More information about the Linuxppc-dev mailing list