On Tue, 26 Jul 2011, Olaf Hering wrote:
> During kexec all devices will be shutdown, the backend drivers enter the
> Closed state. But in this state the kexec kernel can not connect to the
> backend because it expects the devices in InitWait state.
> 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.
>
> 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);
> }
It looks like this code path is going to be triggered every time we shut
down a PV on HVM guest. I think we should avoid going into
XenbusStateInitialising on normal shut down or reboot.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|