Re: [patch 2/2] KVM: fix kvm_vcpu_kick vs __vcpu_run race

Avi Kivity
2008-04-13T16:07:49Z

Avi Kivity wrote:
>
>> @@ -3944,11 +3950,13 @@ static void vcpu_kick_intr(void *info)
>> void kvm_vcpu_kick(struct kvm_vcpu *vcpu)
>> {
>> int ipi_pcpu = vcpu->cpu;
>> + int cpu = get_cpu();
>>
>> if (waitqueue_active(&vcpu->wq)) {
>> wake_up_interruptible(&vcpu->wq);
>> ++vcpu->stat.halt_wakeup;
>> }
>> - if (vcpu->guest_mode)
>> + if (vcpu->guest_mode && vcpu->cpu != cpu)
>> smp_call_function_single(ipi_pcpu, vcpu_kick_intr, vcpu, 0, 0);
>> + put_cpu();
>> }
>>
>
> Looks like a no-op now, as vcpu_kick_intr() does nothing and
> smp_call_function_single() won't force an exit if vcpu->cpu == cpu, so
> I dropped this hunk.
>

Oh, I see the reason now: the irq stuff now happens with irqs disabled
which annoys smp_call_function_single(). Well, I'd like to avoid all
this irq-disabled processing, so I'm looking at an alternate fix using a
new KVM_REQ_EVAL_IRQ.

--
error compiling committee.c: too many arguments to function