| 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?  
 > Date: Mon, 20 Sep 2010 08:45:21 +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 07:00, "MaoXiaoyun" <tinnycloud@xxxxxxxxxxx> wrote:
 >
 > > When IO is not ready, domain U in VMEXIT->hvm_do_resume might invoke
 > > wait_on_xen_event_channel
 > > (where it is blocked in _VPF_blocked_in_xen).
 > >
 > > Here is my assumption of event missed.
 > >
 > > step 1: hvm_do_resume execute 260, and suppose p->state is STATE_IOREQ_READY
 > > or STATE_IOREQ_INPROCESS
 > > step 2: then in cpu_handle_ioreq is in line 547, it execute line 548 so
 > > quickly before hvm_do_resume execute line 270.
 > > Well, the event is missed.
 > > In other words, the _VPF_blocked_in_xen is cleared be
 fore it is actually
 > > setted, and Domian U who is blocked
 > > might never get unblocked, it this possible?
 >
 > Firstly, that code is very paranoid and it should never actually be the case
 > that we see STATE_IOREQ_READY or STATE_IOREQ_INPROCESS in hvm_do_resume().
 > Secondly, even if you do, take a look at the implementation of
 > wait_on_xen_event_channel() -- it is smart enough to avoid the race you
 > mention.
 >
 > -- Keir
 >
 >
 
 |