WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] Add an ioctl interface for simple xenstore acces

> Watches work in kernel space in domU (the frontends to the split device
> drivers use them), but they don't work in userspace there.  The problem is
> that there is no support in xenbus for blocking a userspace process waiting
> for a watch to fire.
> 
> In domain 0, Xend uses a unix domain socket straight to Xenstored: it can
> block on that, as it's not going through the Xenbus kernel-level driver.

Huh?  Sleeping on the unix socket and sleeping on the /proc/xen/xenbus
filehandle should work equally well, shouldn't it?  Well, right now
there is no poll support, so you can't stuff the filehandle into
select()-loop.  But that is trivially fixable, patch below
(compile-tested only though).  Or did I miss the real problem?

cheers,

  Gerd

-- 
Gerd 'just married' Hoffmann <kraxel@xxxxxxx>
I'm the hacker formerly known as Gerd Knorr.
http://www.suse.de/~kraxel/just-married.jpeg
diff -r f6bd46559b93 drivers/xen/xenbus/xenbus_dev.c
--- a/drivers/xen/xenbus/xenbus_dev.c   Mon Mar  6 17:57:34 2006
+++ b/drivers/xen/xenbus/xenbus_dev.c   Mon Mar 20 11:04:49 2006
@@ -36,6 +36,7 @@
 #include <linux/notifier.h>
 #include <linux/wait.h>
 #include <linux/fs.h>
+#include <linux/poll.h>
 
 #include "xenbus_comms.h"
 
@@ -208,11 +209,22 @@
        return 0;
 }
 
+static unsigned int xenbus_dev_poll(struct file *file, poll_table *wait)
+{
+       struct xenbus_dev_data *u = file->private_data;
+
+       poll_wait(file, &u->read_waitq, wait);
+       if (u->read_cons != u->read_prod)
+               return POLLIN | POLLRDNORM;
+       return 0;
+}
+
 static struct file_operations xenbus_dev_file_ops = {
        .read = xenbus_dev_read,
        .write = xenbus_dev_write,
        .open = xenbus_dev_open,
        .release = xenbus_dev_release,
+       .poll = xenbus_dev_poll,
 };
 
 static int __init
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel