* [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters
@ 2017-02-09 15:13 Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 1/3] i386/cpu: add crash-information QOM property Denis V. Lunev
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Denis V. Lunev @ 2017-02-09 15:13 UTC (permalink / raw)
To: qemu-devel
Cc: Denis V. Lunev, Anton Nefedov, Paolo Bonzini, Marcelo Tosatti,
Richard Henderson, Eduardo Habkost, Eric Blake, Markus Armbruster
Windows reports BSOD parameters through Hyper-V crash MSRs. This
information is very useful for initial crash analysis and thus
it would be nice to see it in the QEMU log file. There is suitable
log mask for the purpose.
Linux guest does not provide this information, but still it would
be nice to log that we have crashed.
Changes since v1:
- patches resplit
- created property to query crash parameters
- crash parameters added to panic event
Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Marcelo Tosatti <mtosatti@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: Eric Blake <eblake@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
Anton Nefedov (3):
i386/cpu: add crash-information QOM property
report guest crash information in GUEST_PANICKED event
vl: log available guest crash information
hw/misc/pvpanic.c | 2 +-
include/qom/cpu.h | 10 +++++++++
include/sysemu/kvm.h | 2 ++
include/sysemu/sysemu.h | 2 +-
kvm-all.c | 3 ++-
qapi-schema.json | 24 +++++++++++++++++++++
qapi/event.json | 6 ++++--
qom/cpu.c | 11 ++++++++++
stubs/Makefile.objs | 1 +
stubs/kvm-crash.c | 8 +++++++
target/i386/cpu.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
target/i386/cpu.h | 3 +++
target/i386/kvm.c | 41 ++++++++++++++++++++++++++++++++++++
target/s390x/kvm.c | 4 ++--
vl.c | 23 ++++++++++++++++++---
15 files changed, 185 insertions(+), 10 deletions(-)
create mode 100644 stubs/kvm-crash.c
--
2.7.4
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 1/3] i386/cpu: add crash-information QOM property
2017-02-09 15:13 [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Denis V. Lunev
@ 2017-02-09 15:13 ` Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 2/3] report guest crash information in GUEST_PANICKED event Denis V. Lunev
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2017-02-09 15:13 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Nefedov, Denis V . Lunev, Paolo Bonzini, Marcelo Tosatti,
Richard Henderson, Eduardo Habkost, Eric Blake, Markus Armbruster
From: Anton Nefedov <anton.nefedov@virtuozzo.com>
Windows reports BSOD parameters through Hyper-V crash MSRs. This
information is very useful for initial crash analysis and thus
it would be nice to have a way to fetch it.
Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Marcelo Tosatti <mtosatti@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: Eric Blake <eblake@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
---
include/sysemu/kvm.h | 2 ++
kvm-all.c | 1 +
qapi-schema.json | 24 +++++++++++++++++++++++
stubs/Makefile.objs | 1 +
stubs/kvm-crash.c | 8 ++++++++
target/i386/cpu.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++
target/i386/cpu.h | 3 +++
target/i386/kvm.c | 41 +++++++++++++++++++++++++++++++++++++++
8 files changed, 134 insertions(+)
create mode 100644 stubs/kvm-crash.c
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 3045ee7..02a363d 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -527,4 +527,6 @@ int kvm_set_one_reg(CPUState *cs, uint64_t id, void *source);
*/
int kvm_get_one_reg(CPUState *cs, uint64_t id, void *target);
int kvm_get_max_memslots(void);
+
+void kvm_arch_save_crash_info(CPUState *cpu);
#endif
diff --git a/kvm-all.c b/kvm-all.c
index a27c880..abfe92d 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -2000,6 +2000,7 @@ int kvm_cpu_exec(CPUState *cpu)
ret = EXCP_INTERRUPT;
break;
case KVM_SYSTEM_EVENT_CRASH:
+ kvm_arch_save_crash_info(cpu);
qemu_mutex_lock_iothread();
qemu_system_guest_panicked();
qemu_mutex_unlock_iothread();
diff --git a/qapi-schema.json b/qapi-schema.json
index cbdffdd..9cb6ac5 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -5846,6 +5846,30 @@
'data': [ 'pause', 'poweroff' ] }
##
+# @GuestPanicInformation:
+#
+# Information about a guest panic
+#
+# Since: 2.9
+##
+{'union': 'GuestPanicInformation',
+ 'data': { 'hyper-v': 'GuestPanicInformationHyperV' } }
+
+##
+# @GuestPanicInformationHyperV:
+#
+# Hyper-V specific guest panic information (HV crash MSRs)
+#
+# Since: 2.9
+##
+{'struct': 'GuestPanicInformationHyperV',
+ 'data': { 'arg1': 'uint64',
+ 'arg2': 'uint64',
+ 'arg3': 'uint64',
+ 'arg4': 'uint64',
+ 'arg5': 'uint64' } }
+
+##
# @rtc-reset-reinjection:
#
# This command will reset the RTC interrupt reinjection backlog.
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index a187295..3b1632a 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -35,3 +35,4 @@ stub-obj-y += qmp_pc_dimm_device_list.o
stub-obj-y += target-monitor-defs.o
stub-obj-y += target-get-monitor-def.o
stub-obj-y += pc_madt_cpu_entry.o
+stub-obj-y += kvm-crash.o
diff --git a/stubs/kvm-crash.c b/stubs/kvm-crash.c
new file mode 100644
index 0000000..b2f502d
--- /dev/null
+++ b/stubs/kvm-crash.c
@@ -0,0 +1,8 @@
+#include "qemu/osdep.h"
+#include "qemu-common.h"
+#include "sysemu/kvm.h"
+
+void kvm_arch_save_crash_info(CPUState *cs)
+{
+ return;
+}
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index eb49980..275e236 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -3495,6 +3495,57 @@ static void x86_cpu_register_feature_bit_props(X86CPU *cpu,
x86_cpu_register_bit_prop(cpu, name, &cpu->env.features[w], bitnr);
}
+static GuestPanicInformation *x86_cpu_get_crash_info(CPUState *cs)
+{
+ X86CPU *cpu = X86_CPU(cs);
+ CPUX86State *env = &cpu->env;
+ GuestPanicInformation *panic_info = NULL;
+
+ if (env->features[FEAT_HYPERV_EDX] & HV_X64_GUEST_CRASH_MSR_AVAILABLE) {
+ GuestPanicInformationHyperV *panic_info_hv =
+ g_malloc0(sizeof(GuestPanicInformationHyperV));
+ panic_info = g_malloc0(sizeof(GuestPanicInformation));
+
+ panic_info->type = GUEST_PANIC_INFORMATION_KIND_HYPER_V;
+ panic_info->u.hyper_v.data = panic_info_hv;
+
+ assert(HV_X64_MSR_CRASH_PARAMS >= 5);
+ panic_info_hv->arg1 = cpu->hv_msr_crash_params[0];
+ panic_info_hv->arg2 = cpu->hv_msr_crash_params[1];
+ panic_info_hv->arg3 = cpu->hv_msr_crash_params[2];
+ panic_info_hv->arg4 = cpu->hv_msr_crash_params[3];
+ panic_info_hv->arg5 = cpu->hv_msr_crash_params[4];
+ }
+
+ return panic_info;
+}
+static void x86_cpu_get_crash_info_qom(Object *obj, Visitor *v,
+ const char *name, void *opaque,
+ Error **errp)
+{
+ CPUState *cs = CPU(obj);
+ GuestPanicInformation *panic_info;
+
+ if (!cs->crash_occurred) {
+ error_setg(errp, "No crash occured");
+ return;
+ }
+
+ panic_info = x86_cpu_get_crash_info(cs);
+ if (panic_info == NULL) {
+ error_setg(errp, "No crash information");
+ return;
+ }
+
+ visit_type_GuestPanicInformation(v, "crash-information", &panic_info,
+ errp);
+
+ if (panic_info->type == GUEST_PANIC_INFORMATION_KIND_HYPER_V) {
+ g_free(panic_info->u.hyper_v.data);
+ }
+ g_free(panic_info);
+}
+
static void x86_cpu_initfn(Object *obj)
{
CPUState *cs = CPU(obj);
@@ -3530,6 +3581,9 @@ static void x86_cpu_initfn(Object *obj)
x86_cpu_get_feature_words,
NULL, NULL, (void *)cpu->filtered_features, NULL);
+ object_property_add(obj, "crash-information", "GuestPanicInformation",
+ x86_cpu_get_crash_info_qom, NULL, NULL, NULL, NULL);
+
cpu->hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY;
for (w = 0; w < FEATURE_WORDS; w++) {
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index 4d788d5..38c8da9 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -1258,6 +1258,9 @@ struct X86CPU {
/* Number of physical address bits supported */
uint32_t phys_bits;
+ /* Hyper-V crash MSRs */
+ uint64_t hv_msr_crash_params[HV_X64_MSR_CRASH_PARAMS];
+
/* in order to simplify APIC support, we leave this pointer to the
user */
struct DeviceState *apic_state;
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
index 27fd050..2427c4a 100644
--- a/target/i386/kvm.c
+++ b/target/i386/kvm.c
@@ -2054,6 +2054,36 @@ static int kvm_get_sregs(X86CPU *cpu)
return 0;
}
+static int kvm_read_msr_hv_crash(X86CPU *cpu, uint64_t *buf)
+{
+ int i, ret;
+ struct {
+ struct kvm_msrs info;
+ struct kvm_msr_entry entries[HV_X64_MSR_CRASH_PARAMS];
+ } msr_data;
+
+ if (!has_msr_hv_crash) {
+ return -ENOSYS;
+ }
+
+ for (i = 0; i < HV_X64_MSR_CRASH_PARAMS; i++) {
+ msr_data.entries[i].index = HV_X64_MSR_CRASH_P0 + i;
+ }
+ msr_data.info.nmsrs = HV_X64_MSR_CRASH_PARAMS;
+
+ ret = kvm_vcpu_ioctl(CPU(cpu), KVM_GET_MSRS, &msr_data);
+ if (ret < 0) {
+ return ret;
+ }
+
+ for (i = 0; i < ret; i++) {
+ const struct kvm_msr_entry *msr = msr_data.entries + i;
+ buf[msr->index - HV_X64_MSR_CRASH_P0] = msr->data;
+ }
+
+ return 0;
+}
+
static int kvm_get_msrs(X86CPU *cpu)
{
CPUX86State *env = &cpu->env;
@@ -2801,6 +2831,17 @@ int kvm_arch_get_registers(CPUState *cs)
return ret;
}
+void kvm_arch_save_crash_info(CPUState *cs)
+{
+ if (has_msr_hv_crash) {
+ X86CPU *cpu = X86_CPU(cs);
+ int ret = kvm_read_msr_hv_crash(cpu, cpu->hv_msr_crash_params);
+ if (ret < 0) {
+ fprintf(stderr, "Failed to get HV crash parameters\n");
+ }
+ }
+}
+
void kvm_arch_pre_run(CPUState *cpu, struct kvm_run *run)
{
X86CPU *x86_cpu = X86_CPU(cpu);
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v2 2/3] report guest crash information in GUEST_PANICKED event
2017-02-09 15:13 [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 1/3] i386/cpu: add crash-information QOM property Denis V. Lunev
@ 2017-02-09 15:13 ` Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v3 3/3] vl: log available guest crash information Denis V. Lunev
2017-02-09 15:51 ` [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Fam Zheng
3 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2017-02-09 15:13 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Nefedov, Denis V . Lunev, Paolo Bonzini, Marcelo Tosatti,
Richard Henderson, Eduardo Habkost, Eric Blake, Markus Armbruster
From: Anton Nefedov <anton.nefedov@virtuozzo.com>
it's not very convenient to use the crash-information property interface,
so provide a CPU class callback to get the guest crash information, and pass
that information in the event
Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Marcelo Tosatti <mtosatti@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: Eric Blake <eblake@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
---
hw/misc/pvpanic.c | 2 +-
include/qom/cpu.h | 10 ++++++++++
include/sysemu/sysemu.h | 2 +-
kvm-all.c | 2 +-
qapi/event.json | 6 ++++--
qom/cpu.c | 11 +++++++++++
target/i386/cpu.c | 1 +
target/s390x/kvm.c | 4 ++--
vl.c | 14 +++++++++++---
9 files changed, 42 insertions(+), 10 deletions(-)
diff --git a/hw/misc/pvpanic.c b/hw/misc/pvpanic.c
index 0ac1e6a..57da7f2 100644
--- a/hw/misc/pvpanic.c
+++ b/hw/misc/pvpanic.c
@@ -42,7 +42,7 @@ static void handle_event(int event)
}
if (event & PVPANIC_PANICKED) {
- qemu_system_guest_panicked();
+ qemu_system_guest_panicked(NULL);
return;
}
}
diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index ca4d0fb..f95a6c3 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -156,6 +156,7 @@ typedef struct CPUClass {
uint8_t *buf, int len, bool is_write);
void (*dump_state)(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
int flags);
+ GuestPanicInformation* (*get_crash_info)(CPUState *cpu);
void (*dump_statistics)(CPUState *cpu, FILE *f,
fprintf_function cpu_fprintf, int flags);
int64_t (*get_arch_id)(CPUState *cpu);
@@ -469,6 +470,15 @@ int cpu_write_elf32_qemunote(WriteCoreDumpFunction f, CPUState *cpu,
void *opaque);
/**
+ * cpu_get_crash_info:
+ * @cpu: The CPU to get crash information for
+ *
+ * Gets the previously saved crash information.
+ * Caller is responsible for freeing the data.
+ */
+GuestPanicInformation *cpu_get_crash_info(CPUState *cpu);
+
+/**
* CPUDumpFlags:
* @CPU_DUMP_CODE:
* @CPU_DUMP_FPU: dump FPU register state, not just integer
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
index 4d50694..2c39bed 100644
--- a/include/sysemu/sysemu.h
+++ b/include/sysemu/sysemu.h
@@ -64,7 +64,7 @@ int qemu_shutdown_requested_get(void);
int qemu_reset_requested_get(void);
void qemu_system_killed(int signal, pid_t pid);
void qemu_system_reset(bool report);
-void qemu_system_guest_panicked(void);
+void qemu_system_guest_panicked(GuestPanicInformation *info);
size_t qemu_target_page_bits(void);
void qemu_add_exit_notifier(Notifier *notify);
diff --git a/kvm-all.c b/kvm-all.c
index abfe92d..8fe69bb 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -2002,7 +2002,7 @@ int kvm_cpu_exec(CPUState *cpu)
case KVM_SYSTEM_EVENT_CRASH:
kvm_arch_save_crash_info(cpu);
qemu_mutex_lock_iothread();
- qemu_system_guest_panicked();
+ qemu_system_guest_panicked(cpu_get_crash_info(cpu));
qemu_mutex_unlock_iothread();
ret = 0;
break;
diff --git a/qapi/event.json b/qapi/event.json
index 7bf539b..970ff02 100644
--- a/qapi/event.json
+++ b/qapi/event.json
@@ -488,7 +488,9 @@
#
# @action: action that has been taken, currently always "pause"
#
-# Since: 1.5
+# @info: optional information about a panic
+#
+# Since: 1.5 (@info since 2.9)
#
# Example:
#
@@ -497,7 +499,7 @@
#
##
{ 'event': 'GUEST_PANICKED',
- 'data': { 'action': 'GuestPanicAction' } }
+ 'data': { 'action': 'GuestPanicAction', '*info': 'GuestPanicInformation' } }
##
# @QUORUM_FAILURE:
diff --git a/qom/cpu.c b/qom/cpu.c
index d57faf3..5158f31 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -218,6 +218,17 @@ static bool cpu_common_exec_interrupt(CPUState *cpu, int int_req)
return false;
}
+GuestPanicInformation *cpu_get_crash_info(CPUState *cpu)
+{
+ CPUClass *cc = CPU_GET_CLASS(cpu);
+ GuestPanicInformation *res = NULL;
+
+ if (cc->get_crash_info) {
+ res = cc->get_crash_info(cpu);
+ }
+ return res;
+}
+
void cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
int flags)
{
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 275e236..8bed688 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -3738,6 +3738,7 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data)
cc->do_interrupt = x86_cpu_do_interrupt;
cc->cpu_exec_interrupt = x86_cpu_exec_interrupt;
cc->dump_state = x86_cpu_dump_state;
+ cc->get_crash_info = x86_cpu_get_crash_info;
cc->set_pc = x86_cpu_set_pc;
cc->synchronize_from_tb = x86_cpu_synchronize_from_tb;
cc->gdb_read_register = x86_cpu_gdb_read_register;
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index 6ed3876..2536780 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -1864,7 +1864,7 @@ static void unmanageable_intercept(S390CPU *cpu, const char *str, int pswoffset)
str, cs->cpu_index, ldq_phys(cs->as, cpu->env.psa + pswoffset),
ldq_phys(cs->as, cpu->env.psa + pswoffset + 8));
s390_cpu_halt(cpu);
- qemu_system_guest_panicked();
+ qemu_system_guest_panicked(NULL);
}
static int handle_intercept(S390CPU *cpu)
@@ -1897,7 +1897,7 @@ static int handle_intercept(S390CPU *cpu)
if (is_special_wait_psw(cs)) {
qemu_system_shutdown_request();
} else {
- qemu_system_guest_panicked();
+ qemu_system_guest_panicked(NULL);
}
}
r = EXCP_HALTED;
diff --git a/vl.c b/vl.c
index b4eaf03..d5a183f 100644
--- a/vl.c
+++ b/vl.c
@@ -1707,18 +1707,26 @@ void qemu_system_reset(bool report)
cpu_synchronize_all_post_reset();
}
-void qemu_system_guest_panicked(void)
+void qemu_system_guest_panicked(GuestPanicInformation *info)
{
if (current_cpu) {
current_cpu->crash_occurred = true;
}
- qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, &error_abort);
+ qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE,
+ !!info, info, &error_abort);
vm_stop(RUN_STATE_GUEST_PANICKED);
if (!no_shutdown) {
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_POWEROFF,
- &error_abort);
+ !!info, info, &error_abort);
qemu_system_shutdown_request();
}
+
+ if (info) {
+ if (info->type == GUEST_PANIC_INFORMATION_KIND_HYPER_V) {
+ g_free(info->u.hyper_v.data);
+ }
+ g_free(info);
+ }
}
void qemu_system_reset_request(void)
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 3/3] vl: log available guest crash information
2017-02-09 15:13 [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 1/3] i386/cpu: add crash-information QOM property Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 2/3] report guest crash information in GUEST_PANICKED event Denis V. Lunev
@ 2017-02-09 15:13 ` Denis V. Lunev
2017-02-09 15:51 ` [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Fam Zheng
3 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2017-02-09 15:13 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Nefedov, Denis V . Lunev, Paolo Bonzini, Marcelo Tosatti,
Richard Henderson, Eduardo Habkost, Eric Blake, Markus Armbruster
From: Anton Nefedov <anton.nefedov@virtuozzo.com>
There is a suitable log mask for the purpose.
Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Marcelo Tosatti <mtosatti@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: Eric Blake <eblake@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>
---
vl.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/vl.c b/vl.c
index d5a183f..873aa4e 100644
--- a/vl.c
+++ b/vl.c
@@ -1709,6 +1709,8 @@ void qemu_system_reset(bool report)
void qemu_system_guest_panicked(GuestPanicInformation *info)
{
+ qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed\n");
+
if (current_cpu) {
current_cpu->crash_occurred = true;
}
@@ -1723,6 +1725,13 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
if (info) {
if (info->type == GUEST_PANIC_INFORMATION_KIND_HYPER_V) {
+ qemu_log_mask(LOG_GUEST_ERROR, "HV crash parameters: (%#"PRIx64
+ " %#"PRIx64" %#"PRIx64" %#"PRIx64" %#"PRIx64")\n",
+ info->u.hyper_v.data->arg1,
+ info->u.hyper_v.data->arg2,
+ info->u.hyper_v.data->arg3,
+ info->u.hyper_v.data->arg4,
+ info->u.hyper_v.data->arg5);
g_free(info->u.hyper_v.data);
}
g_free(info);
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters
2017-02-09 15:13 [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Denis V. Lunev
` (2 preceding siblings ...)
2017-02-09 15:13 ` [Qemu-devel] [PATCH v3 3/3] vl: log available guest crash information Denis V. Lunev
@ 2017-02-09 15:51 ` Fam Zheng
2017-02-09 15:55 ` Denis V. Lunev
3 siblings, 1 reply; 7+ messages in thread
From: Fam Zheng @ 2017-02-09 15:51 UTC (permalink / raw)
To: Denis V. Lunev
Cc: qemu-devel, Anton Nefedov, Eduardo Habkost, Marcelo Tosatti,
Markus Armbruster, Paolo Bonzini, Richard Henderson
On Thu, 02/09 18:13, Denis V. Lunev wrote:
> Windows reports BSOD parameters through Hyper-V crash MSRs. This
> information is very useful for initial crash analysis and thus
> it would be nice to see it in the QEMU log file. There is suitable
> log mask for the purpose.
>
> Linux guest does not provide this information, but still it would
> be nice to log that we have crashed.
>
> Changes since v1:
> - patches resplit
> - created property to query crash parameters
> - crash parameters added to panic event
This has a compiling error:
/var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c: In function ‘rtas_ibm_os_term’:
/var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c:337:5: error: the address of ‘error_abort’ will always evaluate as ‘true’ [-Werror=address]
qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, &error_abort);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c:337:5: error: too few arguments to function ‘qapi_event_send_guest_panicked’
In file included from /var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c:42:0:
../qapi-event.h:48:6: note: declared here
void qapi_event_send_guest_panicked(GuestPanicAction action, bool has_info, GuestPanicInformation *info, Error **errp);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
/var/tmp/patchew-tester-tmp-fmkso1x2/src/rules.mak:69: recipe for target 'hw/ppc/spapr_rtas.o' failed
make[1]: *** [hw/ppc/spapr_rtas.o] Error 1
Makefile:318: recipe for target 'subdir-ppc64-softmmu' failed
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters
2017-02-09 15:51 ` [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Fam Zheng
@ 2017-02-09 15:55 ` Denis V. Lunev
0 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2017-02-09 15:55 UTC (permalink / raw)
To: Fam Zheng
Cc: qemu-devel, Anton Nefedov, Eduardo Habkost, Marcelo Tosatti,
Markus Armbruster, Paolo Bonzini, Richard Henderson
On 02/09/2017 06:51 PM, Fam Zheng wrote:
> On Thu, 02/09 18:13, Denis V. Lunev wrote:
>> Windows reports BSOD parameters through Hyper-V crash MSRs. This
>> information is very useful for initial crash analysis and thus
>> it would be nice to see it in the QEMU log file. There is suitable
>> log mask for the purpose.
>>
>> Linux guest does not provide this information, but still it would
>> be nice to log that we have crashed.
>>
>> Changes since v1:
>> - patches resplit
>> - created property to query crash parameters
>> - crash parameters added to panic event
> This has a compiling error:
>
> /var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c: In function ‘rtas_ibm_os_term’:
> /var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c:337:5: error: the address of ‘error_abort’ will always evaluate as ‘true’ [-Werror=address]
> qapi_event_send_guest_panicked(GUEST_PANIC_ACTION_PAUSE, &error_abort);
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c:337:5: error: too few arguments to function ‘qapi_event_send_guest_panicked’
> In file included from /var/tmp/patchew-tester-tmp-fmkso1x2/src/hw/ppc/spapr_rtas.c:42:0:
> ../qapi-event.h:48:6: note: declared here
> void qapi_event_send_guest_panicked(GuestPanicAction action, bool has_info, GuestPanicInformation *info, Error **errp);
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
> /var/tmp/patchew-tester-tmp-fmkso1x2/src/rules.mak:69: recipe for target 'hw/ppc/spapr_rtas.o' failed
> make[1]: *** [hw/ppc/spapr_rtas.o] Error 1
> Makefile:318: recipe for target 'subdir-ppc64-softmmu' failed
>
oops. will check other arches and resubmit. My fault.
Den
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH v3 3/3] vl: log available guest crash information
2017-02-13 7:08 [Qemu-devel] [PATCH v3 " Denis V. Lunev
@ 2017-02-13 7:09 ` Denis V. Lunev
0 siblings, 0 replies; 7+ messages in thread
From: Denis V. Lunev @ 2017-02-13 7:09 UTC (permalink / raw)
To: qemu-devel; +Cc: Anton Nefedov, Denis V . Lunev
From: Anton Nefedov <anton.nefedov@virtuozzo.com>
There is a suitable log mask for the purpose.
Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com>
Signed-off-by: Denis V. Lunev <den@openvz.org>
---
vl.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/vl.c b/vl.c
index d5a183f..873aa4e 100644
--- a/vl.c
+++ b/vl.c
@@ -1709,6 +1709,8 @@ void qemu_system_reset(bool report)
void qemu_system_guest_panicked(GuestPanicInformation *info)
{
+ qemu_log_mask(LOG_GUEST_ERROR, "Guest crashed\n");
+
if (current_cpu) {
current_cpu->crash_occurred = true;
}
@@ -1723,6 +1725,13 @@ void qemu_system_guest_panicked(GuestPanicInformation *info)
if (info) {
if (info->type == GUEST_PANIC_INFORMATION_KIND_HYPER_V) {
+ qemu_log_mask(LOG_GUEST_ERROR, "HV crash parameters: (%#"PRIx64
+ " %#"PRIx64" %#"PRIx64" %#"PRIx64" %#"PRIx64")\n",
+ info->u.hyper_v.data->arg1,
+ info->u.hyper_v.data->arg2,
+ info->u.hyper_v.data->arg3,
+ info->u.hyper_v.data->arg4,
+ info->u.hyper_v.data->arg5);
g_free(info->u.hyper_v.data);
}
g_free(info);
--
2.7.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-02-13 7:09 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-09 15:13 [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 1/3] i386/cpu: add crash-information QOM property Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v2 2/3] report guest crash information in GUEST_PANICKED event Denis V. Lunev
2017-02-09 15:13 ` [Qemu-devel] [PATCH v3 3/3] vl: log available guest crash information Denis V. Lunev
2017-02-09 15:51 ` [Qemu-devel] [PATCH v2 0/3] kvm: report available guest crash parameters Fam Zheng
2017-02-09 15:55 ` Denis V. Lunev
-- strict thread matches above, loose matches on Subject: below --
2017-02-13 7:08 [Qemu-devel] [PATCH v3 " Denis V. Lunev
2017-02-13 7:09 ` [Qemu-devel] [PATCH v3 3/3] vl: log available guest crash information Denis V. Lunev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).