All of lore.kernel.org
 help / color / mirror / Atom feed
* [v4l-utils PATCH v2 0/2] Fix module unloading, vimc device naming
@ 2025-08-04 15:51 Sakari Ailus
  2025-08-04 15:51 ` [v4l-utils PATCH v2 1/2] contrib/test/test-media: Fix module unloading Sakari Ailus
  2025-08-04 15:52 ` [v4l-utils PATCH v2 2/2] contrib/test/test-media: Probe the vimc device Sakari Ailus
  0 siblings, 2 replies; 3+ messages in thread
From: Sakari Ailus @ 2025-08-04 15:51 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hans

This set fixes test driver module unloading and vimc device naming (see
<20231129141545.87461-3-sakari.ailus@linux.intel.com> on LMML).

since v1:

- Rework module loading and unloading. All loaded modules are now
  unloaded, too, by new functions handling the respective operations.

Sakari Ailus (2):
  contrib/test/test-media: Fix module unloading
  contrib/test/test-media: Probe the vimc device

 contrib/test/test-media | 134 ++++++++++++++++++++++------------------
 1 file changed, 75 insertions(+), 59 deletions(-)

-- 
2.39.5


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [v4l-utils PATCH v2 1/2] contrib/test/test-media: Fix module unloading
  2025-08-04 15:51 [v4l-utils PATCH v2 0/2] Fix module unloading, vimc device naming Sakari Ailus
@ 2025-08-04 15:51 ` Sakari Ailus
  2025-08-04 15:52 ` [v4l-utils PATCH v2 2/2] contrib/test/test-media: Probe the vimc device Sakari Ailus
  1 sibling, 0 replies; 3+ messages in thread
From: Sakari Ailus @ 2025-08-04 15:51 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hans

Keep track of all loaded modules and unload them at exit. This also
unifies informing of loading and unloading modules.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 contrib/test/test-media | 83 ++++++++++++++++++++++-------------------
 1 file changed, 44 insertions(+), 39 deletions(-)

diff --git a/contrib/test/test-media b/contrib/test/test-media
index 68fe48f947f3..87f5a0544b84 100755
--- a/contrib/test/test-media
+++ b/contrib/test/test-media
@@ -24,10 +24,31 @@ kobj_rel=0
 v4l2_ctl=v4l2-ctl
 v4l2_compliance=v4l2-compliance
 compliance_args=
