|
From: | Anthony Liguori |
Subject: | Re: [Qemu-devel] [6453] x86: Issue reset on triple faults (Jan Kiszka) |
Date: | Thu, 29 Jan 2009 11:04:49 -0600 |
User-agent: | Thunderbird 2.0.0.19 (X11/20090105) |
Jan Kiszka wrote:
Kevin Wolf wrote:Jan Kiszka schrieb:Kevin Wolf wrote:Anthony Liguori schrieb:Revision: 6453 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6453 Author: aliguori Date: 2009-01-26 19:54:36 +0000 (Mon, 26 Jan 2009) Log Message: ----------- x86: Issue reset on triple faults (Jan Kiszka) As discussed a few times on this list: A triple fault causes a system reset on x86, and some guests make use of this (e.g. 386BSD). To keep the chance of tracing unexpected resets, log them if CPU_LOG_RESET is set. Signed-off-by: Jan Kiszka <address@hidden> Signed-off-by: Anthony Liguori <address@hidden> Modified Paths: -------------- trunk/target-i386/op_helper.c Modified: trunk/target-i386/op_helper.c =================================================================== --- trunk/target-i386/op_helper.c 2009-01-26 19:54:31 UTC (rev 6452) +++ trunk/target-i386/op_helper.c 2009-01-26 19:54:36 UTC (rev 6453) @@ -1251,6 +1251,9 @@ } }+/* This should come from sysemu.h - if we could include it here... */+void qemu_system_reset_request(void); + /* * Check nested exceptions and change to double or triple fault if * needed. It should only be called, if this is not an interrupt. @@ -1267,9 +1270,19 @@ qemu_log_mask(CPU_LOG_INT, "check_exception old: 0x%x new 0x%x\n", env->old_exception, intno);- if (env->old_exception == EXCP08_DBLE)- cpu_abort(env, "triple fault"); +#if !defined(CONFIG_USER_ONLY) + if (env->old_exception == EXCP08_DBLE) { + if (env->hflags & HF_SVMI_MASK) + helper_vmexit(SVM_EXIT_SHUTDOWN, 0); /* does not return */+ if (loglevel & CPU_LOG_RESET)+ fprintf(logfile, "Triple fault\n");I think this one should use the new logging macros as well.Or in other words: ---------> Use new logging API. Signed-off-by: Jan Kiszka <address@hidden> diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c index 8cf3bb2..edf569e 100644 --- a/target-i386/op_helper.c +++ b/target-i386/op_helper.c @@ -1275,7 +1275,7 @@ static int check_exception(int intno, int *error_code) if (env->hflags & HF_SVMI_MASK) helper_vmexit(SVM_EXIT_SHUTDOWN, 0); /* does not return */- if (loglevel & CPU_LOG_RESET)+ if (qemu_loglevel_mask(CPU_LOG_RESET)) fprintf(logfile, "Triple fault\n");qemu_system_reset_request();Well, no. There's still a fprintf on logfile. ;-) qemu_log_mask(CPU_LOG_RESET, "Triple fault\n") should do the right thing.Use new logging API. Signed-off-by: Jan Kiszka <address@hidden>
Applied. Thanks.FWIW, it's easier for me to apply patches that have a [PATCH] in the subject. Even if it's a reply to a thread, it's helpful to rewrite the subject. Easier to apply == applied more quickly :-)
Regards, Anthony Liguori
diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c index 8cf3bb2..9e73b1e 100644 --- a/target-i386/op_helper.c +++ b/target-i386/op_helper.c @@ -1275,8 +1275,7 @@ static int check_exception(int intno, int *error_code) if (env->hflags & HF_SVMI_MASK) helper_vmexit(SVM_EXIT_SHUTDOWN, 0); /* does not return */- if (loglevel & CPU_LOG_RESET)- fprintf(logfile, "Triple fault\n"); + qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");qemu_system_reset_request();return EXCP_HLT;
[Prev in Thread] | Current Thread | [Next in Thread] |