blob: b6e5e8189e24831e04b2bcb0b6b1de30a43ac874 [file] [log] [blame]
Anders Roxelle3f51b82024-07-04 12:30:01 +02001#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-only
3# Copyright (C) 2024 Linaro Ltd.
4
5# shellcheck disable=SC1091
6. ../../lib/sh-test-lib
7OUTPUT="$(pwd)/output"
8RESULT_FILE="${OUTPUT}/result.txt"
9export RESULT_FILE
10
11MODULES_LIST=""
12MODULES_SUBDIRS=""
13MODULE_MODPROBE_NUMBER="1"
Anders Roxell8aa8dbf2024-07-11 14:42:19 +020014SKIPLIST=""
Anders Roxelle3f51b82024-07-04 12:30:01 +020015SHARD_NUMBER=1
16SHARD_INDEX=1
17
18usage() {
19 echo "Usage: $0 [-d <subdir of the modules directory> ]
20 [-l <space separated module list> ]
21 [-c <Number of load/unload of a module> ]
22 [-i <sharding bucket to run> ]
23 [-n <number of shard buckets to create> ]
Anders Roxell8aa8dbf2024-07-11 14:42:19 +020024 [-s <skiplist modules to skip> ]
Anders Roxelle3f51b82024-07-04 12:30:01 +020025 [-h ]" 1>&2
26 exit 0
27}
28
Anders Roxell8aa8dbf2024-07-11 14:42:19 +020029while getopts "c:d:i:l:n:s:h" o; do
Anders Roxelle3f51b82024-07-04 12:30:01 +020030 case "$o" in
31 d) MODULES_SUBDIRS="${OPTARG}" ;;
32 l) MODULES_LIST="${OPTARG}" ;;
33 c) MODULE_MODPROBE_NUMBER="${OPTARG}" ;;
34 i) SHARD_INDEX="${OPTARG}" ;;
35 n) SHARD_NUMBER="${OPTARG}" ;;
Anders Roxell8aa8dbf2024-07-11 14:42:19 +020036 s) SKIPLIST="${OPTARG}" ;;
Anders Roxelle3f51b82024-07-04 12:30:01 +020037 h|*) usage ;;
38 esac
39done
40
41get_modules_list() {
42 if [ -z "${MODULES_LIST}" ]; then
Anders Roxell50c9c412024-07-09 19:33:38 +020043 subdir=$(echo "${MODULES_SUBDIRS}" | tr ' ' '|')
Anders Roxell8aa8dbf2024-07-11 14:42:19 +020044 skiplist=$(echo "${SKIPLIST}" | tr ' ' '|')
Anders Roxell50c9c412024-07-09 19:33:38 +020045 grep -E "kernel/(${subdir})" /lib/modules/"$(uname -r)"/modules.order | tee /tmp/find_modules.txt
Anders Roxell8aa8dbf2024-07-11 14:42:19 +020046 grep -E -v "(${skiplist})" /tmp/find_modules.txt | tee /tmp/modules_to_run.txt
47 split --verbose --numeric-suffixes=1 -n l/"${SHARD_INDEX}"/"${SHARD_NUMBER}" /tmp/modules_to_run.txt > /tmp/shardfile
Anders Roxellbde4f2e2024-07-09 19:29:06 +020048 echo "============== Tests to run ==============="
49 cat /tmp/shardfile
50 echo "===========End Tests to run ==============="
51 if [ -s /tmp/shardfile ]; then
52 report_pass "shardfile"
53 else
54 report_fail "shardfile"
55 fi
Anders Roxelle3f51b82024-07-04 12:30:01 +020056 while IFS= read -r line
57 do
58 module_basename=$(basename "${line}")
59 module_name=${module_basename%.*}
60 MODULES_LIST="${MODULES_LIST} ${module_name}"
61 done < /tmp/shardfile
62 fi
63}
64
65report() {
66 local _modprop_flag="${1}"
67 local _module="${2}"
68 local _text="${3}"
69 local _num="${4}"
70 echo
71 echo "${_text} module: ${_module}"
72 if ! modprobe "${_module}" "${_modprop_flag}"; then
73 report_fail "${_text}_module_${_num}_${_module}"
74 else
75 report_pass "${_text}_module_${_num}_${_module}"
76 fi
77}
78
79run () {
80 for module in ${MODULES_LIST}; do
81 # don't insert/remove modules that is already inserted.
82 if ! lsmod | grep "^${module}"; then
83 for num in $(seq "${MODULE_MODPROBE_NUMBER}"); do
84 dmesg -C
85 report "" "${module}" "insert" "${num}"
86 echo
87 echo "modinfo ${module}"
88 modinfo "${module}"
89 report "--remove" "${module}" "remove" "${num}"
90 dmesg -l 0,1,2,3,4,5
91 done
92 fi
93 done
94}
95
96# Test run.
97! check_root && error_msg "This script must be run as root"
98create_out_dir "${OUTPUT}"
99info_msg "Output directory: ${OUTPUT}"
100info_msg "About to run load/unload kernel modules ..."
101get_modules_list
102run