Re: [PATCH] Fix block mode during halt emulation

2008-07-01 Thread Marcelo Tosatti

Hi Dor,

On Tue, Jul 01, 2008 at 01:30:08AM +0300, Dor Laor wrote:
> >From d85feaae019bc0abc98a2524369e04d521a78aa8 Mon Sep 17 00:00:00 2001
> From: Dor Laor <[EMAIL PROTECTED]>
> Date: Mon, 30 Jun 2008 18:22:44 -0400
> Subject: [PATCH] Fix block mode hduring halt emulation
> 
> There is no need to check for pending pit/apic timer, nor
> pending virq, since all of the check KVM_MP_STATE_RUNNABLE
> and wakeup the waitqueue.
> 
> It fixes 100% cpu when windows guest is shutdown (non acpi HAL)

You need to test for pending interrupts and timers. IRQ injection and
timers can trigger before kvm_vcpu_block() adds the running thread to
the waitqueue, in which case waitqueue_active() test fails.

> Signed-off-by: Dor Laor <[EMAIL PROTECTED]>
> ---
>  virt/kvm/kvm_main.c |4 
>  1 files changed, 0 insertions(+), 4 deletions(-)
> 
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index b90da0b..faa0778 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -816,10 +816,6 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
>   for (;;) {
>   prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
>  
> - if (kvm_cpu_has_interrupt(vcpu))
> - break;
> - if (kvm_cpu_has_pending_timer(vcpu))
> - break;
>   if (kvm_arch_vcpu_runnable(vcpu))
>   break;
>   if (signal_pending(current))
> -- 
> 1.5.4


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Fix block mode during halt emulation

2008-07-01 Thread Dor Laor
Well, it's obiosly creates a race, it was too [EMAIL PROTECTED]
The problem is that kvm_cpu_has_interrupt() calls apic that checks if 
the kvm_apic_accept_pic_intr and its true since probably the apic is
masked on guest shutdown.
There is no test whether the pic is masked. 
Testing.

On Tue, 2008-07-01 at 01:30 +0300, Dor Laor wrote:
> >From d85feaae019bc0abc98a2524369e04d521a78aa8 Mon Sep 17 00:00:00 2001
> From: Dor Laor <[EMAIL PROTECTED]>
> Date: Mon, 30 Jun 2008 18:22:44 -0400
> Subject: [PATCH] Fix block mode hduring halt emulation
> 
> There is no need to check for pending pit/apic timer, nor
> pending virq, since all of the check KVM_MP_STATE_RUNNABLE
> and wakeup the waitqueue.
> 
> It fixes 100% cpu when windows guest is shutdown (non acpi HAL)
> 
> Signed-off-by: Dor Laor <[EMAIL PROTECTED]>
> ---
>  virt/kvm/kvm_main.c |4 
>  1 files changed, 0 insertions(+), 4 deletions(-)
> 
> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
> index b90da0b..faa0778 100644
> --- a/virt/kvm/kvm_main.c
> +++ b/virt/kvm/kvm_main.c
> @@ -816,10 +816,6 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
>   for (;;) {
>   prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
>  
> - if (kvm_cpu_has_interrupt(vcpu))
> - break;
> - if (kvm_cpu_has_pending_timer(vcpu))
> - break;
>   if (kvm_arch_vcpu_runnable(vcpu))
>   break;
>   if (signal_pending(current))

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] Fix block mode during halt emulation

2008-06-30 Thread Dor Laor
>From d85feaae019bc0abc98a2524369e04d521a78aa8 Mon Sep 17 00:00:00 2001
From: Dor Laor <[EMAIL PROTECTED]>
Date: Mon, 30 Jun 2008 18:22:44 -0400
Subject: [PATCH] Fix block mode hduring halt emulation

There is no need to check for pending pit/apic timer, nor
pending virq, since all of the check KVM_MP_STATE_RUNNABLE
and wakeup the waitqueue.

It fixes 100% cpu when windows guest is shutdown (non acpi HAL)

Signed-off-by: Dor Laor <[EMAIL PROTECTED]>
---
 virt/kvm/kvm_main.c |4 
 1 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index b90da0b..faa0778 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -816,10 +816,6 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
for (;;) {
prepare_to_wait(&vcpu->wq, &wait, TASK_INTERRUPTIBLE);
 
-   if (kvm_cpu_has_interrupt(vcpu))
-   break;
-   if (kvm_cpu_has_pending_timer(vcpu))
-   break;
if (kvm_arch_vcpu_runnable(vcpu))
break;
if (signal_pending(current))
-- 
1.5.4


0001-Fix-block-mode-during-halt-emulation.patch
Description: application/mbox