git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
xen: fix build when SYSRQ is disabled
[safe/jmp/linux-2.6]
/
drivers
/
xen
/
manage.c
diff --git
a/drivers/xen/manage.c
b/drivers/xen/manage.c
index
e7e83b6
..
07e857b
100644
(file)
--- a/
drivers/xen/manage.c
+++ b/
drivers/xen/manage.c
@@
-3,6
+3,7
@@
*/
#include <linux/kernel.h>
#include <linux/err.h>
*/
#include <linux/kernel.h>
#include <linux/err.h>
+#include <linux/slab.h>
#include <linux/reboot.h>
#include <linux/sysrq.h>
#include <linux/stop_machine.h>
#include <linux/reboot.h>
#include <linux/sysrq.h>
#include <linux/stop_machine.h>
@@
-39,10
+40,10
@@
static int xen_suspend(void *data)
BUG_ON(!irqs_disabled());
BUG_ON(!irqs_disabled());
- err =
device_power_down
(PMSG_SUSPEND);
+ err =
sysdev_suspend
(PMSG_SUSPEND);
if (err) {
if (err) {
- printk(KERN_ERR "xen_suspend:
device_power_down
failed: %d\n",
- err);
+ printk(KERN_ERR "xen_suspend:
sysdev_suspend
failed: %d\n",
+
err);
return err;
}
return err;
}
@@
-61,14
+62,14
@@
static int xen_suspend(void *data)
gnttab_resume();
xen_mm_unpin_all();
gnttab_resume();
xen_mm_unpin_all();
- device_power_up(PMSG_RESUME);
-
if (!*cancelled) {
xen_irq_resume();
xen_console_resume();
xen_timer_resume();
}
if (!*cancelled) {
xen_irq_resume();
xen_console_resume();
xen_timer_resume();
}
+ sysdev_resume();
+
return 0;
}
return 0;
}
@@
-86,39
+87,50
@@
static void do_suspend(void)
err = freeze_processes();
if (err) {
printk(KERN_ERR "xen suspend: freeze failed %d\n", err);
err = freeze_processes();
if (err) {
printk(KERN_ERR "xen suspend: freeze failed %d\n", err);
-
return
;
+
goto out
;
}
#endif
}
#endif
- err = d
evice_suspend
(PMSG_SUSPEND);
+ err = d
pm_suspend_start
(PMSG_SUSPEND);
if (err) {
if (err) {
- printk(KERN_ERR "xen suspend: d
evice_suspend
%d\n", err);
- goto out;
+ printk(KERN_ERR "xen suspend: d
pm_suspend_start
%d\n", err);
+ goto out
_thaw
;
}
}
- printk("suspending xenbus...\n");
- /* XXX use normal device tree? */
- xenbus_suspend();
+ printk(KERN_DEBUG "suspending xenstore...\n");
+ xs_suspend();
+
+ err = dpm_suspend_noirq(PMSG_SUSPEND);
+ if (err) {
+ printk(KERN_ERR "dpm_suspend_noirq failed: %d\n", err);
+ goto out_resume;
+ }
err = stop_machine(xen_suspend, &cancelled, cpumask_of(0));
err = stop_machine(xen_suspend, &cancelled, cpumask_of(0));
+
+ dpm_resume_noirq(PMSG_RESUME);
+
if (err) {
printk(KERN_ERR "failed to start xen_suspend: %d\n", err);
if (err) {
printk(KERN_ERR "failed to start xen_suspend: %d\n", err);
-
goto out
;
+
cancelled = 1
;
}
}
+out_resume:
if (!cancelled) {
xen_arch_resume();
if (!cancelled) {
xen_arch_resume();
- x
enbu
s_resume();
+ xs_resume();
} else
} else
- x
enbu
s_suspend_cancel();
+ xs_suspend_cancel();
- d
evice_resume
(PMSG_RESUME);
+ d
pm_resume_end
(PMSG_RESUME);
/* Make sure timer events get retriggered on all CPUs */
clock_was_set();
/* Make sure timer events get retriggered on all CPUs */
clock_was_set();
-out:
+
+out_thaw:
#ifdef CONFIG_PREEMPT
thaw_processes();
#ifdef CONFIG_PREEMPT
thaw_processes();
+out:
#endif
shutting_down = SHUTDOWN_INVALID;
}
#endif
shutting_down = SHUTDOWN_INVALID;
}
@@
-173,6
+185,7
@@
static void shutdown_handler(struct xenbus_watch *watch,
kfree(str);
}
kfree(str);
}
+#ifdef CONFIG_MAGIC_SYSRQ
static void sysrq_handler(struct xenbus_watch *watch, const char **vec,
unsigned int len)
{
static void sysrq_handler(struct xenbus_watch *watch, const char **vec,
unsigned int len)
{
@@
-202,15
+215,16
@@
static void sysrq_handler(struct xenbus_watch *watch, const char **vec,
handle_sysrq(sysrq_key, NULL);
}
handle_sysrq(sysrq_key, NULL);
}
-static struct xenbus_watch shutdown_watch = {
- .node = "control/shutdown",
- .callback = shutdown_handler
-};
-
static struct xenbus_watch sysrq_watch = {
.node = "control/sysrq",
.callback = sysrq_handler
};
static struct xenbus_watch sysrq_watch = {
.node = "control/sysrq",
.callback = sysrq_handler
};
+#endif
+
+static struct xenbus_watch shutdown_watch = {
+ .node = "control/shutdown",
+ .callback = shutdown_handler
+};
static int setup_shutdown_watcher(void)
{
static int setup_shutdown_watcher(void)
{
@@
-222,11
+236,13
@@
static int setup_shutdown_watcher(void)
return err;
}
return err;
}
+#ifdef CONFIG_MAGIC_SYSRQ
err = register_xenbus_watch(&sysrq_watch);
if (err) {
printk(KERN_ERR "Failed to set sysrq watcher\n");
return err;
}
err = register_xenbus_watch(&sysrq_watch);
if (err) {
printk(KERN_ERR "Failed to set sysrq watcher\n");
return err;
}
+#endif
return 0;
}
return 0;
}