On Tue, 2008-07-29 at 23:15 +0200, Rafael J. Wysocki wrote: > On Tuesday, 29 of July 2008, Greg KH wrote: > > On Sun, Jul 20, 2008 at 09:48:28PM -0400, Ben Collins wrote: > > > Config option allows userspace to handle console during suspend/resume > > > instead of the kernel. > > > > > > Signed-off-by: Ben Collins <ben.collins@xxxxxxxxxxxxx> > > > --- > > > kernel/power/Kconfig | 15 +++++++++++++++ > > > kernel/power/console.c | 4 ++++ > > > 2 files changed, 19 insertions(+), 0 deletions(-) > > > > > > diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig > > > index b45da40..6855299 100644 > > > --- a/kernel/power/Kconfig > > > +++ b/kernel/power/Kconfig > > > @@ -105,6 +105,21 @@ config SUSPEND_FREEZER > > > > > > Turning OFF this setting is NOT recommended! If in doubt, say Y. > > > > > > +config PM_DISABLE_CONSOLE > > > + bool "Disable Power Management messing with the active console" > > > + depends on PM > > > + default n > > > + ---help--- > > > + By default, PM will take over the active console (generally, this means > > > + switching to the console when suspending from X). This can at times cause > > > + problems, especially if userspace suspend scripts try to do things with > > > + the console before or after suspending (e.g. calling vbestate). > > > + > > > + To work around this, enable this option so that PM will not handle the > > > + console. > > > + > > > + If unsure, say N. > > > + > > > config HIBERNATION > > > bool "Hibernation (aka 'suspend to disk')" > > > depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE > > > diff --git a/kernel/power/console.c b/kernel/power/console.c > > > index b8628be..8b9706f 100644 > > > --- a/kernel/power/console.c > > > +++ b/kernel/power/console.c > > > @@ -33,6 +33,7 @@ EXPORT_SYMBOL(pm_set_vt_switch); > > > > > > int pm_prepare_console(void) > > > { > > > +#ifndef CONFIG_PM_DISABLE_CONSOLE > > > > Can't you do this in a .h file instead? > > > > And is this really needed? Why has no other distro needed this change? > > What is so wierd about your suspend setup to require this? > > Reportedly, some systems have problems with graphics restoration from user > space if the switch is done. > > Anyway, I'd prefer to use the (already existing) pm_set_vt_switch() thing for > that, maybe with the help of a command line parameter, to adding the .config > option like this. Ah. I didn't notice pm_set_vt_switch(). Then what I would like better is the config option to set a default. For us, not doing the vt switch is a good default (I don't think we have a case where suspend/resume requires it). Something like: diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index e7bea3e..6a042f8 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -2247,6 +2247,11 @@ and is between 256 and 4096 characters. It is defined in the file vmpoff= [KNL,S390] Perform z/VM CP command after power off. Format: <command> + vt_switch= [PM] Switch vt's during suspend/resume + Format: { 0 | 1 } + Default is normally '1', but depends on value of + the PM_DISABLE_CONSOLE config option. + waveartist= [HW,OSS] Format: <io>,<irq>,<dma>,<dma2> diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index dcd165f..202f9b3 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -116,6 +116,25 @@ config SUSPEND_FREEZER Turning OFF this setting is NOT recommended! If in doubt, say Y. +config PM_DISABLE_CONSOLE + bool "Disable Power Management messing with the active console" + depends on PM + default n + ---help--- + By default, PM will take over the active console (generally, this means + switching to the console when suspending from X). This can at times cause + problems, especially if userspace suspend scripts try to do things with + the console before or after suspending (e.g. calling vbestate). + + To work around this, enable this option so that PM will not handle the + console. + + Note, this is the same as passing vt_switch=0 command line option, but + just hardcodes the default. You can still pass vt_switch=1 with this + option to get original behavior. + + If unsure, say N. + config HIBERNATION bool "Hibernation (aka 'suspend to disk')" depends on PM && SWAP && ARCH_HIBERNATION_POSSIBLE diff --git a/kernel/power/console.c b/kernel/power/console.c index b8628be..db116d8 100644 --- a/kernel/power/console.c +++ b/kernel/power/console.c @@ -14,7 +14,11 @@ #define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1) static int orig_fgconsole, orig_kmsg; +#ifdef CONFIG_PM_DISABLE_CONSOLE +static int disable_vt_switch = 1; +#else static int disable_vt_switch; +#endif /* * Normally during a suspend, we allocate a new console and switch to it. @@ -80,4 +84,17 @@ void pm_restore_console(void) release_console_sem(); kmsg_redirect = orig_kmsg; } + +static int __init set_vt_switch(char *str) +{ + if (str[0] == '0') + disable_vt_switch = 1; + else if (str[0] == '1') + disable_vt_switch = 0; + else + return -EINVAL; + + return 0; +} +__setup("vt_switch=", set_vt_switch); #endif _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm