From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LRlDz-00058R-6O for qemu-devel@nongnu.org; Tue, 27 Jan 2009 05:31:19 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LRlDy-000582-4U for qemu-devel@nongnu.org; Tue, 27 Jan 2009 05:31:18 -0500 Received: from [199.232.76.173] (port=55678 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LRlDw-00057m-WE for qemu-devel@nongnu.org; Tue, 27 Jan 2009 05:31:17 -0500 Received: from lizzard.sbs.de ([194.138.37.39]:19318) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LRlDw-0004Rf-88 for qemu-devel@nongnu.org; Tue, 27 Jan 2009 05:31:16 -0500 Message-ID: <497EE274.3040400@siemens.com> Date: Tue, 27 Jan 2009 11:31:16 +0100 From: Jan Kiszka MIME-Version: 1.0 Subject: Re: [Qemu-devel] [6453] x86: Issue reset on triple faults (Jan Kiszka) References: <497EDEC2.8020805@suse.de> <497EE0DF.9050102@siemens.com> <497EE312.5090406@suse.de> In-Reply-To: <497EE312.5090406@suse.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: qemu-devel@nongnu.org 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 >>>> Signed-off-by: Anthony Liguori >>>> >>>> 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 >> >> 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 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;