[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 6/6] xen kexec: reset device state to Initializing during reboot
On Tue, Jul 26, 2011 at 01:52:15PM +0200, Olaf Hering wrote: > During kexec all devices will be shutdown, the backend drivers enter the ^^ - get rid of that. > Closed state. But in this state the kexec kernel can not connect to the > backend because it expects the devices in InitWait state. ^- add "to be" > After triggering the Closing event, trigger also the Initializing event > and wait until the backend has changed its state. Without this waiting > the kexec kernel may find a device where a state change is still in > progress. Uhh, say that again? Are you saying that after moving to Initializing state we should allow the allow the state changes to proceed as they would do under normal circumstances? > > Signed-off-by: Olaf Hering <olaf@xxxxxxxxx> > --- > drivers/xen/xenbus/xenbus_probe.c | 23 +++++++++++++++++++++-- > 1 file changed, 21 insertions(+), 2 deletions(-) > > Index: linux-3.0/drivers/xen/xenbus/xenbus_probe.c > =================================================================== > --- linux-3.0.orig/drivers/xen/xenbus/xenbus_probe.c > +++ linux-3.0/drivers/xen/xenbus/xenbus_probe.c > @@ -192,8 +192,19 @@ void xenbus_otherend_changed(struct xenb > * work that can fail e.g., when the rootfs is gone. > */ > if (system_state > SYSTEM_RUNNING) { > - if (ignore_on_shutdown && (state == XenbusStateClosing)) > - xenbus_frontend_closed(dev); > + if (ignore_on_shutdown) { > + switch (state) { > + case XenbusStateClosing: > + xenbus_frontend_closed(dev); > + break; > + case XenbusStateInitialising: > + case XenbusStateInitWait: > + complete(&dev->down); > + break; > + default: > + break; > + } > + } > return; > } > > @@ -284,6 +295,14 @@ void xenbus_dev_shutdown(struct device * > if (!timeout) > printk(KERN_INFO "%s: %s timeout closing device\n", > __func__, dev->nodename); > + > + if (system_state > SYSTEM_RUNNING) { > + xenbus_switch_state(dev, XenbusStateInitialising); > + timeout = wait_for_completion_timeout(&dev->down, timeout); > + if (!timeout) > + printk(KERN_INFO "%s: %s timeout initializing device\n", > + __func__, dev->nodename); > + } > out: > put_device(&dev->dev); > } > > > _______________________________________________ > 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |