I am trying to send a stream of events about one domain to another. so I set up a ring between the monitoring domain and xen (not the monitored domain). however I am having trouble blocking when buffer space runs out. the intuitive while (!buffer_space_available()) do_block(); does not work; do_block() appears to return to guest context, not to the while loop (is this correct?). the other alternative, while (!buffer_space_available()) if (!test_and_set_bit(EDF_BLOCKED, &ed->ed_flags)) domain_sleep(ed); freezes xen solid. is there a way to do it? am I missing something obvious? Avi _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
may be worth using wait queues here? (or schedule()) On Wednesday 29 June 2005 15:53, Avi Kivity wrote:> I am trying to send a stream of events about one domain to another. so I > set up a ring between the monitoring domain and xen (not the monitored > domain). however I am having trouble blocking when buffer space runs > out. > > the intuitive > > while (!buffer_space_available()) > do_block(); > > does not work; do_block() appears to return to guest context, not to the > while loop (is this correct?). the other alternative, > > while (!buffer_space_available()) > if (!test_and_set_bit(EDF_BLOCKED, &ed->ed_flags)) > domain_sleep(ed); > > freezes xen solid. > > is there a way to do it? am I missing something obvious? > > Avi > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel-- Timenkov Yuri _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Xen on x86 doesn''t support stack-based continuations within the hypervisor -- that is, there is no way to deschedule the current domain within Xen and then automatically return to your current point of execution when you are re-scheduled. If you have further work to do, before returning to guest context, when the domain is rescheduled then you need to install your own hook function into vcpu->arch.schedule_tail. You''ll need to xmalloc any space you need for continuation data. -- Keir On 29 Jun 2005, at 12:53, Avi Kivity wrote:> I am trying to send a stream of events about one domain to another. so > I > set up a ring between the monitoring domain and xen (not the monitored > domain). however I am having trouble blocking when buffer space runs > out. > > the intuitive > > while (!buffer_space_available()) > do_block(); > > does not work; do_block() appears to return to guest context, not to > the > while loop (is this correct?). the other alternative, > > while (!buffer_space_available()) > if (!test_and_set_bit(EDF_BLOCKED, &ed->ed_flags)) > domain_sleep(ed); > > freezes xen solid. > > is there a way to do it? am I missing something obvious? > > Avi > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 29 Jun 2005, at 13:03, Timenkov Yuri wrote:> may be worth using wait queues here? (or schedule())Xen''s not Linux: the above primitives/functions do not exist. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On Wed, 2005-06-29 at 13:42 +0100, Keir Fraser wrote:> Xen on x86 doesn''t support stack-based continuations within the > hypervisor -- that is, there is no way to deschedule the current domain > within Xen and then automatically return to your current point of > execution when you are re-scheduled. > > If you have further work to do, before returning to guest context, when > the domain is rescheduled then you need to install your own hook > function into vcpu->arch.schedule_tail. You''ll need to xmalloc any > space you need for continuation data. >this will probably serve. thanks.> -- Keir > > On 29 Jun 2005, at 12:53, Avi Kivity wrote: > > > I am trying to send a stream of events about one domain to another. so > > I > > set up a ring between the monitoring domain and xen (not the monitored > > domain). however I am having trouble blocking when buffer space runs > > out. > > > > the intuitive > > > > while (!buffer_space_available()) > > do_block(); > > > > does not work; do_block() appears to return to guest context, not to > > the > > while loop (is this correct?). the other alternative, > > > > while (!buffer_space_available()) > > if (!test_and_set_bit(EDF_BLOCKED, &ed->ed_flags)) > > domain_sleep(ed); > > > > freezes xen solid. > > > > is there a way to do it? am I missing something obvious? > > > > Avi > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel