|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH 06/11] xen/hvm kexec: unregister shutdown+sysrq watch
Unregister the shutdown and sysrq watch during kexec. The watches can
not be re-registered in the kexec kernel because they are still seen as
busy by xenstore.
v2:
use kexec_is_loaded() function
Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>
---
drivers/xen/manage.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
Index: linux-3.0/drivers/xen/manage.c
===================================================================
--- linux-3.0.orig/drivers/xen/manage.c
+++ linux-3.0/drivers/xen/manage.c
@@ -8,6 +8,7 @@
#include <linux/sysrq.h>
#include <linux/stop_machine.h>
#include <linux/freezer.h>
+#include <linux/kexec.h>
#include <linux/syscore_ops.h>
#include <xen/xen.h>
@@ -320,6 +321,21 @@ static int shutdown_event(struct notifie
return NOTIFY_DONE;
}
+static void xenbus_manage_shutdown_watcher(void)
+{
+ if (!kexec_is_loaded())
+ return;
+
+ unregister_xenbus_watch(&shutdown_watch);
+#ifdef CONFIG_MAGIC_SYSRQ
+ unregister_xenbus_watch(&sysrq_watch);
+#endif
+}
+
+static struct syscore_ops xenbus_manage_watcher_syscore_ops = {
+ .shutdown = xenbus_manage_shutdown_watcher,
+};
+
int xen_setup_shutdown_event(void)
{
static struct notifier_block xenstore_notifier = {
@@ -329,6 +345,7 @@ int xen_setup_shutdown_event(void)
if (!xen_domain())
return -ENODEV;
register_xenstore_notifier(&xenstore_notifier);
+ register_syscore_ops(&xenbus_manage_watcher_syscore_ops);
return 0;
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
|
|
|
|