<p dir="ltr"><br>
> With OPAL v3 we can return secondary CPUs to firmware on kexec. This<br>
> allows firmware to do various cleanups making things generally more<br>
> reliable, and will enable the "new" kernel to call OPAL to perform<br>
> some reconfiguration tasks early on that can only be done while<br>
> all the CPUs are in firmware.</p>
<p dir="ltr">Dumb question, but isn't the point of kexec to avoid fw interactions like this?</p>
<p dir="ltr">Mikey<br></p>
<p dir="ltr">> Signed-off-by: Benjamin Herrenschmidt <<a href="mailto:benh@kernel.crashing.org">benh@kernel.crashing.org</a>><br>
><br>
> diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c<br>
> index d4459bf..b59a1da 100644<br>
> --- a/arch/powerpc/platforms/powernv/setup.c<br>
> +++ b/arch/powerpc/platforms/powernv/setup.c<br>
> @@ -31,6 +31,7 @@<br>
>  #include <asm/xics.h><br>
>  #include <asm/rtas.h><br>
>  #include <asm/opal.h><br>
> +#include <asm/kexec.h><br>
><br>
>  #include "powernv.h"<br>
><br>
> @@ -143,6 +144,16 @@ static void pnv_shutdown(void)<br>
>  static void pnv_kexec_cpu_down(int crash_shutdown, int secondary)<br>
>  {<br>
>         xics_kexec_teardown_cpu(secondary);<br>
> +<br>
> +       /* Return secondary CPUs to firmware on OPAL v3 */<br>
> +       if (firmware_has_feature(FW_FEATURE_OPALv3) && secondary) {<br>
> +               mb();<br>
> +               get_paca()->kexec_state = KEXEC_STATE_REAL_MODE;<br>
> +               mb();<br>
> +<br>
> +               /* Return the CPU to OPAL */<br>
> +               opal_return_cpu();<br>
> +       }<br>
>  }<br>
>  #endif /* CONFIG_KEXEC */<br>
><br>
><br>
><br>
> _______________________________________________<br>
> Linuxppc-dev mailing list<br>
> <a href="mailto:Linuxppc-dev@lists.ozlabs.org">Linuxppc-dev@lists.ozlabs.org</a><br>
> <a href="https://lists.ozlabs.org/listinfo/linuxppc-dev">https://lists.ozlabs.org/listinfo/linuxppc-dev</a><br>
><br>
</p>