On 02/27/2018 04:32 AM, Bjoern Walk wrote:
Since QEMU 2.12 guest crash information for S390 is available in the
QEMU monitor, e.g.:
{
"timestamp": {
"seconds": 1518004739,
"microseconds": 552563
},
"event": "GUEST_PANICKED",
"data": {
"action": "pause",
"info": {
"core": 0,
"psw-addr": 1102832,
"reason": "disabled-wait",
"psw-mask": 562956395872256,
"type": "s390"
}
}
}
Let's log this information into the domain log file, e.g.:
2018-02-08 13:11:26.075+0000: panic s390: core='0'
psw-mask='0x0002000180000000' psw-addr='0x000000000010f146'
reason='disabled-wait'
Reviewed-by: Boris Fiuczynski <fiuczy(a)linux.vnet.ibm.com>
Signed-off-by: Bjoern Walk <bwalk(a)linux.vnet.ibm.com>
---
src/qemu/qemu_monitor.c | 19 ++++++++++++++++++-
src/qemu/qemu_monitor.h | 12 ++++++++++++
src/qemu/qemu_monitor_json.c | 38 ++++++++++++++++++++++++++++++++++++++
3 files changed, 68 insertions(+), 1 deletion(-)
I see as of commit id '4ada99ade' this is now merged in qemu master for
2.12.0...
Of course I need to wait for 4.2.0 to open up before pushing after
fixing one nit below..
[...]
diff --git a/src/qemu/qemu_monitor_json.c
b/src/qemu/qemu_monitor_json.c
index a09e93e4..9f68d4d1 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -576,6 +576,42 @@ qemuMonitorJSONGuestPanicExtractInfoHyperv(virJSONValuePtr data)
return NULL;
}
+static qemuMonitorEventPanicInfoPtr
+qemuMonitorJSONGuestPanicExtractInfoS390(virJSONValuePtr data)
+{
+ qemuMonitorEventPanicInfoPtr ret;
+ int core;
+ unsigned long long psw_mask, psw_addr;
+ const char *reason = NULL;
+
+ if (VIR_ALLOC(ret) < 0)
+ return NULL;
+
+ ret->type = QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_S390;
+
+ if (virJSONValueObjectGetNumberInt(data, "core", &core) < 0 ||
+ virJSONValueObjectGetNumberUlong(data, "psw-mask", &psw_mask) <
0 ||
+ virJSONValueObjectGetNumberUlong(data, "psw-addr", &psw_addr) <
0 ||
+ !(reason = virJSONValueObjectGetString(data, "reason"))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("malformed s390
panic data"));
+ goto error;
+ }
+
+ ret->data.s390.core = core;
+ ret->data.s390.psw_mask = psw_mask;
+ ret->data.s390.psw_addr = psw_addr;
+
+ if (VIR_STRDUP(ret->data.s390.reason, reason) < 0) {
+ virReportOOMError();
+ goto error;
+ }
No need for the OOMError as VIR_STRDUP will splat that for you (the
_QUIET one won't).
I can fix that up before pushing though.
Reviewed-by: John Ferlan <jferlan(a)redhat.com>
John
+
+ return ret;
+
+ error:
+ qemuMonitorEventPanicInfoFree(ret);
+ return NULL;
+}
[...]