Diffs since last iteration:
diff -rupN -x '*.orig' xen-unstable.old/tools/python/xen/xend/XendDevices.py
xen-unstable.new/tools/python/xen/xend/XendDevices.py
--- xen-unstable.old/tools/python/xen/xend/XendDevices.py 2006-11-17
13:56:52.000000000 +0100
+++ xen-unstable.new/tools/python/xen/xend/XendDevices.py 2006-11-17
13:56:21.000000000 +0100
@@ -42,7 +42,7 @@ class XendDevices:
'usb': usbif.UsbifController,
'tap': BlktapController,
'vfb': vfbif.VfbifController,
- 'vkbd': vfif.VkbdifController,
+ 'vkbd': vfbif.VkbdifController,
}
#@classmethod
diff -rupN -x '*.orig' xen-unstable.old/tools/python/xen/xm/create.py
xen-unstable.new/tools/python/xen/xm/create.py
--- xen-unstable.old/tools/python/xen/xm/create.py 2006-11-17
13:53:39.000000000 +0100
+++ xen-unstable.new/tools/python/xen/xm/create.py 2006-11-17
13:56:21.000000000 +0100
@@ -280,6 +280,14 @@ gopts.var('usbport', val='PATH',
use="""Add a physical USB port to a domain, as specified by the path
to that port. This option may be repeated to add more than one
port.""")
+gopts.var('vfb', val="no|yes'",
+ fn=set_bool, default=0,
+ use="Make the domain a framebuffer backend.")
+
+gopts.var('vkbd', val="no|yes'",
+ fn=set_bool, default=0,
+ use="Make the domain a keyboard backend.")
+
gopts.var('vif',
val="type=TYPE,mac=MAC,bridge=BRIDGE,ip=IPADDR,script=SCRIPT,backend=DOM,vifname=NAME",
fn=append_value, default=[],
use="""Add a network interface with the given MAC address and bridge.
@@ -560,6 +568,13 @@ def configure_usb(config_devs, vals):
config_usb = ['usbport', ['path', path]]
config_devs.append(['device', config_usb])
+def configure_vfbs(config_devs, vals):
+ if vals.vfb:
+ config_devs.append(['device', ['vfb', []]])
+
+def configure_vkbds(config_devs, vals):
+ if vals.vkbd:
+ config_devs.append(['device', ['vkbd', []]])
def configure_security(config, vals):
"""Create the config for ACM security labels.
@@ -738,6 +753,8 @@ def make_config(vals):
configure_vifs(config_devs, vals)
configure_usb(config_devs, vals)
configure_vtpm(config_devs, vals)
+ configure_vfbs(config_devs, vals)
+ configure_vkbds(config_devs, vals)
configure_security(config, vals)
config += config_devs
diff -rupN -x '*.orig' xen-unstable.old/tools/xenfb/vncfb.c
xen-unstable.new/tools/xenfb/vncfb.c
--- xen-unstable.old/tools/xenfb/vncfb.c 2006-11-17 13:56:52.000000000
+0100
+++ xen-unstable.new/tools/xenfb/vncfb.c 2006-11-17 13:56:21.000000000
+0100
@@ -260,7 +260,7 @@ int main(int argc, char **argv)
rfbScreenInfoPtr server;
char *fake_argv[7] = { "vncfb", "-rfbport", "5901",
"-desktop", "xen-vncfb",
- "-listen", "0.0.0.0" };
+ "-listen", "127.0.0.1" };
int fake_argc = sizeof(fake_argv) / sizeof(fake_argv[0]);
int domid = -1, port = -1;
char *title = NULL;
diff -rupN -x '*.orig' xen-unstable.old/tools/xenfb/xenfb.c
xen-unstable.new/tools/xenfb/xenfb.c
--- xen-unstable.old/tools/xenfb/xenfb.c 2006-11-17 13:56:52.000000000
+0100
+++ xen-unstable.new/tools/xenfb/xenfb.c 2006-11-17 13:56:21.000000000
+0100
@@ -187,6 +187,38 @@ static int xenfb_xs_printf(struct xs_han
return 0;
}
+static void xenfb_dev_fatal(struct xs_handle *xsh, unsigned domid,
+ const char *dir, int err, const char *fmt, ...)
+{
+ va_list ap;
+ char errdir[80];
+ char buf[1024];
+ int n;
+
+ fprintf(stderr, "%s ", dir); /* somewhat crude */
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ if (err)
+ fprintf(stderr, " (%s)", strerror(err));
+ putc('\n', stderr);
+
+ if (!xenfb_path_in_dom(xsh, errdir, sizeof(errdir), domid,
+ "error/%s", dir))
+ goto out; /* FIXME complain */
+
+ va_start(ap, fmt);
+ n = snprintf(buf, sizeof(buf), "%d ", err);
+ snprintf(buf + n, sizeof(buf) - n, fmt, ap);
+ va_end(ap);
+
+ if (xenfb_xs_printf(xsh, buf, "error", "%s", buf) < 0)
+ goto out; /* FIXME complain */
+
+ out:
+ xenfb_xs_printf(xsh, dir, "state", "%d", XenbusStateClosing);
+}
+
static int xenfb_wait_for_state(struct xs_handle *xsh, const char *dir,
unsigned awaited)
{
@@ -210,21 +242,19 @@ static int xenfb_wait_for_state(struct x
}
}
-static int xenfb_hotplug(struct xs_handle *xsh, const char *backdir)
+static int xenfb_wait_for_backend_creation(struct xs_handle *xsh,
+ const char *backdir)
{
- if (xenfb_xs_printf(xsh, backdir, "hotplug-status", "connected"))
- return -1;
-
if (!xs_watch(xsh, backdir, ""))
return -1;
switch (xenfb_wait_for_state(xsh, backdir,
-#if 1 /* TODO fudging state to permit restarting; to be removed */
(1 << XenbusStateInitialising)
+ | (1 << XenbusStateClosed)
+#if 1 /* TODO fudging state to permit restarting; to be removed */
| (1 << XenbusStateInitWait)
| (1 << XenbusStateConnected)
-#else
- 1 << XenbusStateInitialising,
+ | (1 << XenbusStateClosing)
#endif
)) {
#if 1
@@ -233,6 +263,8 @@ static int xenfb_hotplug(struct xs_handl
printf("Fudging state to %d\n", XenbusStateInitialising); /*
FIXME */
#endif
case XenbusStateInitialising:
+ case XenbusStateClosing:
+ case XenbusStateClosed:
break;
default:
return -1;
@@ -241,7 +273,15 @@ static int xenfb_hotplug(struct xs_handl
xs_unwatch(xsh, backdir, "");
return 0;
}
-
+
+static int xenfb_hotplug(struct xs_handle *xsh, const char *backdir)
+{
+ printf("Hotplugging %s\n", backdir);
+ if (xenfb_xs_printf(xsh, backdir, "hotplug-status", "connected"))
+ return -1;
+ return 0;
+}
+
static int xenfb_wait_for_frontend_initialised(struct xs_handle *xsh,
const char *frontdir)
{
@@ -336,13 +376,13 @@ bool xenfb_attach_dom(struct xenfb *xenf
goto error;
}
- if (xenfb_hotplug(xsh, vfb_backdir) < 0)
+ if (xenfb_wait_for_backend_creation(xsh, vfb_backdir) < 0)
goto error;
- if (xenfb_hotplug(xsh, vkbd_backdir) < 0)
+ if (xenfb_wait_for_backend_creation(xsh, vkbd_backdir) < 0)
goto error;
if (xenfb_xs_printf(xsh, vkbd_backdir, "feature-abs-pointer", "1"))
goto error;
if (xenfb_xs_printf(xsh, vfb_backdir, "state", "%d",
XenbusStateInitWait))
goto error;
@@ -350,6 +391,11 @@ bool xenfb_attach_dom(struct xenfb *xenf
XenbusStateInitWait))
goto error;
+ if (xenfb_hotplug(xsh, vfb_backdir) < 0)
+ goto error;
+ if (xenfb_hotplug(xsh, vkbd_backdir) < 0)
+ goto error;
+
if (!xs_watch(xsh, vfb_frontdir, ""))
goto error;
if (!xs_watch(xsh, vkbd_frontdir, ""))
@@ -453,7 +499,7 @@ bool xenfb_attach_dom(struct xenfb *xenf
return true;
- error:
+ error:
serrno = errno;
if (xenfb->fb)
munmap(xenfb->fb, xenfb->fb_len);
@@ -467,6 +513,8 @@ bool xenfb_attach_dom(struct xenfb *xenf
xc_evtchn_unbind(xenfb->evt_xch, xenfb->kbd_port);
if (xenfb->fbdev_port)
xc_evtchn_unbind(xenfb->evt_xch, xenfb->fbdev_port);
+ xenfb_dev_fatal(xsh, domid, vfb_backdir, serrno, "on fire");
+ xenfb_dev_fatal(xsh, domid, vkbd_backdir, serrno, "on fire");
if (xsh)
xs_daemon_close(xsh);
errno = serrno;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|