[PATCH] PM: add config option that allows disabling of VT switch during suspend

From: Andres Salomon
Date: Wed Mar 05 2008 - 16:40:25 EST


Prior to suspend, we allocate and switch to a new VT; after suspend, we
switch back to the original VT. This can be slow, and is completely
unnecessary if the framebuffer we're using can restore video properly.

This adds CONFIG_DISABLE_SUSPEND_VT_SWITCH which allows the user to
select whether or not to do that switch. This has been tested with the
gxfb driver (on a Geode GX dev board and OLPC prototype machines). In
order for the user to even see this option, a framebuffer has to declare
support for it (via CONFIG_FBDEV_SUPPORTS_NOSWITCH).

Signed-off-by: Andres Salomon <dilinger@xxxxxxxxxx>
---
drivers/char/Kconfig | 21 +++++++++++++++++++++
drivers/video/geode/Kconfig | 1 +
include/linux/suspend.h | 2 +-
kernel/power/console.c | 2 +-
4 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index 47c6be8..7fe0e85 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -58,6 +58,27 @@ config VT_CONSOLE

If unsure, say Y.

+config FBDEV_SUPPORTS_NOSWITCH
+ bool
+ default n
+
+config DISABLE_SUSPEND_VT_SWITCH
+ bool "Disable the console switch prior to suspend (EXPERIMENTAL)"
+ depends on VT_CONSOLE && PM && EXPERIMENTAL && FBDEV_SUPPORTS_NOSWITCH
+ default n
+ ---help---
+ This option disables the automatic switch to VT console that happens
+ prior to Linux going into a suspend/sleep. Your
+ video card/framebuffer must be able to properly restore the
+ display (even if X is doing something crazy!) in this scenario.
+ This is useful for saving precious milliseconds during suspend and
+ resume; however, if your framebuffer lacks support, it could leave
+ your display in a weird state. If you're even seeing this option,
+ it means at least one of your selected framebuffer drivers supports
+ restoring the display.
+
+ If unsure, say N.
+
config HW_CONSOLE
bool
depends on VT && !S390 && !UML
diff --git a/drivers/video/geode/Kconfig b/drivers/video/geode/Kconfig
index c5d8ba4..1497fe4 100644
--- a/drivers/video/geode/Kconfig
+++ b/drivers/video/geode/Kconfig
@@ -29,6 +29,7 @@ config FB_GEODE_GX
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
+ select FBDEV_SUPPORTS_NOSWITCH
---help---
Framebuffer driver for the display controller integrated into the
AMD Geode GX processors.
diff --git a/include/linux/suspend.h b/include/linux/suspend.h
index 1d7d4c5..46080f5 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -11,7 +11,7 @@
#include <linux/mm.h>
#include <asm/errno.h>

-#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
+#if defined(CONFIG_PM_SLEEP) && defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) && !defined(CONFIG_DISABLE_SUSPEND_VT_SWITCH)
extern int pm_prepare_console(void);
extern void pm_restore_console(void);
#else
diff --git a/kernel/power/console.c b/kernel/power/console.c
index 89bcf49..dca98f5 100644
--- a/kernel/power/console.c
+++ b/kernel/power/console.c
@@ -9,7 +9,7 @@
#include <linux/console.h>
#include "power.h"

-#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE)
+#if defined(CONFIG_VT) && defined(CONFIG_VT_CONSOLE) && !defined(CONFIG_DISABLE_SUSPEND_VT_SWITCH)
#define SUSPEND_CONSOLE (MAX_NR_CONSOLES-1)

static int orig_fgconsole, orig_kmsg;
--
1.5.3.7

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/