On 04/05/2010 04:27 PM, Samuel Thibault wrote:
> mini-os: Fix xenbus initialisation
>
> This fixes xenbus initialization of blkfront, netfront and pcifront
> by uniformizing with fbfront: after writing parameters, set state to
> initialised, then wait for backend to switch to connect state, and then
> only read its parameter and switch to the connect state.
>
This change causes a regression for stub domains. When this is applied,
the domain and stub come up, but the main domain just sits there - not
running, not blocked. The vnc window remains black.
sh-4.0# xm destroy debhv32 && sleep 2; xm create debhv32
Using config file "./debhv32".
Started domain debhv32 (id=19)
sh-4.0# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 2140 4 r----- 4945.7
debhv32 19 512 1 ------ 0.0
debhv32-dm 20 32 1 -b---- 0.0
The Xen console shows:
blktap_sysfs_create: adding attributes for dev ffff8800a1a07c00
blktap_control_allocate_tap: allocated tap ffff8800bbcb8800
blktap_ring_open: opening device blktap0
blktap_ring_open: opened device 0
blktap_ring_mmap: blktap: mapping pid is 402
blktap_validate_params: aio:/dev/vg_lilith-raid/xen-debian-32: capacity:
20971520, sector-size: 512
blktap_validate_params: aio:/dev/vg_lilith-raid/xen-debian-32: capacity:
20971520, sector-size: 512
blktap_device_create: minor 0 sectors 20971520 sector-size 512
device vif19.0 entered promiscuous mode
eth0: port 2(vif19.0) entering forwarding state
device vif20.0 entered promiscuous mode
eth0: port 3(vif20.0) entering forwarding state
Bootstrapping...
Xen Minimal OS!
start_info: 0x563000(VA)
nr_pages: 0x2000
shared_inf: 0xb81b1000(MA)
pt_base: 0x566000(VA)
nr_pt_frames: 0x7
mfn_list: 0x553000(VA)
mod_start: 0x0(VA)
mod_len: 0
flags: 0x0
cmd_line: -d 19
stack: 0x511700-0x531700
MM: Init
_text: 0x0(VA)
_etext: 0xffa73(VA)
_erodata: 0x150000(VA)
_edata: 0x158cc8(VA)
stack start: 0x511700(VA)
_end: 0x552010(VA)
start_pfn: 570
max_pfn: 2000
Mapping memory range 0x800000 - 0x2000000
setting 0x0-0x150000 readonly
skipped 0x1000
MM: Initialise page allocator for 57c000(57c000)-2000000(2000000)
MM: done
Demand map pfns at 2001000-2002001000.
Heap resides at 2002002000-4002002000.
Initialising timer interface
Initialising console ... done.
gnttab_table mapped at 0x2001000.
Initialising scheduler
Thread "Idle": pointer: 0x2002002050, stack: 0x5a0000
Initialising xenbus
Thread "xenstore": pointer: 0x2002002800, stack: 0x5b0000
Dummy main: start_info=0x531800
Thread "main": pointer: 0x2002002fb0, stack: 0x5c0000
Initing FS frontend(s).
No FS import
Thread "pcifront": pointer: 0x2002003760, stack: 0x5d0000
pcifront_watches: waiting for backend path to appear device/pci/0/backend
dom vm is at /vm/f2249d1c-5862-444d-a57a-c3c8a6243d1f
************************ NETFRONT for device/vif/0 **********
net TX ring size 256
net RX ring size 256
backend at /local/domain/0/backend/vif/20/0
mac is 00:16:3e:24:3d:1f
vif19.0: no IPv6 routers present
(XEN) HVM19: HVM Loader
(XEN) HVM19: Detected Xen v4.1-unstable
(XEN) HVM19: CPU speed is 2400 MHz
vif20.0: no IPv6 routers present
Reverting this change (b20f897d6010) makes hvm+stubdom work again.
Thanks,
J
> Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
>
> diff -r ebd84be3420a extras/mini-os/blkfront.c
> --- a/extras/mini-os/blkfront.c Tue Mar 30 18:31:39 2010 +0100
> +++ b/extras/mini-os/blkfront.c Tue Apr 06 01:24:28 2010 +0200
> @@ -152,13 +152,12 @@
> }
>
> snprintf(path, sizeof(path), "%s/state", nodename);
> - err = xenbus_switch_state(xbt, path, XenbusStateConnected);
> + err = xenbus_switch_state(xbt, path, XenbusStateInitialised);
> if (err) {
> - message = "switching state";
> + printk("error writing blk initialized on %s: %s\n", path, err);
> goto abort_transaction;
> }
>
> -
> err = xenbus_transaction_end(xbt, 0, &retry);
> if (err) free(err);
> if (retry) {
> @@ -189,6 +188,7 @@
> {
> XenbusState state;
> char path[strlen(dev->backend) + 1 + 19 + 1];
> + char frontpath[strlen(nodename) + 1 + 6 + 1];
> snprintf(path, sizeof(path), "%s/mode", dev->backend);
> msg = xenbus_read(XBT_NIL, path, &c);
> if (msg) {
> @@ -232,7 +232,18 @@
> dev->info.flush = xenbus_read_integer(path);
>
> *info = dev->info;
> +
> + printk("%s connected\n", dev->backend);
> +
> + snprintf(frontpath, sizeof(frontpath), "%s/state", nodename);
> + if((err = xenbus_switch_state(XBT_NIL, frontpath,
> XenbusStateConnected))
> + != NULL) {
> + printk("error switching state: %s\n", err);
> + xenbus_unwatch_path_token(XBT_NIL, path, path);
> + goto error;
> + }
> }
> +
> unmask_evtchn(dev->evtchn);
>
> printk("%u sectors of %u bytes\n", dev->info.sectors,
> dev->info.sector_size);
> diff -r ebd84be3420a extras/mini-os/fbfront.c
> --- a/extras/mini-os/fbfront.c Tue Mar 30 18:31:39 2010 +0100
> +++ b/extras/mini-os/fbfront.c Tue Apr 06 01:24:28 2010 +0200
> @@ -126,8 +126,8 @@
> snprintf(path, sizeof(path), "%s/state", nodename);
> err = xenbus_switch_state(xbt, path, XenbusStateInitialised);
> if (err) {
> - printk("error writing initialized: %s\n", err);
> - free(err);
> + printk("error writing fb initialized: %s\n", err);
> + goto abort_transaction;
> }
>
> err = xenbus_transaction_end(xbt, 0, &retry);
> @@ -189,6 +189,7 @@
> printk("************************** KBDFRONT\n");
>
> return dev;
> +
> error:
> free(msg);
> free(err);
> diff -r ebd84be3420a extras/mini-os/netfront.c
> --- a/extras/mini-os/netfront.c Tue Mar 30 18:31:39 2010 +0100
> +++ b/extras/mini-os/netfront.c Tue Apr 06 01:24:28 2010 +0200
> @@ -407,9 +407,9 @@
> }
>
> snprintf(path, sizeof(path), "%s/state", nodename);
> - err = xenbus_switch_state(xbt, path, XenbusStateConnected);
> + err = xenbus_switch_state(xbt, path, XenbusStateInitialised);
> if (err) {
> - message = "switching state";
> + printk("error writing net initialized: %s\n", err);
> goto abort_transaction;
> }
>
> @@ -445,6 +445,7 @@
> {
> XenbusState state;
> char path[strlen(dev->backend) + 1 + 5 + 1];
> + char frontpath[strlen(nodename) + 1 + 6 + 1];
> snprintf(path, sizeof(path), "%s/state", dev->backend);
>
> xenbus_watch_path_token(XBT_NIL, path, path, &dev->events);
> @@ -463,6 +464,16 @@
> snprintf(path, sizeof(path), "%s/ip", dev->backend);
> xenbus_read(XBT_NIL, path, ip);
> }
> +
> + printk("%s connected\n", dev->backend);
> +
> + snprintf(frontpath, sizeof(frontpath), "%s/state", nodename);
> + if((err = xenbus_switch_state(XBT_NIL, frontpath,
> XenbusStateConnected))
> + != NULL) {
> + printk("error switching state: %s\n", err);
> + xenbus_unwatch_path_token(XBT_NIL, path, path);
> + goto error;
> + }
> }
>
> printk("**************************\n");
> @@ -481,6 +492,7 @@
> &rawmac[5]);
>
> return dev;
> +
> error:
> free(msg);
> free(err);
> diff -r ebd84be3420a extras/mini-os/pcifront.c
> --- a/extras/mini-os/pcifront.c Tue Mar 30 18:31:39 2010 +0100
> +++ b/extras/mini-os/pcifront.c Tue Apr 06 01:24:28 2010 +0200
> @@ -143,7 +143,7 @@
> char* err;
> char* message=NULL;
> int retry=0;
> - char* msg;
> + char* msg = NULL;
> char* nodename = _nodename ? _nodename : "device/pci/0";
> int dom;
>
> @@ -206,7 +206,7 @@
> snprintf(path, sizeof(path), "%s/state", nodename);
> err = xenbus_switch_state(xbt, path, XenbusStateInitialised);
> if (err) {
> - message = "switching state";
> + printk("error writing pci initialized: %s\n", err);
> goto abort_transaction;
> }
>
> @@ -237,7 +237,7 @@
>
> {
> char path[strlen(dev->backend) + 1 + 5 + 1];
> - char frontpath[strlen(nodename) + 1 + 5 + 1];
> + char frontpath[strlen(nodename) + 1 + 6 + 1];
> XenbusState state;
> snprintf(path, sizeof(path), "%s/state", dev->backend);
>
> @@ -254,9 +254,9 @@
> }
>
> snprintf(frontpath, sizeof(frontpath), "%s/state", nodename);
> - if ((err = xenbus_switch_state(XBT_NIL, frontpath,
> XenbusStateConnected))
> + if((err = xenbus_switch_state(XBT_NIL, frontpath,
> XenbusStateConnected))
> != NULL) {
> - printk("error switching state %s\n", err);
> + printk("error switching state: %s\n", err);
> xenbus_unwatch_path_token(XBT_NIL, path, path);
> goto error;
> }
> @@ -271,6 +271,7 @@
> return dev;
>
> error:
> + free(msg);
> free(err);
> free_pcifront(dev);
> return NULL;
>
> _______________________________________________
> 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
|