+declare -A modules_loaded
+
+unload_module() {
+	echo rmmod $1 | tee /dev/kmsg
+	rmmod $1 2> /dev/null
+	unset modules_loaded[$1];
+}
+
+unload_modules() {
+	local i
+
+	for i in ${!modules_unload[@]}; do
+		unload_module $i
+	done
+}
 
 run_modprobe () {
 	dmesg -n info
+	if [ "$1" == "-r" ]; then
+		unload_module "$2"
+		shift
+	fi
+	echo modprobe $1 | tee /dev/kmsg
 	modprobe $@
+	modules_loaded[$1]=1
 	sleep $modprobe_time
 	udevadm settle
 	dmesg -n notice
@@ -229,8 +250,7 @@ if [ $kmemleak -eq 1 ]; then
 fi
 
 dmesg -n info
-rmmod vivid 2&>/dev/null
-run_modprobe vivid n_devs=3 multiplanar=1,2,2 cache_hints=1,0,0 #allocators=0,1,1
+run_modprobe -r vivid n_devs=3 multiplanar=1,2,2 cache_hints=1,0,0 #allocators=0,1,1
 
 tmp=`mktemp`
 
@@ -238,6 +258,7 @@ if ! $v4l2_ctl -z platform:vivid-002 -d vivid-002-vid-cap ; then
 	echo "FAIL: the vivid module failed to load" | tee -a $tmp
 	echo "Grand Total for vivid: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 	echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
+	unload_modules
 	exit 0
 fi
 
@@ -291,6 +312,7 @@ if [ $cec -eq 1 ]; then
 		echo "FAIL: the vivid module had no cec support" | tee -a $tmp
 		echo "Grand Total for vivid cec: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
+		unload_modules
 		exit 0
 	fi
 	cec-ctl -D vivid -a vivid-000-vid-cap0 --tv
@@ -375,9 +397,7 @@ if [ $vivid -eq 1 -a $setup -eq 0 ]; then
 	echo -n vivid.0 >/sys/bus/platform/drivers/vivid/unbind
 	sleep $reunbind_time
 	echo
-	echo rmmod vivid | tee /dev/kmsg
-	echo
-	rmmod vivid
+	unload_module vivid
 	sleep $rmmod_time
 
 	if [ $kmemleak -eq 1 ]; then
@@ -410,14 +430,13 @@ if [ $vivid -eq 1 -a $setup -eq 0 ]; then
 fi
 
 if [ $vim2m -eq 1 ]; then
-	rmmod vim2m 2&>/dev/null
-	run_modprobe vim2m
+	run_modprobe -r vim2m
 
 	if ! $v4l2_ctl -z platform:vim2m ; then
 		echo "FAIL: the vim2m module failed to load" | tee -a $tmp
 		echo "Grand Total for vim2m: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
-		rmmod vivid
+		unload_modules
 		exit 0
 	fi
 fi
@@ -432,9 +451,7 @@ if [ $vim2m -eq 1 -a $setup -eq 0 ]; then
 	echo
 	echo
 	echo
-	echo rmmod vim2m | tee /dev/kmsg
-	echo
-	rmmod vim2m
+	unload_module vim2m
 	sleep $rmmod_time
 	if [ $kmemleak -eq 1 ]; then
 		echo
@@ -453,7 +470,7 @@ if [ $vim2m -eq 1 -a $setup -eq 0 ]; then
 		echo "FAIL: the vim2m module failed to load" | tee -a $tmp
 		echo "Grand Total for vim2m: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
-		rmmod vivid
+		unload_modules
 		exit 0
 	fi
 
@@ -493,9 +510,7 @@ if [ $vim2m -eq 1 -a $setup -eq 0 ]; then
 	echo -n vim2m.0 >/sys/bus/platform/drivers/vim2m/unbind
 	sleep $reunbind_time
 	echo
-	echo rmmod vim2m | tee /dev/kmsg
-	echo
-	rmmod vim2m
+	unload_module vim2m
 	sleep $rmmod_time
 	if [ $kmemleak -eq 1 ]; then
 		echo
@@ -518,14 +533,13 @@ if [ $vim2m -eq 1 -a $setup -eq 0 ]; then
 fi
 
 if [ $vimc -eq 1 ]; then
-	rmmod vimc 2&>/dev/null
-	run_modprobe vimc
+	run_modprobe -r vimc
 
 	if ! $v4l2_ctl -z platform:vimc -d "Sensor A" ; then
 		echo "FAIL: the vimc module failed to load" | tee -a $tmp
 		echo "Grand Total for vimc: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
-		rmmod vivid
+		unload_modules
 		exit 0
 	fi
 
@@ -587,9 +601,7 @@ if [ $vimc -eq 1 -a $setup -eq 0 ]; then
 	echo -n vimc.0 >/sys/bus/platform/drivers/vimc/unbind
 	sleep 14
 	echo
-	echo rmmod vimc | tee /dev/kmsg
-	echo
-	rmmod vimc
+	unload_module vimc
 	sleep $rmmod_time
 	if [ $kmemleak -eq 1 ]; then
 		echo
@@ -620,14 +632,13 @@ if [ $vicodec -eq 1 ]; then
 		mkdir $tmpdir
 	fi
 
-	rmmod vicodec 2&>/dev/null
-	run_modprobe vicodec
+	run_modprobe -r vicodec
 
 	if ! $v4l2_ctl -z platform:vicodec ; then
 		echo "FAIL: the vicodec module failed to load" | tee -a $tmp
 		echo "Grand Total for vicodec: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
-		rmmod vivid
+		unload_modules
 		exit 0
 	fi
 
@@ -778,9 +789,7 @@ if [ $vicodec -eq 1 -a $setup -eq 0 ]; then
 	echo -n vicodec.0 >/sys/bus/platform/drivers/vicodec/unbind
 	sleep $reunbind_time
 	echo
-	echo rmmod vicodec | tee /dev/kmsg
-	echo
-	rmmod vicodec
+	unload_module vicodec
 	sleep $rmmod_time
 	if [ $kmemleak -eq 1 ]; then
 		echo
@@ -805,14 +814,13 @@ fi
 
 if [ $visl -eq 1 ]; then
 	echo
-	echo loading visl module | tee /dev/kmsg
-	run_modprobe visl
+	run_modprobe -r visl
 
 	if ! $v4l2_ctl -z platform:visl ; then
 		echo "FAIL: the visl module failed to load" | tee -a $tmp
 		echo "Grand Total for visl: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
-		rmmod vivid
+		unload_modules
 		exit 0
 	fi
 fi
@@ -846,9 +854,7 @@ if [ $visl -eq 1 -a $setup -eq 0 ]; then
 	echo -n visl.0 >/sys/bus/platform/drivers/visl/unbind
 	sleep $reunbind_time
 	echo
-	echo rmmod visl | tee /dev/kmsg
-	echo
-	rmmod visl
+	unload_module visl
 	sleep $rmmod_time
 
 	if [ $kmemleak -eq 1 ]; then
@@ -889,6 +895,7 @@ if [ $vidtv -eq 1 ]; then
 		echo "Grand Total for vidtv: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
 		rmmod dvb_vidtv_bridge dvb_vidtv_tuner dvb_vidtv_demod 2&>/dev/null
+		unload_modules
 		exit 0
 	fi
 fi
@@ -926,9 +933,7 @@ if [ $vidtv -eq 1 -a $setup -eq 0 ]; then
 	echo -n vidtv.0 >/sys/bus/platform/drivers/vidtv/unbind
 	sleep $reunbind_time
 	echo
-	echo rmmod dvb_vidtv_bridge dvb_vidtv_tuner dvb_vidtv_demod
-	echo
-	rmmod dvb_vidtv_bridge dvb_vidtv_tuner dvb_vidtv_demod
+	unload_module dvb_vidtv_bridge dvb_vidtv_tuner dvb_vidtv_demod
 	sleep $rmmod_time
 	if [ $kmemleak -eq 1 ]; then
 		echo
@@ -959,9 +964,7 @@ if [ $setup -eq 0 ]; then
 	echo -n vivid.0 >/sys/bus/platform/drivers/vivid/unbind
 	sleep $unbind_time
 	echo
-	echo rmmod vivid | tee /dev/kmsg
-	echo
-	rmmod vivid
+	unload_module vivid
 	sleep $rmmod_time
 fi
 
@@ -1001,5 +1004,7 @@ if [ $setup -eq 0 ]; then
 	fi
 fi
 
+unload_modules
+
 dmesg -n info
 date
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [v4l-utils PATCH v2 2/2] contrib/test/test-media: Probe the vimc device
  2025-08-04 15:51 [v4l-utils PATCH v2 0/2] Fix module unloading, vimc device naming Sakari Ailus
  2025-08-04 15:51 ` [v4l-utils PATCH v2 1/2] contrib/test/test-media: Fix module unloading Sakari Ailus
@ 2025-08-04 15:52 ` Sakari Ailus
  1 sibling, 0 replies; 3+ messages in thread
From: Sakari Ailus @ 2025-08-04 15:52 UTC (permalink / raw)
  To: linux-media; +Cc: laurent.pinchart, hans

The vimc platform device is called platform:vimc.0 after kernel patch
"media: vimc: Don't explicitly set bus_info". Adapt to possible different
naming of the vimc device.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 contrib/test/test-media | 51 +++++++++++++++++++++++++----------------
 1 file changed, 31 insertions(+), 20 deletions(-)

diff --git a/contrib/test/test-media b/contrib/test/test-media
index 87f5a0544b84..0bb4844a58ad 100755
--- a/contrib/test/test-media
+++ b/contrib/test/test-media
@@ -535,7 +535,18 @@ fi
 if [ $vimc -eq 1 ]; then
 	run_modprobe -r vimc
 
-	if ! $v4l2_ctl -z platform:vimc -d "Sensor A" ; then
+	for i in vimc vimc.0; do
+		if media-ctl -d platform:$i > /dev/null; then
+			vimc_device=platform:$i
+		fi
+	done
+	if [ "$vimc_device" -eq "" ]; then
+		echo "FAIL: can't find vimc device" | tee -a $tmp
+		unload_modules
+		exit 0
+	fi
+
+	if ! $v4l2_ctl -z $vimc_device -d "Sensor A" ; then
 		echo "FAIL: the vimc module failed to load" | tee -a $tmp
 		echo "Grand Total for vimc: Succeeded: 0, Failed: 1, Warnings: 0" | tee -a $tmp
 		echo "Final Summary: 1, Succeeded: 0, Failed: 1, Warnings: 0"
@@ -543,14 +554,14 @@ if [ $vimc -eq 1 ]; then
 		exit 0
 	fi
 
-	media-ctl -d platform:vimc -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Sensor B":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Debayer B":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Scaler":1[fmt:RGB888_1X24/1920x1440]'
-	$v4l2_ctl -z platform:vimc -d "RGB/YUV Capture" -v width=1920,height=1440
-	$v4l2_ctl -z platform:vimc -d "Raw Capture 0" -v pixelformat=BA81
-	$v4l2_ctl -z platform:vimc -d "Raw Capture 1" -v pixelformat=BA81
+	media-ctl -d $vimc_device -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Sensor B":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Debayer B":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Scaler":1[fmt:RGB888_1X24/1920x1440]'
+	$v4l2_ctl -z $vimc_device -d "RGB/YUV Capture" -v width=1920,height=1440
+	$v4l2_ctl -z $vimc_device -d "Raw Capture 0" -v pixelformat=BA81
+	$v4l2_ctl -z $vimc_device -d "Raw Capture 1" -v pixelformat=BA81
 fi
 
 if [ $vimc -eq 1 -a $setup -eq 0 ]; then
@@ -559,7 +570,7 @@ if [ $vimc -eq 1 -a $setup -eq 0 ]; then
 	echo vimc compliance tests | tee /dev/kmsg
 	echo
 	date
-	stdbuf -oL $v4l2_compliance -m platform:vimc -z platform:vivid-002 -e vivid-002-vid-cap -s10 -P -a 2>&1 | tee -a $tmp
+	stdbuf -oL $v4l2_compliance -m $vimc_device -z platform:vivid-002 -e vivid-002-vid-cap -s10 -P -a 2>&1 | tee -a $tmp
 	echo
 	echo
 	echo
@@ -579,24 +590,24 @@ if [ $vimc -eq 1 -a $setup -eq 0 ]; then
 	echo
 	echo -n vimc.0 >/sys/bus/platform/drivers/vimc/bind
 	sleep 1
-	media-ctl -d platform:vimc -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Sensor B":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Debayer B":0[fmt:SBGGR8_1X8/640x480]'
-	media-ctl -d platform:vimc -V '"Scaler":1[fmt:RGB888_1X24/1920x1440]'
-	$v4l2_ctl -z platform:vimc -d "RGB/YUV Capture" -v width=1920,height=1440
-	$v4l2_ctl -z platform:vimc -d "Raw Capture 0" -v pixelformat=BA81
-	$v4l2_ctl -z platform:vimc -d "Raw Capture 1" -v pixelformat=BA81
+	media-ctl -d $vimc_device -V '"Sensor A":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Debayer A":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Sensor B":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Debayer B":0[fmt:SBGGR8_1X8/640x480]'
+	media-ctl -d $vimc_device -V '"Scaler":1[fmt:RGB888_1X24/1920x1440]'
+	$v4l2_ctl -z $vimc_device -d "RGB/YUV Capture" -v width=1920,height=1440
+	$v4l2_ctl -z $vimc_device -d "Raw Capture 0" -v pixelformat=BA81
+	$v4l2_ctl -z $vimc_device -d "Raw Capture 1" -v pixelformat=BA81
 	echo
 	echo second unbind vimc | tee /dev/kmsg
 	echo
 	# Max sleep time is 6 + 8 = 14s
-	for i in `$v4l2_ctl -z platform:vimc --list-devices`; do
+	for i in `$v4l2_ctl -z $vimc_device --list-devices`; do
 		let "t = 6 + $RANDOM / 4096"
 		echo $i: sleep ${t}s
 		sleep $t <$i &
 	done
-	$v4l2_ctl -z platform:vimc -d "Raw Capture 0" --stream-mmap --sleep 5 &
+	$v4l2_ctl -z $vimc_device -d "Raw Capture 0" --stream-mmap --sleep 5 &
 	sleep 1
 	echo -n vimc.0 >/sys/bus/platform/drivers/vimc/unbind
 	sleep 14
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-08-04 15:52 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-04 15:51 [v4l-utils PATCH v2 0/2] Fix module unloading, vimc device naming Sakari Ailus
2025-08-04 15:51 ` [v4l-utils PATCH v2 1/2] contrib/test/test-media: Fix module unloading Sakari Ailus
2025-08-04 15:52 ` [v4l-utils PATCH v2 2/2] contrib/test/test-media: Probe the vimc device Sakari Ailus

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.