From 905823610db29e7920c17452dae39c08aa96f898 Mon Sep 17 00:00:00 2001 From: Kolan Sh Date: Tue, 15 May 2012 04:29:29 +0400 Subject: [PATCH] Stability improved. Latency reduced. Also fixes #76. --- bin/nvrun | 31 +++++++++++++++++-------------- sbin/snail-watcher.sh | 2 ++ sbin/snail.nv_pwr_off | 32 ++++++++++++++++---------------- 3 files changed, 35 insertions(+), 30 deletions(-) diff --git a/bin/nvrun b/bin/nvrun index 646e794..2058b4e 100755 --- a/bin/nvrun +++ b/bin/nvrun @@ -2,30 +2,33 @@ PATH=/usr/local/sbin:/usr/local/bin:$PATH -TIMEOUT=20 # wait timeout for X server start +TIMEOUT=4 # wait timeout for X server start let INTEL_IF_FAIL=1 # run on Intel if nVidia fails LOCK_FILE=/tmp/.snail.lock FIFO_FILE=/tmp/.snail.fifo { - echo -n > $FIFO_FILE & - flock -w $TIMEOUT -s 9 + flock -w 0 -s 9 + if [ 0 -ne $? ]; then + (nohup echo -n > $FIFO_FILE &>/dev/null)& + flock -w $TIMEOUT -s 9 + fi if [ 0 -eq $? ]; then - echo "Running $@ on nVidia" - export LD_LIBRARY_PATH=/usr/lib/snail - LD_PRELOAD="/usr/lib/snail/lib32/libGL.so.1 \ - /usr/lib/snail/lib32/libnvidia-tls.so \ - /usr/lib/snail/lib32/libnvidia-core.so" \ - snail.vglrun -d :8293 "$@" 2>/dev/null - echo "Application $@ was performed on nVidia" + echo "Running $@ on nVidia" + export LD_LIBRARY_PATH=/usr/lib/snail + LD_PRELOAD="/usr/lib/snail/lib32/libGL.so.1 \ + /usr/lib/snail/lib32/libnvidia-tls.so \ + /usr/lib/snail/lib32/libnvidia-core.so" \ + snail.vglrun -d :8293 "$@" 2>/dev/null + echo "Application $@ was performed on nVidia" elif [ 0 -ne $INTEL_IF_FAIL ]; then - echo "Failed to run $@ on nVidia ;-(" - # echo "Running $@ on Intel" - # "$@" - # echo "Application $@ was performed on Intel" + echo "Failed to run $@ on nVidia ;-(" + # echo "Running $@ on Intel" + # "$@" + # echo "Application $@ was performed on Intel" fi flock -u 9 diff --git a/sbin/snail-watcher.sh b/sbin/snail-watcher.sh index 174bc43..0607311 100755 --- a/sbin/snail-watcher.sh +++ b/sbin/snail-watcher.sh @@ -29,10 +29,12 @@ rm -f $FIFO_FILE && mkfifo --mode 660 $FIFO_FILE && chgrp video $FIFO_FILE # cre while [ 1 ]; do read <$FIFO_FILE + echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo snail.nv_pwr_on && $XSERVER_START_CMD # starting X server flock -u 9 echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo flock 9 + echo >$FIFO_FILE | cat $FIFO_FILE >/dev/null # flush fifo $XSERVER_STOP_CMD && snail.nv_pwr_off # stopping X server done } 9>$LOCK_FILE diff --git a/sbin/snail.nv_pwr_off b/sbin/snail.nv_pwr_off index d22bd7e..6577991 100755 --- a/sbin/snail.nv_pwr_off +++ b/sbin/snail.nv_pwr_off @@ -8,7 +8,7 @@ lsmod | grep '^nouveau ' >/dev/null && rmmod -f nouveau &>/dev/null if [ -f /proc/acpi/bbswitch ]; then let tries=$TRIES while [ 0 -lt $tries ]; do - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo 'OFF' > /proc/acpi/bbswitch \ && exit 0 @@ -25,77 +25,77 @@ if [ -f /proc/acpi/call ]; then while [ 0 -lt $tries ]; do case "$model" in M11XR2) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.P0P2.PEGP.NVOP 0 0x100 0x1A {255,255,255,255}' > /proc/acpi/call \ && echo '\_SB.PCI0.P0P2.PEGP._PS3' > /proc/acpi/call \ && exit 0 ;; 1015PN) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\OSGS 0x03' > /proc/acpi/call \ && exit 0 ;; 1215N) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.P0P4.GFX0._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \ && echo '\_SB.PCI0.P0P4.GFX0._PS3' > /proc/acpi/call \ && exit 0 ;; K42Jc|K52Jc|N53Jf|N53Jg|N71Jv|N73Jf|P52Jc|PL80Jt|U30Jc|U33Jc|U35Jc|U36Jc|UL80Jt) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG1.GFX0.DOFF' > /proc/acpi/call \ && exit 0 ;; N61Jv|N73Sv) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEGR.GFX0.DOFF' > /proc/acpi/call \ && exit 0 ;; P31Jg) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG1.GFX0._PS3' > /proc/acpi/call \ && exit 0 ;; U43Jc) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.RP00.VGA._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \ && echo '\_SB.PCI0.RP00.VGA._PS3' > /proc/acpi/call \ && exit 0 ;; UL30Vt) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.P0P1.VGA._OFF' > /proc/acpi/call \ && exit 0 ;; E6420) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG0.VID._OFF' > /proc/acpi/call \ && exit 0 ;; InspironN5110|XPSL702X) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG0.PEGP._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \ && echo '\_SB.PCI0.PEG0.PEGP._PS3' > /proc/acpi/call \ && exit 0 ;; Vostro3300|Vostro3500) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.P0P1.PEGP._OFF' > /proc/acpi/call \ && exit 0 ;; XPS15) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG0.PEGP._OFF' > /proc/acpi/call \ && exit 0 ;; ThinkPadT410) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \ && echo '\_SB.PCI0.PEG.VID._OFF' > /proc/acpi/call \ && exit 0 ;; ThinkPadT420) - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo '\_SB.PCI0.PEG.VID._DSM {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0} 0x100 0x1A {0x1,0x0,0x0,0x3}' > /proc/acpi/call \ && echo '\_SB.PCI0.PEG.VID._PS3' > /proc/acpi/call \ && exit 0 @@ -114,7 +114,7 @@ fi if [ -f /sys/kernel/debug/vgaswitcheroo/switch ]; then let tries=$TRIES while [ 0 -lt $tries ]; do - rmmod nvidia 2>/dev/null \ + (! lsmod | grep '^nvidia ' &>/dev/null || rmmod nvidia &>/dev/null) \ && echo 'OFF' > /sys/kernel/debug/vgaswitcheroo/switch \ && exit 0