From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Castro Subject: Re: Sched_op hypercall small questions Date: Thu, 22 Sep 2011 16:43:29 +0900 Message-ID: References: <4E793DC4.7080808@goop.org> <1316673048.27431.7.camel@dagon.hellion.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <1316673048.27431.7.camel@dagon.hellion.org.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org On Thu, Sep 22, 2011 at 3:30 PM, Ian Campbell wro= te: > On Thu, 2011-09-22 at 06:41 +0100, Daniel Castro wrote: >> On Wed, Sep 21, 2011 at 10:28 AM, Jeremy Fitzhardinge = wrote: >> > On 09/19/2011 11:17 PM, Daniel Castro wrote: >> >> On Tue, Sep 20, 2011 at 2:41 PM, Keir Fraser wro= te: >> >>> On 19/09/2011 22:21, "Daniel Castro" wrote: >> >>> >> >>>> Greetings all. >> >>>> >> >>>> Some small question regarding schedule poll operation hypercall. >> >>>> >> >>>> 1. struct sched_poll poll.timeout is measured in what unit of time? >> >>>> Secs, ms? ns? >> >>> It is an absolute system time (rather than a duration), in nanosecon= ds. >> >> really an absolute system time? >> >> >> >> When the timeout is set and the timeout is reached, the system behave= s >> >> like if the event had been received? i.e the bit is changed? >> > >> > You specify the timeout in the the form "wake up by time t". =A0If t i= s in >> > the past, it times out immediately. >> > >> >>>> 2. After issuing the hypercall_sched_op(SCHEDOP_poll, &poll); if no >> >>>> timeout is used in poll struct how long will I yield the CPU? >> >>> Until one of the specified event channel ports is pending. >> >> If the channel port never changes (the event never arrives) then I >> >> would yield for ever? >> > >> > If you have events unmasked and you get an unmasked event, then it wil= l >> > go into the event handler. >> >> My vcpu[0].evntchn_upcall_mask is 0, does this prevents the guest from >> receiving events? > > IIRC it's vice versa: setting it to 1 prevents the guest from receiving > events. > >> would that also explain why poll hypercall returns >> immediately? > > I don't see any reference to the masks in > xen/common/schedule.c:do_poll() so I don't think so. > >> =A0According to Xen's Definitive Guide evntchn_upcall_mask >> is unset at boot (my case exactly) so if it is 0 from the start and >> the guest (me) has to change it to 1 in order to receive events. > > I think that's the wrong way round. > >> How can I change the flag, I tried changing the value but it does not wo= rk >> like that apparently. > > evtchn_upcall_mask is the global mask but you may also need to unmask > the specific evtchn, which means clearing the relevant bit in > evtchn_mask. Thanks for the answer Ian, one question: If I do not manually change the mask bit, then after writing to the ring and the response arrives how can I be sure that xenstore is delivering an event? I am suspecting that xenstore does not use event notification for simple read and write operations. Could I be right? > >> >> Thanks >> > >> >>>> 3. If I issue the hypercall and the event never comes is it possibl= e >> >>>> to to yield the CPU for ever? >> >>> Yes, if you do not specify a timeout. >> >> Keir thanks for the answer. >> >> >> >> I am trying to read from xenstore, so I have the following: >> >> I write on my xenstore ring the query I want, then, >> >> hypercall_event_channel_op(EVTCHNOP_send ... >> >> If I read the ring inmediatly the answer is not ready so I issue a >> >> hypercall_sched_op(SCHEDOP_poll, &poll); >> >> But while I am entering the yield state the answer comes, so the even= t >> >> is never seen because it has already been delivered. >> > >> > It generally only makes sense to poll on masked events. >> > >> >> >> >> If I use some way to wait (just for very brief instant) after the >> >> event_channel_op send then, when I check the ring the answer is there= ; >> >> And I do not need to yield the CPU. >> >> >> >> Should I issue the wait after the send, rather than when I am about t= o >> >> read the answer? >> > >> > What environment is this in? >> > >> > =A0 =A0J >> > >> >> >> >> -- >> +-=3D=3D=3D=3D=3D---------------------------+ >> | +---------------------------------+ | This space intentionally blank >> for notetaking. >> | | =A0 | Daniel Castro, =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| >> | | =A0 | Consultant/Programmer.| >> | | =A0 | U Andes =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | >> +-------------------------------------+ >> >> >> > > > --=20 +-=3D=3D=3D=3D=3D---------------------------+ | +---------------------------------+ | This space intentionally blank for notetaking. | |=A0=A0 | Daniel Castro,=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | | |=A0=A0 | Consultant/Programmer.| | |=A0=A0 | U Andes=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=A0 | +-------------------------------------+