All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
@ 2023-02-06 23:42 Dongli Zhang
  2023-02-07  7:16 ` Philippe Mathieu-Daudé
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Dongli Zhang @ 2023-02-06 23:42 UTC (permalink / raw)
  To: qemu-devel; +Cc: dgilbert, richard.henderson, pbonzini, joe.jin

The cpu_dump_state() does not print the cpu index. When the
cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
from which CPU the state is. The below is an example.

KVM internal error. Suberror: 764064
RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff RDX=ffff8a9cc00ba8a0
RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50 RSP=ffffb6120c5b3c40
R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350 R11=0000000000000007
R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01 R15=0000000000000000
RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0000 0000000000000000 ffffffff 00c00000
CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
SS =0000 0000000000000000 ffffffff 00c00000
DS =0000 0000000000000000 ffffffff 00c00000
FS =0000 0000000000000000 ffffffff 00c00000
GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
LDT=0000 0000000000000000 ffffffff 00c00000
TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
GDT=     fffffe0000094000 0000007f
IDT=     fffffe0000000000 00000fff
CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000fffe0ff0 DR7=0000000000000400
EFER=0000000000000d01
Code=0f 1f ... ...

Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.

Cc: Joe Jin <joe.jin@oracle.com>
Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
---
 hw/core/cpu-common.c      | 1 +
 monitor/hmp-cmds-target.c | 2 --
 softmmu/cpus.c            | 1 -
 3 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
index 5ccc3837b6..d2503f2d09 100644
--- a/hw/core/cpu-common.c
+++ b/hw/core/cpu-common.c
@@ -105,6 +105,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, int flags)
 
     if (cc->dump_state) {
         cpu_synchronize_state(cpu);
+        qemu_fprintf(f, "\nCPU#%d\n", cpu->cpu_index);
         cc->dump_state(cpu, f, flags);
     }
 }
diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c
index 0d3e84d960..f7dd354d2a 100644
--- a/monitor/hmp-cmds-target.c
+++ b/monitor/hmp-cmds-target.c
@@ -99,7 +99,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
 
     if (all_cpus) {
         CPU_FOREACH(cs) {
-            monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
             cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
         }
     } else {
@@ -114,7 +113,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
             return;
         }
 
-        monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
         cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
     }
 }
diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index 9cbc8172b5..f69bbe6abc 100644
--- a/softmmu/cpus.c
+++ b/softmmu/cpus.c
@@ -122,7 +122,6 @@ void hw_error(const char *fmt, ...)
     vfprintf(stderr, fmt, ap);
     fprintf(stderr, "\n");
     CPU_FOREACH(cpu) {
-        fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
         cpu_dump_state(cpu, stderr, CPU_DUMP_FPU);
     }
     va_end(ap);
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
  2023-02-06 23:42 [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state Dongli Zhang
@ 2023-02-07  7:16 ` Philippe Mathieu-Daudé
  2023-02-07 17:32   ` Dongli Zhang
  2023-02-09  2:27 ` Alistair Francis
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-07  7:16 UTC (permalink / raw)
  To: Dongli Zhang, qemu-devel; +Cc: dgilbert, richard.henderson, pbonzini, joe.jin

