[PATCH 0/7] firmware: expand test units for fallback mechanism

From: Luis R. Rodriguez
Date: Mon Jan 23 2017 - 11:11:38 EST


A kernel crash has been reported by a few folks on cancelling the
firmware fallback mechanism introduced by some new code changes in
v4.10. Testing this is not easy as most distributions disable
the option to always use the fallback mechanism by default
(CONFIG_FW_LOADER_USER_HELPER_FALLBACK), and our test driver for the
firmware does not test against the fallback mechanism.

If CONFIG_FW_LOADER_USER_HELPER_FALLBACK is disabled there are only
two ways in which the kernel will use the fallback mechanism, on two
drivers:

o drivers/firmware/dell_rbu.c
o drivers/leds/leds-lp55xx-common.c

We need a way to easily test the fallback mechanism then even if
distributions disable CONFIG_FW_LOADER_USER_HELPER_FALLBACK. This
series expands the test_firmware driver to always have a knob to
trigger a request which always requests the fallback mechanism,
so long as CONFIG_FW_LOADER_USER_HELPER=y is enabled (most
distributions), this trigger should help test the fallback mechanism.

This series also fixes the issue reported. I've tested applying the
test unit changes onto v4.9.5 and confirm the issue is not present
there. The crash happens after commit 5d47ec02c37ea6 ("firmware: Correct
handling of fw_state_wait() return value") but this is a fix for
commit 5b029624948d ("firmware: do not use fw_lock for fw_state protection")
which is a functional change introduced only on v4.10.

Moving forward I will ask all parties to use all test scripts before applying
any changes. If any APIs are changed we need a respective test unit for it.

Luis R. Rodriguez (7):
test_firmware: move misc_device down
test_firmware: use device attribute groups
tools: firmware: check for distro fallback udev cancel rule
tools: firmware: rename fallback mechanism script
tools: firmware: add fallback cancelation testing
test_firmware: add test custom fallback trigger
firmware: firmware: fix NULL pointer dereference in __fw_load_abort()

drivers/base/firmware_class.c | 5 +-
lib/test_firmware.c | 92 ++++++---
tools/testing/selftests/firmware/Makefile | 2 +-
tools/testing/selftests/firmware/fw_fallback.sh | 224 ++++++++++++++++++++++
tools/testing/selftests/firmware/fw_userhelper.sh | 99 ----------
5 files changed, 288 insertions(+), 134 deletions(-)
create mode 100755 tools/testing/selftests/firmware/fw_fallback.sh
delete mode 100755 tools/testing/selftests/firmware/fw_userhelper.sh

--
2.11.0