mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
selftests: add media controller regression test scripts and document
Add regression test scripts open_loop_test.sh, and bind_unbind_sample.sh. Also add regression_test.txt that describes the regression test procedure. Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
This commit is contained in:
parent
b96da0fc54
commit
fe8777a8a0
12
tools/testing/selftests/media_tests/bind_unbind_sample.sh
Executable file
12
tools/testing/selftests/media_tests/bind_unbind_sample.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Find device number in /sys/bus/usb/drivers/drivername
|
||||||
|
# Edit this file to update the driver numer and name
|
||||||
|
# Example test for uvcvideo driver
|
||||||
|
#i=0
|
||||||
|
# while :; do
|
||||||
|
# i=$((i+1))
|
||||||
|
# echo 1-5:1.0 > /sys/bus/usb/drivers/uvcvideo/unbind;
|
||||||
|
# echo 1-5:1.0 > /sys/bus/usb/drivers/uvcvideo/bind;
|
||||||
|
# clear
|
||||||
|
# echo $i
|
||||||
|
#done
|
10
tools/testing/selftests/media_tests/open_loop_test.sh
Executable file
10
tools/testing/selftests/media_tests/open_loop_test.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
i=0
|
||||||
|
file=/dev/media$1
|
||||||
|
while :; do
|
||||||
|
echo $file
|
||||||
|
i=$((i+1))
|
||||||
|
R=$(./media_device_open -d $file);
|
||||||
|
# clear
|
||||||
|
echo -e "Loop $i\n$R"
|
||||||
|
done
|
43
tools/testing/selftests/media_tests/regression_test.txt
Normal file
43
tools/testing/selftests/media_tests/regression_test.txt
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
Testing for regressions in Media Controller API register, ioctl, syscall,
|
||||||
|
and unregister paths. There have a few problems that result in user-after
|
||||||
|
free on media_device, media_devnode, and cdev pointers when the driver is
|
||||||
|
unbound while ioctl is in progress.
|
||||||
|
|
||||||
|
Test Procedure:
|
||||||
|
|
||||||
|
Run bin/unbind loop while ioctls are in progress.
|
||||||
|
Run rmmod and modprobe.
|
||||||
|
Disconnect the device.
|
||||||
|
|
||||||
|
Setup:
|
||||||
|
|
||||||
|
Build media_device_test
|
||||||
|
cd tools/testing/selftests/media_tests
|
||||||
|
make
|
||||||
|
|
||||||
|
Regressions test for cdev user-after free error on /dev/mediaX when driver
|
||||||
|
is unbound:
|
||||||
|
|
||||||
|
Start media_device_test to regression test media devnode dynamic alloc
|
||||||
|
and cdev user-after-free fixes. This opens media dev files and sits in
|
||||||
|
a loop running media ioctl MEDIA_IOC_DEVICE_INFO command once every 10
|
||||||
|
seconds. The idea is when device file goes away, media devnode and cdev
|
||||||
|
should stick around until this test exits.
|
||||||
|
|
||||||
|
The test for a random number of iterations or until user kills it with a
|
||||||
|
sleep 10 in between the ioctl calls.
|
||||||
|
|
||||||
|
sudo ./media_device_test -d /dev/mediaX
|
||||||
|
|
||||||
|
Regression test for media_devnode unregister race with ioctl_syscall:
|
||||||
|
|
||||||
|
Start 6 open_loop_test.sh tests with different /dev/mediaX files. When
|
||||||
|
device file goes away after unbind, device file name changes. Start the
|
||||||
|
test with possible device names. If we start with /dev/media0 for example,
|
||||||
|
after unbind, /dev/media1 or /dev/media2 could get created. The idea is
|
||||||
|
keep ioctls going while bind/unbind runs.
|
||||||
|
|
||||||
|
Copy bind_unbind_sample.txt and make changes to specify the driver name
|
||||||
|
and number to run bind and unbind. Start the bind_unbind.sh
|
||||||
|
|
||||||
|
Run dmesg looking for any user-after free errors or mutex lock errors.
|
Loading…
Reference in New Issue
Block a user