1*4882a593Smuzhiyun#!/bin/bash 2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun# udelay() test script 5*4882a593Smuzhiyun# 6*4882a593Smuzhiyun# Test is executed by writing and reading to /sys/kernel/debug/udelay_test 7*4882a593Smuzhiyun# and exercises a variety of delays to ensure that udelay() is delaying 8*4882a593Smuzhiyun# at least as long as requested (as compared to ktime). 9*4882a593Smuzhiyun# 10*4882a593Smuzhiyun# Copyright (C) 2014 Google, Inc. 11*4882a593Smuzhiyun# 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunMODULE_NAME=udelay_test 14*4882a593SmuzhiyunUDELAY_PATH=/sys/kernel/debug/udelay_test 15*4882a593Smuzhiyun 16*4882a593Smuzhiyunsetup() 17*4882a593Smuzhiyun{ 18*4882a593Smuzhiyun /sbin/modprobe -q $MODULE_NAME 19*4882a593Smuzhiyun tmp_file=`mktemp` 20*4882a593Smuzhiyun} 21*4882a593Smuzhiyun 22*4882a593Smuzhiyuntest_one() 23*4882a593Smuzhiyun{ 24*4882a593Smuzhiyun delay=$1 25*4882a593Smuzhiyun echo $delay > $UDELAY_PATH 26*4882a593Smuzhiyun tee -a $tmp_file < $UDELAY_PATH 27*4882a593Smuzhiyun} 28*4882a593Smuzhiyun 29*4882a593Smuzhiyuncleanup() 30*4882a593Smuzhiyun{ 31*4882a593Smuzhiyun if [ -f $tmp_file ]; then 32*4882a593Smuzhiyun rm $tmp_file 33*4882a593Smuzhiyun fi 34*4882a593Smuzhiyun /sbin/modprobe -q -r $MODULE_NAME 35*4882a593Smuzhiyun} 36*4882a593Smuzhiyun 37*4882a593Smuzhiyuntrap cleanup EXIT 38*4882a593Smuzhiyunsetup 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun# Delay for a variety of times. 41*4882a593Smuzhiyun# 1..200, 200..500 (by 10), 500..2000 (by 100) 42*4882a593Smuzhiyunfor (( delay = 1; delay < 200; delay += 1 )); do 43*4882a593Smuzhiyun test_one $delay 44*4882a593Smuzhiyundone 45*4882a593Smuzhiyunfor (( delay = 200; delay < 500; delay += 10 )); do 46*4882a593Smuzhiyun test_one $delay 47*4882a593Smuzhiyundone 48*4882a593Smuzhiyunfor (( delay = 500; delay <= 2000; delay += 100 )); do 49*4882a593Smuzhiyun test_one $delay 50*4882a593Smuzhiyundone 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun# Search for failures 53*4882a593Smuzhiyuncount=`grep -c FAIL $tmp_file` 54*4882a593Smuzhiyunif [ $? -eq "0" ]; then 55*4882a593Smuzhiyun echo "ERROR: $count delays failed to delay long enough" 56*4882a593Smuzhiyun retcode=1 57*4882a593Smuzhiyunfi 58*4882a593Smuzhiyun 59*4882a593Smuzhiyunexit $retcode 60