On 7/2/23 00:42, Dongli Zhang wrote:
> The cpu_dump_state() does not print the cpu index. When the
> cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
> from which CPU the state is. The below is an example.
> 
> KVM internal error. Suberror: 764064
> RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff RDX=ffff8a9cc00ba8a0
> RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50 RSP=ffffb6120c5b3c40
> R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350 R11=0000000000000007
> R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01 R15=0000000000000000
> RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
> ES =0000 0000000000000000 ffffffff 00c00000
> CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
> SS =0000 0000000000000000 ffffffff 00c00000
> DS =0000 0000000000000000 ffffffff 00c00000
> FS =0000 0000000000000000 ffffffff 00c00000
> GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
> LDT=0000 0000000000000000 ffffffff 00c00000
> TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
> GDT=     fffffe0000094000 0000007f
> IDT=     fffffe0000000000 00000fff
> CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
> DR6=00000000fffe0ff0 DR7=0000000000000400
> EFER=0000000000000d01
> Code=0f 1f ... ...
> 
> Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.
> 
> Cc: Joe Jin <joe.jin@oracle.com>
> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
> ---
>   hw/core/cpu-common.c      | 1 +
>   monitor/hmp-cmds-target.c | 2 --
>   softmmu/cpus.c            | 1 -
>   3 files changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
> index 5ccc3837b6..d2503f2d09 100644
> --- a/hw/core/cpu-common.c
> +++ b/hw/core/cpu-common.c
> @@ -105,6 +105,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, int flags)
>   
>       if (cc->dump_state) {
>           cpu_synchronize_state(cpu);

Should we check for:

           if (cpu->cpu_index != -1) {

> +        qemu_fprintf(f, "\nCPU#%d\n", cpu->cpu_index);

           }

?

>           cc->dump_state(cpu, f, flags);
>       }
>   }
> diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c
> index 0d3e84d960..f7dd354d2a 100644
> --- a/monitor/hmp-cmds-target.c
> +++ b/monitor/hmp-cmds-target.c
> @@ -99,7 +99,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
>   
>       if (all_cpus) {
>           CPU_FOREACH(cs) {
> -            monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
>               cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
>           }



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
  2023-02-07  7:16 ` Philippe Mathieu-Daudé
@ 2023-02-07 17:32   ` Dongli Zhang
  2023-02-07 17:49     ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 7+ messages in thread
From: Dongli Zhang @ 2023-02-07 17:32 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel
  Cc: dgilbert, richard.henderson, pbonzini, joe.jin

Hi Philippe,

On 2/6/23 23:16, Philippe Mathieu-Daudé wrote:
> On 7/2/23 00:42, Dongli Zhang wrote:
>> The cpu_dump_state() does not print the cpu index. When the
>> cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
>> from which CPU the state is. The below is an example.
>>
>> KVM internal error. Suberror: 764064
>> RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff
>> RDX=ffff8a9cc00ba8a0
>> RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50
>> RSP=ffffb6120c5b3c40
>> R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350
>> R11=0000000000000007
>> R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01
>> R15=0000000000000000
>> RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
>> ES =0000 0000000000000000 ffffffff 00c00000
>> CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
>> SS =0000 0000000000000000 ffffffff 00c00000
>> DS =0000 0000000000000000 ffffffff 00c00000
>> FS =0000 0000000000000000 ffffffff 00c00000
>> GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
>> LDT=0000 0000000000000000 ffffffff 00c00000
>> TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
>> GDT=     fffffe0000094000 0000007f
>> IDT=     fffffe0000000000 00000fff
>> CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
>> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000
>> DR3=0000000000000000
>> DR6=00000000fffe0ff0 DR7=0000000000000400
>> EFER=0000000000000d01
>> Code=0f 1f ... ...
>>
>> Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.
>>
>> Cc: Joe Jin <joe.jin@oracle.com>
>> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
>> ---
>>   hw/core/cpu-common.c      | 1 +
>>   monitor/hmp-cmds-target.c | 2 --
>>   softmmu/cpus.c            | 1 -
>>   3 files changed, 1 insertion(+), 3 deletions(-)
>>
>> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
>> index 5ccc3837b6..d2503f2d09 100644
>> --- a/hw/core/cpu-common.c
>> +++ b/hw/core/cpu-common.c
>> @@ -105,6 +105,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, int flags)
>>         if (cc->dump_state) {
>>           cpu_synchronize_state(cpu);
> 
> Should we check for:
> 
>           if (cpu->cpu_index != -1) {
> 
>> +        qemu_fprintf(f, "\nCPU#%d\n", cpu->cpu_index);
> 
>           }

I think you meant if (cpu->cpu_index != UNASSIGNED_CPU_INDEX).

I do not see this case may happen within my knowledge. The cpu_index is always
expected to be assigned if cpu_exec_realizefn()-->cpu_list_add() is called.

 83 void cpu_list_add(CPUState *cpu)
 84 {
 85     QEMU_LOCK_GUARD(&qemu_cpu_list_lock);
 86     if (cpu->cpu_index == UNASSIGNED_CPU_INDEX) {
 87         cpu->cpu_index = cpu_get_free_index();
 88         assert(cpu->cpu_index != UNASSIGNED_CPU_INDEX);
 89     } else {
 90         assert(!cpu_index_auto_assigned);
 91     }
 92     QTAILQ_INSERT_TAIL_RCU(&cpus, cpu, node);
 93     cpu_list_generation_id++;
 94 }


In addition, the cc->dump_state() is always invoked by cpu_dump_state(). As a
result, e.g., arm_cpu_dump_state() or x86_cpu_dump_state() may always print the
cpu state unconditionally (same for mips, s390 or riscv). I do not see a reason
to hide the cpu_index.

Would you please let me know if the above is wrong? I do not think it is
required to filter the cpu_index with UNASSIGNED_CPU_INDEX.

Thank you very much!

Dongli Zhang

> 
> ?
> 
>>           cc->dump_state(cpu, f, flags);
>>       }
>>   }
>> diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c
>> index 0d3e84d960..f7dd354d2a 100644
>> --- a/monitor/hmp-cmds-target.c
>> +++ b/monitor/hmp-cmds-target.c
>> @@ -99,7 +99,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
>>         if (all_cpus) {
>>           CPU_FOREACH(cs) {
>> -            monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
>>               cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
>>           }
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
  2023-02-07 17:32   ` Dongli Zhang
@ 2023-02-07 17:49     ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 7+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-07 17:49 UTC (permalink / raw)
  To: Dongli Zhang, qemu-devel; +Cc: dgilbert, richard.henderson, pbonzini, joe.jin

On 7/2/23 18:32, Dongli Zhang wrote:
> Hi Philippe,
> 
> On 2/6/23 23:16, Philippe Mathieu-Daudé wrote:
>> On 7/2/23 00:42, Dongli Zhang wrote:
>>> The cpu_dump_state() does not print the cpu index. When the
>>> cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
>>> from which CPU the state is. The below is an example.
>>>
>>> KVM internal error. Suberror: 764064
>>> RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff
>>> RDX=ffff8a9cc00ba8a0
>>> RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50
>>> RSP=ffffb6120c5b3c40
>>> R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350
>>> R11=0000000000000007
>>> R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01
>>> R15=0000000000000000
>>> RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
>>> ES =0000 0000000000000000 ffffffff 00c00000
>>> CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
>>> SS =0000 0000000000000000 ffffffff 00c00000
>>> DS =0000 0000000000000000 ffffffff 00c00000
>>> FS =0000 0000000000000000 ffffffff 00c00000
>>> GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
>>> LDT=0000 0000000000000000 ffffffff 00c00000
>>> TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
>>> GDT=     fffffe0000094000 0000007f
>>> IDT=     fffffe0000000000 00000fff
>>> CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
>>> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000
>>> DR3=0000000000000000
>>> DR6=00000000fffe0ff0 DR7=0000000000000400
>>> EFER=0000000000000d01
>>> Code=0f 1f ... ...
>>>
>>> Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.
>>>
>>> Cc: Joe Jin <joe.jin@oracle.com>
>>> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
>>> ---
>>>    hw/core/cpu-common.c      | 1 +
>>>    monitor/hmp-cmds-target.c | 2 --
>>>    softmmu/cpus.c            | 1 -
>>>    3 files changed, 1 insertion(+), 3 deletions(-)
>>>
>>> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
>>> index 5ccc3837b6..d2503f2d09 100644
>>> --- a/hw/core/cpu-common.c
>>> +++ b/hw/core/cpu-common.c
>>> @@ -105,6 +105,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, int flags)
>>>          if (cc->dump_state) {
>>>            cpu_synchronize_state(cpu);
>>
>> Should we check for:
>>
>>            if (cpu->cpu_index != -1) {
>>
>>> +        qemu_fprintf(f, "\nCPU#%d\n", cpu->cpu_index);
>>
>>            }
> 
> I think you meant if (cpu->cpu_index != UNASSIGNED_CPU_INDEX).
> 
> I do not see this case may happen within my knowledge. The cpu_index is always
> expected to be assigned if cpu_exec_realizefn()-->cpu_list_add() is called.
> 
>   83 void cpu_list_add(CPUState *cpu)
>   84 {
>   85     QEMU_LOCK_GUARD(&qemu_cpu_list_lock);
>   86     if (cpu->cpu_index == UNASSIGNED_CPU_INDEX) {
>   87         cpu->cpu_index = cpu_get_free_index();
>   88         assert(cpu->cpu_index != UNASSIGNED_CPU_INDEX);
>   89     } else {
>   90         assert(!cpu_index_auto_assigned);
>   91     }
>   92     QTAILQ_INSERT_TAIL_RCU(&cpus, cpu, node);
>   93     cpu_list_generation_id++;
>   94 }
> 
> 
> In addition, the cc->dump_state() is always invoked by cpu_dump_state(). As a
> result, e.g., arm_cpu_dump_state() or x86_cpu_dump_state() may always print the
> cpu state unconditionally (same for mips, s390 or riscv). I do not see a reason
> to hide the cpu_index.
> 
> Would you please let me know if the above is wrong? I do not think it is
> required to filter the cpu_index with UNASSIGNED_CPU_INDEX.

You are right.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>

Thanks for clarifying!


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
  2023-02-06 23:42 [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state Dongli Zhang
  2023-02-07  7:16 ` Philippe Mathieu-Daudé
@ 2023-02-09  2:27 ` Alistair Francis
  2023-03-07  6:36 ` Dongli Zhang
  2023-04-05  5:02 ` Alistair Francis
  3 siblings, 0 replies; 7+ messages in thread
From: Alistair Francis @ 2023-02-09  2:27 UTC (permalink / raw)
  To: Dongli Zhang; +Cc: qemu-devel, dgilbert, richard.henderson, pbonzini, joe.jin

On Tue, Feb 7, 2023 at 9:46 AM Dongli Zhang <dongli.zhang@oracle.com> wrote:
>
> The cpu_dump_state() does not print the cpu index. When the
> cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
> from which CPU the state is. The below is an example.
>
> KVM internal error. Suberror: 764064
> RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff RDX=ffff8a9cc00ba8a0
> RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50 RSP=ffffb6120c5b3c40
> R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350 R11=0000000000000007
> R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01 R15=0000000000000000
> RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
> ES =0000 0000000000000000 ffffffff 00c00000
> CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
> SS =0000 0000000000000000 ffffffff 00c00000
> DS =0000 0000000000000000 ffffffff 00c00000
> FS =0000 0000000000000000 ffffffff 00c00000
> GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
> LDT=0000 0000000000000000 ffffffff 00c00000
> TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
> GDT=     fffffe0000094000 0000007f
> IDT=     fffffe0000000000 00000fff
> CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
> DR6=00000000fffe0ff0 DR7=0000000000000400
> EFER=0000000000000d01
> Code=0f 1f ... ...
>
> Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.
>
> Cc: Joe Jin <joe.jin@oracle.com>
> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
>  hw/core/cpu-common.c      | 1 +
>  monitor/hmp-cmds-target.c | 2 --
>  softmmu/cpus.c            | 1 -
>  3 files changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
> index 5ccc3837b6..d2503f2d09 100644
> --- a/hw/core/cpu-common.c
> +++ b/hw/core/cpu-common.c
> @@ -105,6 +105,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, int flags)
>
>      if (cc->dump_state) {
>          cpu_synchronize_state(cpu);
> +        qemu_fprintf(f, "\nCPU#%d\n", cpu->cpu_index);
>          cc->dump_state(cpu, f, flags);
>      }
>  }
> diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c
> index 0d3e84d960..f7dd354d2a 100644
> --- a/monitor/hmp-cmds-target.c
> +++ b/monitor/hmp-cmds-target.c
> @@ -99,7 +99,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
>
>      if (all_cpus) {
>          CPU_FOREACH(cs) {
> -            monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
>              cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
>          }
>      } else {
> @@ -114,7 +113,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
>              return;
>          }
>
> -        monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
>          cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
>      }
>  }
> diff --git a/softmmu/cpus.c b/softmmu/cpus.c
> index 9cbc8172b5..f69bbe6abc 100644
> --- a/softmmu/cpus.c
> +++ b/softmmu/cpus.c
> @@ -122,7 +122,6 @@ void hw_error(const char *fmt, ...)
>      vfprintf(stderr, fmt, ap);
>      fprintf(stderr, "\n");
>      CPU_FOREACH(cpu) {
> -        fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
>          cpu_dump_state(cpu, stderr, CPU_DUMP_FPU);
>      }
>      va_end(ap);
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
  2023-02-06 23:42 [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state Dongli Zhang
  2023-02-07  7:16 ` Philippe Mathieu-Daudé
  2023-02-09  2:27 ` Alistair Francis
@ 2023-03-07  6:36 ` Dongli Zhang
  2023-04-05  5:02 ` Alistair Francis
  3 siblings, 0 replies; 7+ messages in thread
From: Dongli Zhang @ 2023-03-07  6:36 UTC (permalink / raw)
  To: qemu-devel
  Cc: dgilbert, richard.henderson, pbonzini, joe.jin,
	Philippe Mathieu-Daudé,
	alistair23

Ping?

The patch already got the Reviewed-by from Philippe Mathieu-Daudé and Alistair
Francis.

The current log does not provide much information when (1) multiple CPUs are
involved in the bug, and (2) when the "info registers -a" is not used to collect
the context from all CPUs for comparison.

We may wait for very long timer until the bug filer can reproduce the error again.

To print the cpu index helps a lot.

Thank you very much!

Dongli Zhang

On 2/6/23 15:42, Dongli Zhang wrote:
> The cpu_dump_state() does not print the cpu index. When the
> cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
> from which CPU the state is. The below is an example.
> 
> KVM internal error. Suberror: 764064
> RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff RDX=ffff8a9cc00ba8a0
> RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50 RSP=ffffb6120c5b3c40
> R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350 R11=0000000000000007
> R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01 R15=0000000000000000
> RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
> ES =0000 0000000000000000 ffffffff 00c00000
> CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
> SS =0000 0000000000000000 ffffffff 00c00000
> DS =0000 0000000000000000 ffffffff 00c00000
> FS =0000 0000000000000000 ffffffff 00c00000
> GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
> LDT=0000 0000000000000000 ffffffff 00c00000
> TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
> GDT=     fffffe0000094000 0000007f
> IDT=     fffffe0000000000 00000fff
> CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
> DR6=00000000fffe0ff0 DR7=0000000000000400
> EFER=0000000000000d01
> Code=0f 1f ... ...
> 
> Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.
> 
> Cc: Joe Jin <joe.jin@oracle.com>
> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
> ---
>  hw/core/cpu-common.c      | 1 +
>  monitor/hmp-cmds-target.c | 2 --
>  softmmu/cpus.c            | 1 -
>  3 files changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/hw/core/cpu-common.c b/hw/core/cpu-common.c
> index 5ccc3837b6..d2503f2d09 100644
> --- a/hw/core/cpu-common.c
> +++ b/hw/core/cpu-common.c
> @@ -105,6 +105,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, int flags)
>  
>      if (cc->dump_state) {
>          cpu_synchronize_state(cpu);
> +        qemu_fprintf(f, "\nCPU#%d\n", cpu->cpu_index);
>          cc->dump_state(cpu, f, flags);
>      }
>  }
> diff --git a/monitor/hmp-cmds-target.c b/monitor/hmp-cmds-target.c
> index 0d3e84d960..f7dd354d2a 100644
> --- a/monitor/hmp-cmds-target.c
> +++ b/monitor/hmp-cmds-target.c
> @@ -99,7 +99,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
>  
>      if (all_cpus) {
>          CPU_FOREACH(cs) {
> -            monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
>              cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
>          }
>      } else {
> @@ -114,7 +113,6 @@ void hmp_info_registers(Monitor *mon, const QDict *qdict)
>              return;
>          }
>  
> -        monitor_printf(mon, "\nCPU#%d\n", cs->cpu_index);
>          cpu_dump_state(cs, NULL, CPU_DUMP_FPU);
>      }
>  }
> diff --git a/softmmu/cpus.c b/softmmu/cpus.c
> index 9cbc8172b5..f69bbe6abc 100644
> --- a/softmmu/cpus.c
> +++ b/softmmu/cpus.c
> @@ -122,7 +122,6 @@ void hw_error(const char *fmt, ...)
>      vfprintf(stderr, fmt, ap);
>      fprintf(stderr, "\n");
>      CPU_FOREACH(cpu) {
> -        fprintf(stderr, "CPU #%d:\n", cpu->cpu_index);
>          cpu_dump_state(cpu, stderr, CPU_DUMP_FPU);
>      }
>      va_end(ap);


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state
  2023-02-06 23:42 [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state Dongli Zhang
                   ` (2 preceding siblings ...)
  2023-03-07  6:36 ` Dongli Zhang
@ 2023-04-05  5:02 ` Alistair Francis
  3 siblings, 0 replies; 7+ messages in thread
From: Alistair Francis @ 2023-04-05  5:02 UTC (permalink / raw)
  To: Dongli Zhang; +Cc: qemu-devel, dgilbert, richard.henderson, pbonzini, joe.jin

On Tue, Feb 7, 2023 at 9:46 AM Dongli Zhang <dongli.zhang@oracle.com> wrote:
>
> The cpu_dump_state() does not print the cpu index. When the
> cpu_dump_state() is invoked due to the KVM failure, we are not able to tell
> from which CPU the state is. The below is an example.
>
> KVM internal error. Suberror: 764064
> RAX=0000000000000002 RBX=ffff8a9e57c38400 RCX=00000000ffffffff RDX=ffff8a9cc00ba8a0
> RSI=0000000000000003 RDI=ffff8a9e57c38400 RBP=ffffb6120c5b3c50 RSP=ffffb6120c5b3c40
> R8 =0000000000000000 R9 =ffff8a9cc00ba8a0 R10=ffffffff8e467350 R11=0000000000000007
> R12=000000000000000a R13=ffffffff8f987e25 R14=ffffffff8f988a01 R15=0000000000000000
> RIP=ffffffff8e51bb04 RFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
> ES =0000 0000000000000000 ffffffff 00c00000
> CS =0010 0000000000000000 ffffffff 00a09b00 DPL=0 CS64 [-RA]
> SS =0000 0000000000000000 ffffffff 00c00000
> DS =0000 0000000000000000 ffffffff 00c00000
> FS =0000 0000000000000000 ffffffff 00c00000
> GS =0000 ffff8ac27fcc0000 ffffffff 00c00000
> LDT=0000 0000000000000000 ffffffff 00c00000
> TR =0040 fffffe0000096000 0000206f 00008b00 DPL=0 TSS64-busy
> GDT=     fffffe0000094000 0000007f
> IDT=     fffffe0000000000 00000fff
> CR0=80050033 CR2=0000000000000000 CR3=00000010ca40a001 CR4=003606e0
> DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
> DR6=00000000fffe0ff0 DR7=0000000000000400
> EFER=0000000000000d01
> Code=0f 1f ... ...
>
> Print the cpu->cpu_index in cpu_dump_state() and remove it from the caller.
>
> Cc: Joe Jin <joe.jin@oracle.com>
> Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>

Any more comments or thoughts?

Alistair


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-04-05  5:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-06 23:42 [PATCH 1/1] hw/core/cpu: always print cpu index with cpu state Dongli Zhang
2023-02-07  7:16 ` Philippe Mathieu-Daudé
2023-02-07 17:32   ` Dongli Zhang
2023-02-07 17:49     ` Philippe Mathieu-Daudé
2023-02-09  2:27 ` Alistair Francis
2023-03-07  6:36 ` Dongli Zhang
2023-04-05  5:02 ` Alistair Francis

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.