* [PATCH] mini-os: Fix xenbus initialisation
@ 2010-04-05 23:27 Samuel Thibault
2010-04-08 19:13 ` Jeremy Fitzhardinge
0 siblings, 1 reply; 6+ messages in thread
From: Samuel Thibault @ 2010-04-05 23:27 UTC (permalink / raw)
To: xen-devel
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.
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
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;
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mini-os: Fix xenbus initialisation
2010-04-05 23:27 [PATCH] mini-os: Fix xenbus initialisation Samuel Thibault
@ 2010-04-08 19:13 ` Jeremy Fitzhardinge
2010-04-08 21:25 ` Samuel Thibault
0 siblings, 1 reply; 6+ messages in thread
From: Jeremy Fitzhardinge @ 2010-04-08 19:13 UTC (permalink / raw)
To: Samuel Thibault, xen-devel
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@ens-lyon.org>
>
> 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@lists.xensource.com
> http://lists.xensource.com/xen-devel
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mini-os: Fix xenbus initialisation
2010-04-08 19:13 ` Jeremy Fitzhardinge
@ 2010-04-08 21:25 ` Samuel Thibault
2010-04-08 22:39 ` Jeremy Fitzhardinge
0 siblings, 1 reply; 6+ messages in thread
From: Samuel Thibault @ 2010-04-08 21:25 UTC (permalink / raw)
To: Jeremy Fitzhardinge; +Cc: xen-devel
Jeremy Fitzhardinge, le Thu 08 Apr 2010 12:13:41 -0700, a écrit :
> Reverting this change (b20f897d6010) makes hvm+stubdom work again.
Could you try to revert only parts of them?
Samuel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mini-os: Fix xenbus initialisation
2010-04-08 21:25 ` Samuel Thibault
@ 2010-04-08 22:39 ` Jeremy Fitzhardinge
2010-04-29 20:36 ` Jeremy Fitzhardinge
0 siblings, 1 reply; 6+ messages in thread
From: Jeremy Fitzhardinge @ 2010-04-08 22:39 UTC (permalink / raw)
To: Samuel Thibault, xen-devel
On 04/08/2010 02:25 PM, Samuel Thibault wrote:
> Jeremy Fitzhardinge, le Thu 08 Apr 2010 12:13:41 -0700, a écrit :
>
>> Reverting this change (b20f897d6010) makes hvm+stubdom work again.
>>
> Could you try to revert only parts of them?
>
I narrowed it down to the first hunk of netfront part of the patch;
applying everything but this works, adding it causes the failure.
J
diff -r e98537246fe5 extras/mini-os/netfront.c
--- a/extras/mini-os/netfront.c Thu Apr 08 15:23:00 2010 -0700
+++ b/extras/mini-os/netfront.c Thu Apr 08 15:23:39 2010 -0700
@@ -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;
}
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mini-os: Fix xenbus initialisation
2010-04-08 22:39 ` Jeremy Fitzhardinge
@ 2010-04-29 20:36 ` Jeremy Fitzhardinge
2010-05-12 0:33 ` Samuel Thibault
0 siblings, 1 reply; 6+ messages in thread
From: Jeremy Fitzhardinge @ 2010-04-29 20:36 UTC (permalink / raw)
To: Samuel Thibault, xen-devel; +Cc: Keir Fraser, Stefano Stabellini
On 04/08/2010 03:39 PM, Jeremy Fitzhardinge wrote:
> On 04/08/2010 02:25 PM, Samuel Thibault wrote:
>
>> Jeremy Fitzhardinge, le Thu 08 Apr 2010 12:13:41 -0700, a écrit :
>>
>>
>>> Reverting this change (b20f897d6010) makes hvm+stubdom work again.
>>>
>>>
>> Could you try to revert only parts of them?
>>
>>
> I narrowed it down to the first hunk of netfront part of the patch;
> applying everything but this works, adding it causes the failure.
>
Ping?
Keir, can you revert this at least for now?
J
> J
>
> diff -r e98537246fe5 extras/mini-os/netfront.c
> --- a/extras/mini-os/netfront.c Thu Apr 08 15:23:00 2010 -0700
> +++ b/extras/mini-os/netfront.c Thu Apr 08 15:23:39 2010 -0700
> @@ -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;
> }
>
>
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] mini-os: Fix xenbus initialisation
2010-04-29 20:36 ` Jeremy Fitzhardinge
@ 2010-05-12 0:33 ` Samuel Thibault
0 siblings, 0 replies; 6+ messages in thread
From: Samuel Thibault @ 2010-05-12 0:33 UTC (permalink / raw)
To: Jeremy Fitzhardinge; +Cc: xen-devel, Keir Fraser, Stefano Stabellini
Jeremy Fitzhardinge, le Thu 29 Apr 2010 13:36:57 -0700, a écrit :
> On 04/08/2010 03:39 PM, Jeremy Fitzhardinge wrote:
> > On 04/08/2010 02:25 PM, Samuel Thibault wrote:
> >> Jeremy Fitzhardinge, le Thu 08 Apr 2010 12:13:41 -0700, a écrit :
> >>
> >>> Reverting this change (b20f897d6010) makes hvm+stubdom work again.
> >>>
> >> Could you try to revert only parts of them?
> >>
> > I narrowed it down to the first hunk of netfront part of the patch;
> > applying everything but this works, adding it causes the failure.
> >
>
> Ping?
Just a "keepalive" answer on this: yes, it's still in my mbox, under
loads of stuff I need to handle in priority :/
The short answer is: I do not understand how that hook could be a
culprit, unless the netback driver itself is bogus. I haven't had the
time to investigate, and will unfortunately probably not have it in the
near future.
Samuel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-05-12 0:33 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-05 23:27 [PATCH] mini-os: Fix xenbus initialisation Samuel Thibault
2010-04-08 19:13 ` Jeremy Fitzhardinge
2010-04-08 21:25 ` Samuel Thibault
2010-04-08 22:39 ` Jeremy Fitzhardinge
2010-04-29 20:36 ` Jeremy Fitzhardinge
2010-05-12 0:33 ` Samuel Thibault
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.