From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LBBHH-00023H-Ft for qemu-devel@nongnu.org; Fri, 12 Dec 2008 11:54:11 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LBBHF-00022Q-UG for qemu-devel@nongnu.org; Fri, 12 Dec 2008 11:54:11 -0500 Received: from [199.232.76.173] (port=51800 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LBBHF-00022E-PE for qemu-devel@nongnu.org; Fri, 12 Dec 2008 11:54:09 -0500 Received: from mx2.suse.de ([195.135.220.15]:38467) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LBBHF-00075h-7U for qemu-devel@nongnu.org; Fri, 12 Dec 2008 11:54:09 -0500 Received: from Relay1.suse.de (relay-ext.suse.de [195.135.221.8]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id AC9C548551 for ; Fri, 12 Dec 2008 17:54:06 +0100 (CET) Message-ID: <4942972D.9020300@suse.de> Date: Fri, 12 Dec 2008 17:54:05 +0100 From: Alexander Graf MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] SVM: acknowledge interrupt only after it is taken References: <1229100521-12665-1-git-send-email-agraf@suse.de> In-Reply-To: <1229100521-12665-1-git-send-email-agraf@suse.de> Content-Type: text/plain; charset=ISO-8859-1 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: qemu-devel@nongnu.org Alexander Graf wrote: > SVM specifies that the V_IRQ mask is only to be removed, if the > interrupt that is to be delivered actually is delivered. > > As of the SVM rewrite, this mask is always unmasked when the main cpu > loop is processed, leaving a corner case where calling the interrupt > handler causes a #PF. In that case (booting Linux / starting gfxboot) > the current implementation tells the VMM the interrupt is taken, even > though it is not. > > This patch modifies the VIRQ unmasking to occur after do_interrupt, > making gfxboot work again. > (wow, I actually forgot that line even though working with git - phew) Signed-off-by: Alexander Graf > --- > cpu-exec.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/cpu-exec.c b/cpu-exec.c > index 9a35a59..981ba86 100644 > --- a/cpu-exec.c > +++ b/cpu-exec.c > @@ -401,11 +401,11 @@ int cpu_exec(CPUState *env1) > int intno; > /* FIXME: this should respect TPR */ > svm_check_intercept(SVM_EXIT_VINTR); > - env->interrupt_request &= ~CPU_INTERRUPT_VIRQ; > intno = ldl_phys(env->vm_vmcb + offsetof(struct vmcb, control.int_vector)); > if (loglevel & CPU_LOG_TB_IN_ASM) > fprintf(logfile, "Servicing virtual hardware INT=0x%02x\n", intno); > do_interrupt(intno, 0, 0, 0, 1); > + env->interrupt_request &= ~CPU_INTERRUPT_VIRQ; > next_tb = 0; > #endif > } >