Re: [PATCH 5/5] KVM: PPC: Book3S HV: Check wait conditions before sleeping in kvmppc_vcore_blocked

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 03.11.14 05:52, Paul Mackerras wrote:
> From: "Suresh E. Warrier" <warrier@xxxxxxxxxxxxxxxxxx>
> 
> 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 <warrier@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Paul Mackerras <paulus@xxxxxxxxx>

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-ppc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [KVM Development]     [KVM ARM]     [KVM ia64]     [Linux Virtualization]     [Linux USB Devel]     [Linux Video]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux