Xen 
 
Home About Xen.org Xen Xen Summit Wiki Mailing List Bug Tracker Xen Downloads
 
   
 

xen-devel

Re: [Xen-devel] suspending execution within Xen

To: Avi Kivity <avi.kivity@xxxxxxxxxxxx>
Subject: Re: [Xen-devel] suspending execution within Xen
From: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
Date: Wed, 29 Jun 2005 13:42:39 +0100
Cc: xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Wed, 29 Jun 2005 12:37:29 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1120045998.12491.10.camel@xxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1120045998.12491.10.camel@xxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx

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@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel