> ------------------------------/linux-2.6-pvops.git/kernel/irq/chip.c---
> 354 void
> 355 handle_level_irq(unsigned int irq, struct irq_desc *desc)
> 356 {
> 357 struct irqaction *action;
> 358 irqreturn_t action_ret;
> 359
> 360 spin_lock(&desc->lock);
> 361 mask_ack_irq(desc, irq);
> 362
> 363 if (unlikely(desc->status & IRQ_INPROGRESS))
> 364 goto out_unlock;
> 365 desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
> 366 kstat_incr_irqs_this_cpu(irq, desc);
> 367
>
> BTW, the qemu still works fine when VM is hang. Below is it strace output.
> No much difference between other well worked qemu instance, other than select
> all Timeout.
> -------------------
> select(14, [3 7 11 12 13], [], [], {0, 10000}) = 0 (Timeout)
> clock_gettime(CLOCK_MONOTONIC, {673470, 59535265}) = 0
> clock_gettime(CLOCK_MONOTONIC, {673470, 59629728}) = 0
> clock_gettime(CLOCK_MONOTONIC, {673470, 59717700}) = 0
> clock_gettime(CLOCK_MONOTONIC, {673470, 59806552}) = 0
> select(14, [3 7 11 12 13], [], [], {0, 10000}) = 0 (Timeout)
> clock_gettime(CLOCK_MONOTONIC, {673470, 70234406}) = 0
> clock_gettime(CLOCK_MONOTONIC, {673470, 70332116}) = 0
> clock_gettime(CLOCK_MONOTONIC, {673470, 70419835}) = 0
>
>
>
>
>> Date: Mon, 20 Sep 2010 10:35:46 +0100
>> Subject: Re: VM hung after running sometime
>> From:
keir.fraser@xxxxxxxxxxxxx
>> To:
tinnycloud@xxxxxxxxxxx
>> CC:
xen-devel@xxxxxxxxxxxxxxxxxxx;
jbeulich@xxxxxxxxxx
>>
>> On 20/09/2010 10:15, "MaoXiaoyun" <
tinnycloud@xxxxxxxxxxx> wrote:
>>
>>> Thanks Keir.
>>>
>>> You're right, after I deeply looked into the wait_on_xen_event_channel, it
>>> is
>>> smart enough
>>> to avoid the race I assumed.
>>>
>>> How about prepare_wait_on_xen_event_channel ?
>>> Currently Istill don't know when it will be invoked.
>>> Could enlighten me?
>>
>> As you can see it is called from hvm_send_assist_req(), hence it is called
>> whenever an ioreq is sent to qemu-dm. Note that it is called *before*
>> qemu-dm is notified -- hence it cannot race the wakeup from qemu, as we will