On 03.11.14 05:52, Paul Mackerras wrote:
> From: "Suresh E. Warrier" <warr...@linux.vnet.ibm.com>
> 
> The kvmppc_vcore_blocked() code does not check for the wait condition
> after putting the process on the wait queue. This means that it is
> possible for an external interrupt to become pending, but the vcpu to
> remain asleep until the next decrementer interrupt.  The fix is to
> make one last check for pending exceptions and ceded state before
> calling schedule().
> 
> Signed-off-by: Suresh Warrier <warr...@linux.vnet.ibm.com>
> Signed-off-by: Paul Mackerras <pau...@samba.org>

I don't understand the race you're fixing here. Can you please explain it?


Alex

> ---
>  arch/powerpc/kvm/book3s_hv.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
> index cd7e030..1a7a281 100644
> --- a/arch/powerpc/kvm/book3s_hv.c
> +++ b/arch/powerpc/kvm/book3s_hv.c
> @@ -1828,9 +1828,29 @@ static void kvmppc_wait_for_exec(struct kvm_vcpu 
> *vcpu, int wait_state)
>   */
>  static void kvmppc_vcore_blocked(struct kvmppc_vcore *vc)
>  {
> +     struct kvm_vcpu *vcpu;
> +     int do_sleep = 1;
> +
>       DEFINE_WAIT(wait);
>  
>       prepare_to_wait(&vc->wq, &wait, TASK_INTERRUPTIBLE);
> +
> +     /*
> +      * Check one last time for pending exceptions and ceded state after
> +      * we put ourselves on the wait queue
> +      */
> +     list_for_each_entry(vcpu, &vc->runnable_threads, arch.run_list) {
> +             if (vcpu->arch.pending_exceptions || !vcpu->arch.ceded) {
> +                     do_sleep = 0;
> +                     break;
> +             }
> +     }
> +
> +     if (!do_sleep) {
> +             finish_wait(&vc->wq, &wait);
> +             return;
> +     }
> +
>       vc->vcore_state = VCORE_SLEEPING;
>       spin_unlock(&vc->lock);
>       schedule();
> 
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to