Hi,

it's a bit crazy but it seems to work: This tiny patch against an I-pipe
kernel really allows suspend to disk/ram for a *running* Xenomai system.
Just the TSC-based timers are skewed up after resume so that, e.g., the
latency test takes a longer pause then. But a serious use-case would
rather include a real-time application shutdown before suspend anyway.

Jan


---
 kernel/power/swsusp.c |    4 ++++
 1 file changed, 4 insertions(+)

Index: linux-2.6.17-ipipe/kernel/power/swsusp.c
===================================================================
--- linux-2.6.17-ipipe.orig/kernel/power/swsusp.c
+++ linux-2.6.17-ipipe/kernel/power/swsusp.c
@@ -217,6 +217,7 @@ int swsusp_suspend(void)
 	if ((error = arch_prepare_suspend()))
 		return error;
 	local_irq_disable();
+	local_irq_disable_hw();
 	/* At this point, device_suspend() has been called, but *not*
 	 * device_power_down(). We *must* device_power_down() now.
 	 * Otherwise, drivers for some devices (e.g. interrupt controllers)
@@ -242,6 +243,7 @@ Restore_highmem:
 	restore_highmem();
 	device_power_up();
 Enable_irqs:
+	local_irq_enable_hw();
 	local_irq_enable();
 	return error;
 }
@@ -250,6 +252,7 @@ int swsusp_resume(void)
 {
 	int error;
 	local_irq_disable();
+	local_irq_disable_hw();
 	if (device_power_down(PMSG_FREEZE))
 		printk(KERN_ERR "Some devices failed to power down, very bad\n");
 	/* We'll ignore saved state, but this gets preempt count (etc) right */
@@ -268,6 +271,7 @@ int swsusp_resume(void)
 	restore_highmem();
 	touch_softlockup_watchdog();
 	device_power_up();
+	local_irq_enable_hw();
 	local_irq_enable();
 	return error;
 }


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to