Initial commit
This commit is contained in:
22
fix_surface_interrupts.sh
Normal file
22
fix_surface_interrupts.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# This script is designed to mitigate a common interrupt storm issue on Surface devices running Linux.
|
||||
# It identifies the IRQ that is firing excessively and disables it.
|
||||
|
||||
# Find the IRQ with the highest number of interrupts.
|
||||
# We exclude the local timer interrupts (LOC) as they are expected to be high.
|
||||
HIGH_IRQ=$(cat /proc/interrupts | grep -v "LOC" | sort -n -k 2 | tail -n 1 | cut -d: -f1 | tr -d ' ')
|
||||
|
||||
if [ -z "$HIGH_IRQ" ]; then
|
||||
echo "Could not find a high IRQ to disable."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Disabling IRQ $HIGH_IRQ"
|
||||
|
||||
# Disable the IRQ by writing it to /proc/irq/{number}/smp_affinity.
|
||||
# This will prevent the interrupt from being handled by any CPU.
|
||||
echo 0 > "/proc/irq/$HIGH_IRQ/smp_affinity"
|
||||
|
||||
echo "IRQ $HIGH_IRQ has been disabled."
|
||||
echo "The associated device (likely the touchscreen) may no longer function."
|
||||
echo "To re-enable, you can write the original smp_affinity value back, or simply reboot."
|
||||
Reference in New Issue
Block a user