Messages in this thread Patch in this message | | | Date | Thu, 25 Jan 2007 12:33:50 +0100 | From | Ingo Molnar <> | Subject | [patch] suspend debugging: simulate suspend-to-RAM |
| |
Subject: [patch] suspend debugging: simulate suspend-to-RAM From: Ingo Molnar <mingo@elte.hu>
most resume bugs are due to the kernel hanging or crashing while trying to resume a specific device. It is extremely hard to debug such hangs because often when the hang happens there's no console available yet.
Make debugging such bugs easier by offering a resume mode that does not actually call into the BIOS to turn off the machine. This, in combination with earlyprintk=serial,ttyS0,115200,keep , CONFIG_PM_DEBUG=y, CONFIG_DISABLE_CONSOLE_SUSPEND=y and /sys/power/filter enables me to have a fully functional serial console during the full suspend/resume cycle.
I debugged two suspend bugs in the -rt kernel this way already, so it's pretty useful.
Signed-off-by: Ingo Molnar <mingo@elte.hu> --- Documentation/kernel-parameters.txt | 4 ++++ drivers/acpi/sleep/main.c | 15 ++++++++++++++- include/linux/acpi.h | 1 + kernel/sysctl.c | 16 ++++++++++++++++ 4 files changed, 35 insertions(+), 1 deletion(-)
Index: linux/Documentation/kernel-parameters.txt =================================================================== --- linux.orig/Documentation/kernel-parameters.txt +++ linux/Documentation/kernel-parameters.txt @@ -159,6 +159,10 @@ and is between 256 and 4096 characters. acpi_osi= [HW,ACPI] empty param disables _OSI + acpi_simulate_suspend_to_ram + [KNL] Do not call into BIOS to do suspend-to-RAM + Format: <0/1> + acpi_serialize [HW,ACPI] force serialization of AML methods acpi_skip_timer_override [HW,ACPI] Index: linux/drivers/acpi/sleep/main.c =================================================================== --- linux.orig/drivers/acpi/sleep/main.c +++ linux/drivers/acpi/sleep/main.c @@ -35,6 +35,14 @@ static u32 acpi_suspend_states[] = { static int init_8259A_after_S1; +/* + * simulate entry into the BIOS - this way the system will not + * be turned off for real, and the kernel's resume functionality + * can be debugged while still having some system capabilities + * left. This is especially useful in combination with /sys/power/filter. + */ +int acpi_simulate_suspend_to_ram; + /** * acpi_pm_prepare - Do preliminary suspend work. * @pm_state: suspend state we're entering. @@ -91,7 +99,12 @@ static int acpi_pm_enter(suspend_state_t break; case PM_SUSPEND_MEM: - do_suspend_lowlevel(); + if (unlikely(acpi_simulate_suspend_to_ram)) { + printk(KERN_INFO "ACPI: simulating suspend-to-RAM: " + "not calling BIOS.\n"); + } else { + do_suspend_lowlevel(); + } break; case PM_SUSPEND_DISK: Index: linux/include/linux/acpi.h =================================================================== --- linux.orig/include/linux/acpi.h +++ linux/include/linux/acpi.h @@ -438,6 +438,7 @@ extern int pci_mmcfg_config_num; extern int sbf_port; extern unsigned long acpi_video_flags; +extern int acpi_simulate_suspend_to_ram; #else /* !CONFIG_ACPI */ Index: linux/kernel/sysctl.c =================================================================== --- linux.orig/kernel/sysctl.c +++ linux/kernel/sysctl.c @@ -329,6 +329,14 @@ static ctl_table kern_table[] = { .proc_handler = &proc_dointvec, }, { + .ctl_name = CTL_UNNUMBERED, + .procname = "futex_performance_hack", + .data = &futex_performance_hack, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, + { .ctl_name = KERN_PANIC, .procname = "prof_pid", .data = &prof_pid, @@ -908,6 +916,14 @@ static ctl_table kern_table[] = { .mode = 0644, .proc_handler = &proc_doulongvec_minmax, }, + { + .ctl_name = CTL_UNNUMBERED, + .procname = "acpi_simulate_suspend_to_ram", + .data = &acpi_simulate_suspend_to_ram, + .maxlen = sizeof (int), + .mode = 0644, + .proc_handler = &proc_dointvec, + }, #endif #ifdef CONFIG_IA64 { - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |