x86/crash: fix kexec transition breakage
diff mbox series

Message ID 1563541668-6012-1-git-send-email-igor.druzhinin@citrix.com
State New
Headers show
Series
  • x86/crash: fix kexec transition breakage
Related show

Commit Message

Igor Druzhinin July 19, 2019, 1:07 p.m. UTC
Following 6ff560f7f ("x86/SMP: don't try to stop already stopped CPUs")
an incorrect condition was placed into kexec transition path
leaving crashing CPU always online breaking kdump kernel entering.
Correct it by unifying the condition with smp_send_stop().

Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>
---
 xen/arch/x86/crash.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Andrew Cooper July 22, 2019, 5:06 p.m. UTC | #1
On 19/07/2019 14:07, Igor Druzhinin wrote:
> Following 6ff560f7f ("x86/SMP: don't try to stop already stopped CPUs")
> an incorrect condition was placed into kexec transition path
> leaving crashing CPU always online breaking kdump kernel entering.
> Correct it by unifying the condition with smp_send_stop().
>
> Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>

Given how easily I can reproduce the problem now, I can't explain why
the previous version appeared to work...

> ---
>  xen/arch/x86/crash.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/xen/arch/x86/crash.c b/xen/arch/x86/crash.c
> index f9772dc..a9f3e18 100644
> --- a/xen/arch/x86/crash.c
> +++ b/xen/arch/x86/crash.c
> @@ -169,7 +169,7 @@ static void nmi_shootdown_cpus(void)
>       */
>      iommu_crash_shutdown();
>  
> -    if ( num_online_cpus() > 1 )
> +    if ( cpu_online(cpu) )
>      {
>          __stop_this_cpu();
>

Patch
diff mbox series

diff --git a/xen/arch/x86/crash.c b/xen/arch/x86/crash.c
index f9772dc..a9f3e18 100644
--- a/xen/arch/x86/crash.c
+++ b/xen/arch/x86/crash.c
@@ -169,7 +169,7 @@  static void nmi_shootdown_cpus(void)
      */
     iommu_crash_shutdown();
 
-    if ( num_online_cpus() > 1 )
+    if ( cpu_online(cpu) )
     {
         __stop_this_cpu();