diff mbox

fix userspace irqchip.

Message ID 1252021260-28941-1-git-send-email-glommer@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Glauber Costa Sept. 3, 2009, 11:41 p.m. UTC
It is broken since main loop reorganization. (6185d8b6)

Problem is that we, the emulator, has nothing to do with the CPU flags. has_work()
should not depend on that at all.

Signed-off-by: Glauber Costa <glommer@redhat.com>
CC: Gleb Natapov <gleb@redhat.com>
---
 qemu-kvm-x86.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

Comments

Gleb Natapov Sept. 6, 2009, 8:50 a.m. UTC | #1
On Thu, Sep 03, 2009 at 07:41:00PM -0400, Glauber Costa wrote:
> It is broken since main loop reorganization. (6185d8b6)
> 
What is broken? Boots WindowsXp for me here.

> Problem is that we, the emulator, has nothing to do with the CPU flags. has_work()
> should not depend on that at all.
IF_MASK flags is set into env->eflags on each exit by function just
above kvm_arch_has_work() and contains valid and relevant information.
The check your are removing should be there. It ensures that interrupts
are ignored if they are blocked by vcpu.

> 
> Signed-off-by: Glauber Costa <glommer@redhat.com>
> CC: Gleb Natapov <gleb@redhat.com>
> ---
>  qemu-kvm-x86.c |    5 ++---
>  1 files changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
> index f80d82b..66ed6b5 100644
> --- a/qemu-kvm-x86.c
> +++ b/qemu-kvm-x86.c
> @@ -1393,9 +1393,8 @@ void kvm_arch_post_kvm_run(void *opaque, CPUState *env)
>  
>  int kvm_arch_has_work(CPUState *env)
>  {
> -    if (((env->interrupt_request & CPU_INTERRUPT_HARD) &&
> -	 (env->eflags & IF_MASK)) ||
> -	(env->interrupt_request & CPU_INTERRUPT_NMI))
> +    if (((env->interrupt_request & CPU_INTERRUPT_HARD) || 
> +	(env->interrupt_request & CPU_INTERRUPT_NMI)))
>  	return 1;
>      return 0;
>  }
> -- 
> 1.6.2.2

--
			Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Glauber Costa Sept. 6, 2009, 12:34 p.m. UTC | #2
On Sun, Sep 6, 2009 at 5:50 AM, Gleb Natapov<gleb@redhat.com> wrote:
> On Thu, Sep 03, 2009 at 07:41:00PM -0400, Glauber Costa wrote:
>> It is broken since main loop reorganization. (6185d8b6)
>>
> What is broken? Boots WindowsXp for me here.

Fedora guests don't boot.

>> Problem is that we, the emulator, has nothing to do with the CPU flags. has_work()
>> should not depend on that at all.
> IF_MASK flags is set into env->eflags on each exit by function just
> above kvm_arch_has_work() and contains valid and relevant information.
> The check your are removing should be there. It ensures that interrupts
> are ignored if they are blocked by vcpu.
>
>>
>> Signed-off-by: Glauber Costa <glommer@redhat.com>
>> CC: Gleb Natapov <gleb@redhat.com>
>> ---
>>  qemu-kvm-x86.c |    5 ++---
>>  1 files changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
>> index f80d82b..66ed6b5 100644
>> --- a/qemu-kvm-x86.c
>> +++ b/qemu-kvm-x86.c
>> @@ -1393,9 +1393,8 @@ void kvm_arch_post_kvm_run(void *opaque, CPUState *env)
>>
>>  int kvm_arch_has_work(CPUState *env)
>>  {
>> -    if (((env->interrupt_request & CPU_INTERRUPT_HARD) &&
>> -      (env->eflags & IF_MASK)) ||
>> -     (env->interrupt_request & CPU_INTERRUPT_NMI))
>> +    if (((env->interrupt_request & CPU_INTERRUPT_HARD) ||
>> +     (env->interrupt_request & CPU_INTERRUPT_NMI)))
>>       return 1;
>>      return 0;
>>  }
>> --
>> 1.6.2.2
>
> --
>                        Gleb.
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
Gleb Natapov Sept. 6, 2009, 1:19 p.m. UTC | #3
On Sun, Sep 06, 2009 at 09:34:38AM -0300, Glauber Costa wrote:
> On Sun, Sep 6, 2009 at 5:50 AM, Gleb Natapov<gleb@redhat.com> wrote:
> > On Thu, Sep 03, 2009 at 07:41:00PM -0400, Glauber Costa wrote:
> >> It is broken since main loop reorganization. (6185d8b6)
> >>
> > What is broken? Boots WindowsXp for me here.
> 
> Fedora guests don't boot.
> 
Which one? I tested F10 live cd and F11 beta (both 32 bit). They work
fine here with userspace irq chip.

> >> Problem is that we, the emulator, has nothing to do with the CPU flags. has_work()
> >> should not depend on that at all.
> > IF_MASK flags is set into env->eflags on each exit by function just
> > above kvm_arch_has_work() and contains valid and relevant information.
> > The check your are removing should be there. It ensures that interrupts
> > are ignored if they are blocked by vcpu.
> >
> >>
> >> Signed-off-by: Glauber Costa <glommer@redhat.com>
> >> CC: Gleb Natapov <gleb@redhat.com>
> >> ---
> >>  qemu-kvm-x86.c |    5 ++---
> >>  1 files changed, 2 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
> >> index f80d82b..66ed6b5 100644
> >> --- a/qemu-kvm-x86.c
> >> +++ b/qemu-kvm-x86.c
> >> @@ -1393,9 +1393,8 @@ void kvm_arch_post_kvm_run(void *opaque, CPUState *env)
> >>
> >>  int kvm_arch_has_work(CPUState *env)
> >>  {
> >> -    if (((env->interrupt_request & CPU_INTERRUPT_HARD) &&
> >> -      (env->eflags & IF_MASK)) ||
> >> -     (env->interrupt_request & CPU_INTERRUPT_NMI))
> >> +    if (((env->interrupt_request & CPU_INTERRUPT_HARD) ||
> >> +     (env->interrupt_request & CPU_INTERRUPT_NMI)))
> >>       return 1;
> >>      return 0;
> >>  }
> >> --
> >> 1.6.2.2
> >
> > --
> >                        Gleb.
> > --
> > To unsubscribe from this list: send the line "unsubscribe kvm" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >
> 
> 
> 
> -- 
> Glauber  Costa.
> "Free as in Freedom"
> http://glommer.net
> 
> "The less confident you are, the more serious you have to act."

--
			Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index f80d82b..66ed6b5 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -1393,9 +1393,8 @@  void kvm_arch_post_kvm_run(void *opaque, CPUState *env)
 
 int kvm_arch_has_work(CPUState *env)
 {
-    if (((env->interrupt_request & CPU_INTERRUPT_HARD) &&
-	 (env->eflags & IF_MASK)) ||
-	(env->interrupt_request & CPU_INTERRUPT_NMI))
+    if (((env->interrupt_request & CPU_INTERRUPT_HARD) || 
+	(env->interrupt_request & CPU_INTERRUPT_NMI)))
 	return 1;
     return 0;
 }