Stability improved. Latency reduced. Also fixes #76.

This commit is contained in:
Kolan Sh 2012-05-15 04:29:29 +04:00
parent 2afa920ce7
commit 905823610d
3 changed files with 35 additions and 30 deletions

View File

@ -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

View File

@ -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

View File

@ -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