Message ID | 515E8E7E.8060504@de.ibm.com |
---|---|
State | New |
Headers | show |
On Fri, 05 Apr 2013 10:42:38 +0200 Christian Borntraeger <borntraeger@de.ibm.com> wrote: > On s390 the disabled wait state indicates a state of attention. > For example Linux uses that state after a panic. Lets > put the system into panicked state. > > An alternative implementation would be to state > disabled-wait <address> instead of pause in the action field. > (e.g. z/OS, z/VM and other classic OSes use the address of the > disabled wait to indicate an error code). > > Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> > --- > target-s390x/kvm.c | 17 ++++++++++++++--- > 1 file changed, 14 insertions(+), 3 deletions(-) > > diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c > index 644f484..0c111f0 100644 > --- a/target-s390x/kvm.c > +++ b/target-s390x/kvm.c > @@ -34,6 +34,8 @@ > #include "sysemu/kvm.h" > #include "cpu.h" > #include "sysemu/device_tree.h" > +#include "qapi/qmp/qjson.h" > +#include "monitor/monitor.h" > > /* #define DEBUG_KVM */ > > @@ -705,9 +707,18 @@ static int handle_intercept(S390CPU *cpu) > r = handle_instruction(cpu, run); > break; > case ICPT_WAITPSW: > - if (s390_del_running_cpu(cpu) == 0 && > - is_special_wait_psw(cs)) { > - qemu_system_shutdown_request(); > + /* disabled wait, since enabled wait is handled in kernel */ > + if (s390_del_running_cpu(cpu) == 0) { > + if (is_special_wait_psw(cs)) { > + qemu_system_shutdown_request(); > + } else { > + QObject *data; > + > + data = qobject_from_jsonf("{ 'action': %s }", "pause"); > + monitor_protocol_event(QEVENT_GUEST_PANICKED, data); > + qobject_decref(data); > + vm_stop(RUN_STATE_GUEST_PANICKED); This is on top of the pvpanic device, right? Seems good to me, although I don't remember the exact semantics of the new event. Also, I think you could move this code to a function and share it with the pvpanic device. > + } > } > r = EXCP_HALTED; > break; >
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c index 644f484..0c111f0 100644 --- a/target-s390x/kvm.c +++ b/target-s390x/kvm.c @@ -34,6 +34,8 @@ #include "sysemu/kvm.h" #include "cpu.h" #include "sysemu/device_tree.h" +#include "qapi/qmp/qjson.h" +#include "monitor/monitor.h" /* #define DEBUG_KVM */ @@ -705,9 +707,18 @@ static int handle_intercept(S390CPU *cpu) r = handle_instruction(cpu, run); break; case ICPT_WAITPSW: - if (s390_del_running_cpu(cpu) == 0 && - is_special_wait_psw(cs)) { - qemu_system_shutdown_request(); + /* disabled wait, since enabled wait is handled in kernel */ + if (s390_del_running_cpu(cpu) == 0) { + if (is_special_wait_psw(cs)) { + qemu_system_shutdown_request(); + } else { + QObject *data; + + data = qobject_from_jsonf("{ 'action': %s }", "pause"); + monitor_protocol_event(QEVENT_GUEST_PANICKED, data); + qobject_decref(data); + vm_stop(RUN_STATE_GUEST_PANICKED); + } } r = EXCP_HALTED; break;
On s390 the disabled wait state indicates a state of attention. For example Linux uses that state after a panic. Lets put the system into panicked state. An alternative implementation would be to state disabled-wait <address> instead of pause in the action field. (e.g. z/OS, z/VM and other classic OSes use the address of the disabled wait to indicate an error code). Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> --- target-s390x/kvm.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-)