diff --git a/Runner/plans/qcom-next-ci-premerge.yaml b/Runner/plans/qcom-next-ci-premerge.yaml index 47116b47..0e7fcf86 100755 --- a/Runner/plans/qcom-next-ci-premerge.yaml +++ b/Runner/plans/qcom-next-ci-premerge.yaml @@ -40,6 +40,10 @@ run: - $PWD/utils/send-to-lava.sh $PWD/suites/Kernel/FunctionalArea/baseport/remoteproc/remoteproc.res || true - $PWD/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh || true - $PWD/utils/send-to-lava.sh $PWD/suites/Kernel/FunctionalArea/baseport/RMNET/RMNET.res || true + - $PWD/suites/Kernel/FunctionalArea/baseport/IPA/run.sh || true + - $PWD/utils/send-to-lava.sh $PWD/suites/Kernel/FunctionalArea/baseport/IPA/IPA.res || true + - $PWD/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/run.sh || true + - $PWD/utils/send-to-lava.sh $PWD/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/Probe_Failure_Check.res || true - $PWD/suites/Kernel/FunctionalArea/baseport/rngtest/run.sh || true - $PWD/utils/send-to-lava.sh $PWD/suites/Kernel/FunctionalArea/baseport/rngtest/rngtest.res || true - $PWD/suites/Kernel/FunctionalArea/baseport/smmu/run.sh || true diff --git a/Runner/suites/Connectivity/Bluetooth/run.sh b/Runner/suites/Connectivity/Bluetooth/run.sh old mode 100644 new mode 100755 diff --git a/Runner/suites/Connectivity/Ethernet/run.sh b/Runner/suites/Connectivity/Ethernet/run.sh old mode 100644 new mode 100755 diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/IPA/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/IPA/run.sh index 1d92f6f6..379c9b00 100755 --- a/Runner/suites/Kernel/FunctionalArea/baseport/IPA/run.sh +++ b/Runner/suites/Kernel/FunctionalArea/baseport/IPA/run.sh @@ -20,44 +20,48 @@ if [ -z "$INIT_ENV" ]; then exit 1 fi -# Only source if not already loaded (idempotent) if [ -z "$__INIT_ENV_LOADED" ]; then # shellcheck disable=SC1090 . "$INIT_ENV" fi -# Always source functestlib.sh, using $TOOLS exported by init_env # shellcheck disable=SC1090,SC1091 . "$TOOLS/functestlib.sh" TESTNAME="IPA" test_path=$(find_test_case_by_name "$TESTNAME") cd "$test_path" || exit 1 -# shellcheck disable=SC2034 res_file="./$TESTNAME.res" log_info "-----------------------------------------------------------------------------------------" log_info "-------------------Starting $TESTNAME Testcase----------------------------" log_info "=== Test Initialization ===" -PATH=$(find / -name "ipa.ko" 2>/dev/null) +IPA_MODULE_PATH=$(find_kernel_module "ipa") -# Check if the file was found -if [ -z "$PATH" ]; then - log_error "ipa.ko file not found." - exit 1 +if [ -z "$IPA_MODULE_PATH" ]; then + log_error "ipa.ko module not found in filesystem." + echo "$TESTNAME FAIL" > "$res_file" + exit 1 fi -# Insert the module -TEST=$(/sbin/insmod "$PATH") -log_info "output of insmod $TEST" +log_info "Found ipa.ko at: $IPA_MODULE_PATH" + +if ! load_kernel_module "$IPA_MODULE_PATH"; then + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +fi -if /sbin/lsmod | /bin/grep "ipa"; then - log_info "$(/sbin/lsmod | /bin/grep "ipa")" +if is_module_loaded "ipa"; then + log_info "ipa module is loaded" log_pass "$TESTNAME : Test Passed" echo "$TESTNAME PASS" > "$res_file" else - log_error "rmnet module not running" + log_error "ipa module not listed in lsmod" log_fail "$TESTNAME : Test Failed" echo "$TESTNAME FAIL" > "$res_file" fi + +log_info "=== Cleanup ===" +unload_kernel_module "ipa" true + log_info "-------------------Completed $TESTNAME Testcase----------------------------" diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/Probe_Failure_Check/run.sh old mode 100644 new mode 100755 diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh index 23ac9926..69e50dd8 100755 --- a/Runner/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh +++ b/Runner/suites/Kernel/FunctionalArea/baseport/RMNET/run.sh @@ -20,42 +20,48 @@ if [ -z "$INIT_ENV" ]; then exit 1 fi -# Only source if not already loaded (idempotent) if [ -z "$__INIT_ENV_LOADED" ]; then # shellcheck disable=SC1090 . "$INIT_ENV" fi -# Always source functestlib.sh, using $TOOLS exported by init_env # shellcheck disable=SC1090,SC1091 . "$TOOLS/functestlib.sh" TESTNAME="RMNET" test_path=$(find_test_case_by_name "$TESTNAME") cd "$test_path" || exit 1 -# shellcheck disable=SC2034 res_file="./$TESTNAME.res" log_info "-----------------------------------------------------------------------------------------" log_info "-------------------Starting $TESTNAME Testcase----------------------------" log_info "=== Test Initialization ===" -PATH=$(find / -name "rmnet.ko" 2>/dev/null) +RMNET_MODULE_PATH=$(find_kernel_module "rmnet") -if [ -z "$PATH" ]; then - log_error "rmnet.ko file not found." - exit 1 +if [ -z "$RMNET_MODULE_PATH" ]; then + log_error "rmnet.ko module not found in filesystem." + echo "$TESTNAME FAIL" > "$res_file" + exit 1 fi -TEST=$(/sbin/insmod "$PATH") -log_info "output of insmod $TEST" +log_info "Found rmnet.ko at: $RMNET_MODULE_PATH" + +if ! load_kernel_module "$RMNET_MODULE_PATH"; then + echo "$TESTNAME FAIL" > "$res_file" + exit 1 +fi -if /sbin/lsmod | /bin/grep "rmnet"; then - log_info "$(/sbin/lsmod | /bin/grep "rmnet")" +if is_module_loaded "rmnet"; then + log_info "rmnet module is loaded" log_pass "$TESTNAME : Test Passed" echo "$TESTNAME PASS" > "$res_file" else - log_error "rmnet module not running" + log_error "rmnet module not listed in lsmod" log_fail "$TESTNAME : Test Failed" echo "$TESTNAME FAIL" > "$res_file" fi + +log_info "=== Cleanup ===" +unload_kernel_module "rmnet" true + log_info "-------------------Completed $TESTNAME Testcase----------------------------" diff --git a/Runner/suites/Kernel/FunctionalArea/baseport/shmbridge/run.sh b/Runner/suites/Kernel/FunctionalArea/baseport/shmbridge/run.sh old mode 100644 new mode 100755 diff --git a/Runner/suites/Multimedia/Graphics/KMSCube/run.sh b/Runner/suites/Multimedia/Graphics/KMSCube/run.sh old mode 100644 new mode 100755 diff --git a/Runner/suites/Multimedia/Graphics/weston-simple-egl/run.sh b/Runner/suites/Multimedia/Graphics/weston-simple-egl/run.sh old mode 100644 new mode 100755 diff --git a/Runner/utils/functestlib.sh b/Runner/utils/functestlib.sh index 5080f830..5b1c6203 100755 --- a/Runner/utils/functestlib.sh +++ b/Runner/utils/functestlib.sh @@ -30,6 +30,105 @@ get_kernel_log() { fi } +# Locate a kernel module (.ko) file by name +# Tries to find it under current kernel version first, then all module trees +find_kernel_module() { + module_name="$1" + kver=$(uname -r) + + # Attempt to find module under the currently running kernel + module_path=$(find "/lib/modules/$kver" -name "${module_name}.ko" 2>/dev/null | head -n 1) + + # If not found, search all available module directories + if [ -z "$module_path" ]; then + log_warn "Module not found under /lib/modules/$kver, falling back to full search in /lib/modules/" + module_path=$(find /lib/modules/ -name "${module_name}.ko" 2>/dev/null | head -n 1) + + # Warn if found outside current kernel version + if [ -n "$module_path" ]; then + found_version=$(echo "$module_path" | cut -d'/' -f4) + if [ "$found_version" != "$kver" ]; then + log_warn "Found ${module_name}.ko under $found_version, not under current kernel ($kver)" + fi + fi + fi + echo "$module_path" +} + +# Check if a kernel module is currently loaded +is_module_loaded() { + module_name="$1" + /sbin/lsmod | awk '{print $1}' | grep -q "^${module_name}$" +} + +# Insert a kernel module with optional parameters +load_kernel_module() { + module_path="$1" + shift + params="$*" + + module_name=$(basename "$module_path" .ko) + + if is_module_loaded "$module_name"; then + log_info "Module $module_name is already loaded" + return 0 + fi + + if [ ! -f "$module_path" ]; then + log_error "Module file not found: $module_path" + return 1 + fi + + log_info "Loading module: $module_path $params" + if /sbin/insmod "$module_path" "$params" 2>insmod_err.log; then + log_info "Module $module_name loaded successfully" + return 0 + else + log_error "insmod failed: $(cat insmod_err.log)" + return 1 + fi +} + +# Remove a kernel module by name with optional forced removal +unload_kernel_module() { + module_name="$1" + force="$2" + + if ! is_module_loaded "$module_name"; then + log_info "Module $module_name is not loaded, skipping unload" + return 0 + fi + + log_info "Attempting to remove module: $module_name" + if /sbin/rmmod "$module_name" 2>rmmod_err.log; then + log_info "Module $module_name removed via rmmod" + return 0 + fi + + log_warn "rmmod failed: $(cat rmmod_err.log)" + log_info "Trying modprobe -r as fallback" + if /sbin/modprobe -r "$module_name" 2>modprobe_err.log; then + log_info "Module $module_name removed via modprobe" + return 0 + fi + + log_warn "modprobe -r failed: $(cat modprobe_err.log)" + + if [ "$force" = "true" ]; then + log_warn "Trying forced rmmod: $module_name" + if /sbin/rmmod -f "$module_name" 2>>rmmod_err.log; then + log_info "Module $module_name force removed" + return 0 + else + log_error "Forced rmmod failed: $(cat rmmod_err.log)" + return 1 + fi + fi + + log_error "Unable to unload module: $module_name" + return 1 +} + # --- Dependency check --- check_dependencies() { missing=0