tools: firmware: check for distro fallback udev cancel rule
authorLuis R. Rodriguez <mcgrof@kernel.org>
Mon, 23 Jan 2017 16:11:07 +0000 (08:11 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 Jan 2017 10:52:34 +0000 (11:52 +0100)
Some distributions (Debian, OpenSUSE) have a udev rule in place to cancel
all fallback mechanism uevents immediately. This would obviously
make it hard to test against the fallback mechanism test interface,
so we need to check for this.

Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
tools/testing/selftests/firmware/fw_userhelper.sh

index b9983f8e09f68d00eb7166bd279d34db522c8114..01c626a1f2262047ff177f209bccc4fc84b4b717 100755 (executable)
@@ -64,9 +64,33 @@ trap "test_finish" EXIT
 echo "ABCD0123" >"$FW"
 NAME=$(basename "$FW")
 
+DEVPATH="$DIR"/"nope-$NAME"/loading
+
 # Test failure when doing nothing (timeout works).
-echo 1 >/sys/class/firmware/timeout
-echo -n "$NAME" >"$DIR"/trigger_request
+echo -n 2 >/sys/class/firmware/timeout
+echo -n "nope-$NAME" >"$DIR"/trigger_request 2>/dev/null &
+
+# Give the kernel some time to load the loading file, must be less
+# than the timeout above.
+sleep 1
+if [ ! -f $DEVPATH ]; then
+       echo "$0: fallback mechanism immediately cancelled"
+       echo ""
+       echo "The file never appeared: $DEVPATH"
+       echo ""
+       echo "This might be a distribution udev rule setup by your distribution"
+       echo "to immediately cancel all fallback requests, this must be"
+       echo "removed before running these tests. To confirm look for"
+       echo "a firmware rule like /lib/udev/rules.d/50-firmware.rules"
+       echo "and see if you have something like this:"
+       echo ""
+       echo "SUBSYSTEM==\"firmware\", ACTION==\"add\", ATTR{loading}=\"-1\""
+       echo ""
+       echo "If you do remove this file or comment out this line before"
+       echo "proceeding with these tests."
+       exit 1
+fi
+
 if diff -q "$FW" /dev/test_firmware >/dev/null ; then
        echo "$0: firmware was not expected to match" >&2
        exit 1