[Pm-utils] chvt is a quirk (at least with current nvidia binary drivers)

Victor Lowther victor.lowther at gmail.com
Sun Jun 29 16:46:56 PDT 2008


On Sun, 2008-06-29 at 17:47 -0500, Victor Lowther wrote:
> So how about we treat like one?  It is a shame that it is so prevalent
> that its absence is more notable than its presence...
> 
> Anyways, I would like to see if we can do without chvt and the attendant
> time-eating console switching with other drivers that handle kernel
> modesetting correctly.  To test them, make sure you are using kernel
> suspend/resume on a system that 98smart-kernel-video approves of and see
> if --quirk-no-chvt does the Right Thing, or if it makes your box
> explode.
Patch FUBAR'ed by evolution.  Try 2:
(oh, and it is against current master)

 pm/HOWTO.hooks                  |    2 +-
 pm/module.d/uswsusp             |    2 +-
 pm/sleep.d/90chvt               |   20 --------------------
 pm/sleep.d/98smart-kernel-video |   15 +++++++++++++--
 pm/sleep.d/99video              |   23 ++++++++++++++++++++---
 pm/sleep.d/Makefile.am          |    1 -
 6 files changed, 35 insertions(+), 28 deletions(-)
 delete mode 100755 pm/sleep.d/90chvt

diff --git a/pm/HOWTO.hooks b/pm/HOWTO.hooks
index 816ebba..7ee8298 100644
--- a/pm/HOWTO.hooks
+++ b/pm/HOWTO.hooks
@@ -65,7 +65,7 @@ does that should be in this range.
 
 90 - 99: reserved for critical suspend hooks. 
 The hooks in this range should not be messed with unless you know what
-you are doing.  They start with 90chvt and end with 99video
+you are doing.
 
 At or before 50, you can assume that all services are still enabled.
 
diff --git a/pm/module.d/uswsusp b/pm/module.d/uswsusp
index 4647824..cc6ec5c 100755
--- a/pm/module.d/uswsusp
+++ b/pm/module.d/uswsusp
@@ -3,7 +3,6 @@
 # disable processing of 99video
 before_hooks()
 {
-	disablehook 90chvt "disabled by uswsusp"
 	disablehook 99video "disabled by uswsusp"
 }
 
@@ -25,6 +24,7 @@ get_quirks()
 			vga-mode3) 	   ;; # no-op
 			save-pci)          OPTS="$OPTS --pci_save" ;;
 			none) 		   QUIRK_NONE="true" ;;
+		        no-chvt)           ;; # no-op
 			*) continue ;;
 		esac
 	done
diff --git a/pm/sleep.d/90chvt b/pm/sleep.d/90chvt
deleted file mode 100755
index 47a2c85..0000000
--- a/pm/sleep.d/90chvt
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-# Ensure we eare in text mode by switching to an unused vt.
-# Also avoids lots of ghastly suspend/resume errors due to trying
-# to suspend/resume while running in X.
-
-. "${PM_FUNCTIONS}"
-
-case "$1" in
-	hibernate|suspend)
-		fgconsole |savestate console
-		chvt 63
-		;;
-	thaw|resume) 
-		state_exists console || exit 1
-		chvt $(restorestate console) 
-		deallocvt 63
-		;;
-	*)
-		;;
-esac
diff --git a/pm/sleep.d/98smart-kernel-video b/pm/sleep.d/98smart-kernel-video
index 04f80f6..1c9675c 100755
--- a/pm/sleep.d/98smart-kernel-video
+++ b/pm/sleep.d/98smart-kernel-video
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2008 Victor Lowther <victor.lowther at gmail.com
+# Copyright 2008 Victor Lowther <victor.lowther at gmail.com>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of version 2 of the GNU General Public License as
@@ -15,11 +15,22 @@
 smart_kernel_video() 
 {
         # If we are using an ATI or nVidia binary driver, no quirks required.
-	[ -d /sys/module/nvidia -o -d /sys/module/fglrx ] && return 0;
+        # If we are using an nVidia binary driver, no quirks required,
+        # and we actually do not need to change virtual terminals.
+        [ -d /sys/module/nvidia ] && {
+	    add_parameters "--quirk-no-chvt"
+	    return 0
+	}
+	
+	# if we are running an fglrx binary driver, we also do not need
+	# any quirks.  
+	# TODO: Does it also handle suspend/resume in X correctly?
+	[ -d /sys/module/fglrx ] && return 0;
 
 	local kernel_rev="$(uname -r |awk -F '[_-]' '{print $1}')"
         # Intel at or after kernel 2.6.26 is also quirk-free.
 	# FIXME: a more accurate way of testing this?
+	# TODO: Does it also handle suspend/resume in X correctly?
 	[ -d /sys/module/i915 ] && \
 	    [ "$kernel_rev" \> "2.6.26" -o "$kernel_rev" = "2.6.26" ] && \
 	    return 0;
diff --git a/pm/sleep.d/99video b/pm/sleep.d/99video
index b927a1b..070e241 100755
--- a/pm/sleep.d/99video
+++ b/pm/sleep.d/99video
@@ -27,6 +27,7 @@ for opt in $PM_CMDLINE; do
 		vbestate-restore)  QUIRK_VBESTATE_RESTORE="true" ;;
 		vga-mode3) 	   QUIRK_VGA_MODE_3="true" ;;
 		none) 		   QUIRK_NONE="true" ;;
+	        no-chvt)           QUIRK_NO_CHVT="true" ;;
 		*) continue ;;
 	esac
 done
@@ -133,6 +134,20 @@ resume_video()
 	return 0  # avoid spurious hook exit failure message.
 }
 
+mabye_switch_to_vt63()
+{
+    [ $QUIRK_NO_CHVT ] && return
+    fgconsole |savestate console
+    chvt 63
+}
+
+mabye_switch_from_vt63()
+{
+    [ $QUIRK_NO_CHVT ] && return
+    chvt $(restorestate console) 
+    deallocvt 63
+}
+
 help() {
 	echo  # first echo makes it look nicer.
 	echo "Video quirk handler options:"
@@ -151,17 +166,19 @@ help() {
 }
 
 case "$1" in
-	suspend) suspend_video ;;
-	hibernate)
+	suspend) mabye_switch_to_vt63; 
+	         suspend_video ;;
+	hibernate) mabye_switch_to_vt63;
 		if [ "$HIBERNATE_RESUME_POST_VIDEO" = "yes" ]; then
 			suspend_video
 		fi
 		;;
-	resume) resume_video ;;
+	resume) resume_video; mabye_switch_from_vt63 ;;
 	thaw)
 		if [ "${HIBERNATE_RESUME_POST_VIDEO}" = "yes" ]; then
 			resume_video
 		fi
+		mabye_switch_from_vt63
 		;;
 	help) help ;;
 esac
diff --git a/pm/sleep.d/Makefile.am b/pm/sleep.d/Makefile.am
index d47b799..96685e8 100644
--- a/pm/sleep.d/Makefile.am
+++ b/pm/sleep.d/Makefile.am
@@ -9,7 +9,6 @@ sleep_SCRIPTS =			\
 	55NetworkManager	\
 	65alsa			\
 	75modules		\
-	90chvt			\
 	90clock			\
 	94cpufreq		\
 	95led			\

> 
-- 
Victor Lowther
Ubuntu Certified Professional



More information about the Pm-utils mailing list