On 02/07/2018 02:29 PM, Christian Borntraeger wrote: > > > On 02/07/2018 02:21 PM, David Hildenbrand wrote: >> On 07.02.2018 13:38, Christian Borntraeger wrote: >>> This patch is the s390 implementation of guest crash information, >>> similar to commit d187e08dc4 ("i386/cpu: add crash-information QOM >>> property") and the related commits. We will detect several crash >>> reasons, with the "disabled wait" being the most important one, since >>> this is used by all s390 guests as a "panic like" notification. >>> >>> Demonstrate these ways with examples as follows. >>> >>> 1. crash-information QOM property; >>> >>> Run qemu with -qmp unix:qmp-sock,server, then use utility "qmp-shell" >>> to execute "qom-get" command, and might get the result like, >>> >>> (QEMU) (QEMU) qom-get path=/machine/unattached/device[0] \ >>> property=crash-information >>> {"return": {"core": 0, "reason": "disabledwait", "psw-mask": >>> 562956395872256, \ >>> "type": "s390", "psw-addr": 1102832}} >>> >>> 2. GUEST_PANICKED event reporting; >>> >>> Run qemu with a socket option, and telnet or nc to that, >>> -chardev socket,id=qmp,port=4444,host=localhost,server \ >>> -mon chardev=qmp,mode=control,pretty=on \ >>> Negotiating the mode by { "execute": "qmp_capabilities" }, and the crash >>> information will be reported on a guest crash event like, >>> >>> { >>> "timestamp": { >>> "seconds": 1518004739, >>> "microseconds": 552563 >>> }, >>> "event": "GUEST_PANICKED", >>> "data": { >>> "action": "pause", >>> "info": { >>> "core": 0, >>> "psw-addr": 1102832, >>> "reason": "disabledwait", >>> "psw-mask": 562956395872256, >>> "type": "s390" >>> } >>> } >>> } >>> >>> 3. log; >>> >>> Run qemu with the parameters: -D <logfile> -d guest_errors, to >>> specify the logfile and log item. The results might be, >>> >>> Guest crashed on cpu 0: disabledwait >>> PSW: 0x0002000180000000 0x000000000010d3f0 >>> >>> Co-authored-by: Jing Liu <liuj...@linux.vnet.ibm.com> >>> Signed-off-by: Christian Borntraeger <borntrae...@de.ibm.com> >>> --- >>> V5->V6: - use qapi enum >>> - add core id to the crash parameters >>> - indent fixes >>> - rework debug log message to reuse the enum string >>> - update patch description >>> >>> qapi/run-state.json | 54 >>> +++++++++++++++++++++++++++++++++++++++++++++++++-- >>> target/s390x/cpu.c | 41 ++++++++++++++++++++++++++++++++++++++ >>> target/s390x/cpu.h | 2 ++ >>> target/s390x/helper.c | 5 ++++- >>> target/s390x/kvm.c | 15 +++++++------- >>> vl.c | 12 ++++++++++-- >>> 6 files changed, 116 insertions(+), 13 deletions(-) >>> >>> diff --git a/qapi/run-state.json b/qapi/run-state.json >>> index bca46a8785..328c86b4bb 100644 >>> --- a/qapi/run-state.json >>> +++ b/qapi/run-state.json >>> @@ -320,22 +320,29 @@ >>> # >>> # An enumeration of the guest panic information types >>> # >>> +# @hyper-v: hyper-v guest panic information type >>> +# >>> +# @s390: s390 guest panic information type (Since: 2.12) >>> +# >>> # Since: 2.9 >>> ## >>> { 'enum': 'GuestPanicInformationType', >>> - 'data': [ 'hyper-v'] } >>> + 'data': [ 'hyper-v', 's390' ] } >>> >>> ## >>> # @GuestPanicInformation: >>> # >>> # Information about a guest panic >>> # >>> +# @type: Crash type that defines the hypervisor specific information >>> +# >>> # Since: 2.9 >>> ## >>> {'union': 'GuestPanicInformation', >>> 'base': {'type': 'GuestPanicInformationType'}, >>> 'discriminator': 'type', >>> - 'data': { 'hyper-v': 'GuestPanicInformationHyperV' } } >>> + 'data': { 'hyper-v': 'GuestPanicInformationHyperV', >>> + 's390': 'GuestPanicInformationS390' } } >>> >>> ## >>> # @GuestPanicInformationHyperV: >>> @@ -350,3 +357,46 @@ >>> 'arg3': 'uint64', >>> 'arg4': 'uint64', >>> 'arg5': 'uint64' } } >>> + >>> +## >>> +# @S390CrashReason: >>> +# >>> +# Reason why the CPU is in a crashed state. >>> +# >>> +# @unknown: no crash reason was set >>> +# >>> +# @disabledwait: the CPU has entered a disabled wait state >>> +# >>> +# @extintloop: timer interrupt with new PSW enabled for timer >> >> Is this CPU timer or CKC? Or both? > > both. The kernel will give this to QEMU if one timer is going to be > delivered but the new PSW is enabled for external interrupts.
What about: diff --git a/qapi/run-state.json b/qapi/run-state.json index 328c86b4bb..c7b2ab84be 100644 --- a/qapi/run-state.json +++ b/qapi/run-state.json @@ -367,7 +367,8 @@ # # @disabledwait: the CPU has entered a disabled wait state # -# @extintloop: timer interrupt with new PSW enabled for timer +# @extintloop: clock comparator or cpu timer interrupt with new PSW enabled +# for external interrupts # # @pgmintloop: program interrupt with BAD new PSW #