All of lore.kernel.org
 help / color / mirror / Atom feed
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xensource.com
Subject: [PATCH 6/6] xen kexec: reset device state to Initializing during reboot
Date: Tue, 26 Jul 2011 13:52:15 +0200	[thread overview]
Message-ID: <20110726115211.489145690@aepfle.de> (raw)
In-Reply-To: 20110726115209.655568638@aepfle.de

[-- Attachment #1: xen.xenbus_dev_shutdown.XenbusStateInitialising.patch --]
[-- Type: text/plain, Size: 1827 bytes --]

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@aepfle.de>
---
 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);
 }

  parent reply	other threads:[~2011-07-26 11:52 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-26 11:52 [PATCH 0/6] misc changes for kexec in pv-on-hvm guests Olaf Hering
2011-07-26 11:52 ` [PATCH 1/6] xen: use static initializers in xen-balloon.c Olaf Hering
2011-07-26 14:16   ` Konrad Rzeszutek Wilk
2011-07-26 11:52 ` [PATCH 2/6] xen/hvm kexec: unregister shutdown+sysrq watches during reboot Olaf Hering
2011-07-26 14:17   ` Konrad Rzeszutek Wilk
2011-07-26 14:28     ` Olaf Hering
2011-07-26 11:52 ` [PATCH 3/6] xen/hvm kexec: unregister memory/target watch in xen-balloon.c Olaf Hering
2011-07-26 14:18   ` Konrad Rzeszutek Wilk
2011-07-26 11:52 ` [PATCH 4/6] xen/hvm kexec: unbind debugirq during reboot Olaf Hering
2011-07-26 14:19   ` Konrad Rzeszutek Wilk
2011-07-26 11:52 ` [PATCH 5/6] xen/hvm kexec: unregister timer interrupt " Olaf Hering
2011-07-26 14:22   ` Konrad Rzeszutek Wilk
2011-07-27 14:05     ` Olaf Hering
2011-07-27 14:38       ` Konrad Rzeszutek Wilk
2011-07-26 11:52 ` Olaf Hering [this message]
2011-07-26 14:27   ` [PATCH 6/6] xen kexec: reset device state to Initializing " Konrad Rzeszutek Wilk
2011-07-27 11:22   ` Stefano Stabellini
2011-07-27 12:14     ` Olaf Hering
2011-07-27 13:14       ` Stefano Stabellini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110726115211.489145690@aepfle.de \
    --to=olaf@aepfle.de \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.