[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] SVM: acknowledge interrupt only after it is tak
From: |
Aurelien Jarno |
Subject: |
Re: [Qemu-devel] [PATCH] SVM: acknowledge interrupt only after it is taken |
Date: |
Sat, 13 Dec 2008 13:33:07 +0100 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
On Fri, Dec 12, 2008 at 05:48:41PM +0100, 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.
Thanks, applied.
> ---
> 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
> }
> --
> 1.5.6
>
>
>
>
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' address@hidden | address@hidden
`- people.debian.org/~aurel32 | www.aurel32.net