1*053f45beSAndroid Build Coastguard Worker#!/bin/bash 2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0 3*053f45beSAndroid Build Coastguard Worker 4*053f45beSAndroid Build Coastguard Worker# Kselftest frmework requirement - SKIP code is 4. 5*053f45beSAndroid Build Coastguard Workerksft_skip=4 6*053f45beSAndroid Build Coastguard Worker 7*053f45beSAndroid Build Coastguard Workerensure_write_succ() 8*053f45beSAndroid Build Coastguard Worker{ 9*053f45beSAndroid Build Coastguard Worker file=$1 10*053f45beSAndroid Build Coastguard Worker content=$2 11*053f45beSAndroid Build Coastguard Worker reason=$3 12*053f45beSAndroid Build Coastguard Worker 13*053f45beSAndroid Build Coastguard Worker if ! echo "$content" > "$file" 14*053f45beSAndroid Build Coastguard Worker then 15*053f45beSAndroid Build Coastguard Worker echo "writing $content to $file failed" 16*053f45beSAndroid Build Coastguard Worker echo "expected success because $reason" 17*053f45beSAndroid Build Coastguard Worker exit 1 18*053f45beSAndroid Build Coastguard Worker fi 19*053f45beSAndroid Build Coastguard Worker} 20*053f45beSAndroid Build Coastguard Worker 21*053f45beSAndroid Build Coastguard Workerensure_write_fail() 22*053f45beSAndroid Build Coastguard Worker{ 23*053f45beSAndroid Build Coastguard Worker file=$1 24*053f45beSAndroid Build Coastguard Worker content=$2 25*053f45beSAndroid Build Coastguard Worker reason=$3 26*053f45beSAndroid Build Coastguard Worker 27*053f45beSAndroid Build Coastguard Worker if echo "$content" > "$file" 28*053f45beSAndroid Build Coastguard Worker then 29*053f45beSAndroid Build Coastguard Worker echo "writing $content to $file succeed ($fail_reason)" 30*053f45beSAndroid Build Coastguard Worker echo "expected failure because $reason" 31*053f45beSAndroid Build Coastguard Worker exit 1 32*053f45beSAndroid Build Coastguard Worker fi 33*053f45beSAndroid Build Coastguard Worker} 34*053f45beSAndroid Build Coastguard Worker 35*053f45beSAndroid Build Coastguard Workerensure_dir() 36*053f45beSAndroid Build Coastguard Worker{ 37*053f45beSAndroid Build Coastguard Worker dir=$1 38*053f45beSAndroid Build Coastguard Worker to_ensure=$2 39*053f45beSAndroid Build Coastguard Worker if [ "$to_ensure" = "exist" ] && [ ! -d "$dir" ] 40*053f45beSAndroid Build Coastguard Worker then 41*053f45beSAndroid Build Coastguard Worker echo "$dir dir is expected but not found" 42*053f45beSAndroid Build Coastguard Worker exit 1 43*053f45beSAndroid Build Coastguard Worker elif [ "$to_ensure" = "not_exist" ] && [ -d "$dir" ] 44*053f45beSAndroid Build Coastguard Worker then 45*053f45beSAndroid Build Coastguard Worker echo "$dir dir is not expected but found" 46*053f45beSAndroid Build Coastguard Worker exit 1 47*053f45beSAndroid Build Coastguard Worker fi 48*053f45beSAndroid Build Coastguard Worker} 49*053f45beSAndroid Build Coastguard Worker 50*053f45beSAndroid Build Coastguard Workerensure_file() 51*053f45beSAndroid Build Coastguard Worker{ 52*053f45beSAndroid Build Coastguard Worker file=$1 53*053f45beSAndroid Build Coastguard Worker to_ensure=$2 54*053f45beSAndroid Build Coastguard Worker permission=$3 55*053f45beSAndroid Build Coastguard Worker if [ "$to_ensure" = "exist" ] 56*053f45beSAndroid Build Coastguard Worker then 57*053f45beSAndroid Build Coastguard Worker if [ ! -f "$file" ] 58*053f45beSAndroid Build Coastguard Worker then 59*053f45beSAndroid Build Coastguard Worker echo "$file is expected but not found" 60*053f45beSAndroid Build Coastguard Worker exit 1 61*053f45beSAndroid Build Coastguard Worker fi 62*053f45beSAndroid Build Coastguard Worker perm=$(stat -c "%a" "$file") 63*053f45beSAndroid Build Coastguard Worker if [ ! "$perm" = "$permission" ] 64*053f45beSAndroid Build Coastguard Worker then 65*053f45beSAndroid Build Coastguard Worker echo "$file permission: expected $permission but $perm" 66*053f45beSAndroid Build Coastguard Worker exit 1 67*053f45beSAndroid Build Coastguard Worker fi 68*053f45beSAndroid Build Coastguard Worker elif [ "$to_ensure" = "not_exist" ] && [ -f "$dir" ] 69*053f45beSAndroid Build Coastguard Worker then 70*053f45beSAndroid Build Coastguard Worker echo "$file is not expected but found" 71*053f45beSAndroid Build Coastguard Worker exit 1 72*053f45beSAndroid Build Coastguard Worker fi 73*053f45beSAndroid Build Coastguard Worker} 74*053f45beSAndroid Build Coastguard Worker 75*053f45beSAndroid Build Coastguard Workertest_range() 76*053f45beSAndroid Build Coastguard Worker{ 77*053f45beSAndroid Build Coastguard Worker range_dir=$1 78*053f45beSAndroid Build Coastguard Worker ensure_dir "$range_dir" "exist" 79*053f45beSAndroid Build Coastguard Worker ensure_file "$range_dir/min" "exist" 600 80*053f45beSAndroid Build Coastguard Worker ensure_file "$range_dir/max" "exist" 600 81*053f45beSAndroid Build Coastguard Worker} 82*053f45beSAndroid Build Coastguard Worker 83*053f45beSAndroid Build Coastguard Workertest_stats() 84*053f45beSAndroid Build Coastguard Worker{ 85*053f45beSAndroid Build Coastguard Worker stats_dir=$1 86*053f45beSAndroid Build Coastguard Worker ensure_dir "$stats_dir" "exist" 87*053f45beSAndroid Build Coastguard Worker for f in nr_tried sz_tried nr_applied sz_applied qt_exceeds 88*053f45beSAndroid Build Coastguard Worker do 89*053f45beSAndroid Build Coastguard Worker ensure_file "$stats_dir/$f" "exist" "400" 90*053f45beSAndroid Build Coastguard Worker done 91*053f45beSAndroid Build Coastguard Worker} 92*053f45beSAndroid Build Coastguard Worker 93*053f45beSAndroid Build Coastguard Workertest_watermarks() 94*053f45beSAndroid Build Coastguard Worker{ 95*053f45beSAndroid Build Coastguard Worker watermarks_dir=$1 96*053f45beSAndroid Build Coastguard Worker ensure_dir "$watermarks_dir" "exist" 97*053f45beSAndroid Build Coastguard Worker ensure_file "$watermarks_dir/metric" "exist" "600" 98*053f45beSAndroid Build Coastguard Worker ensure_file "$watermarks_dir/interval_us" "exist" "600" 99*053f45beSAndroid Build Coastguard Worker ensure_file "$watermarks_dir/high" "exist" "600" 100*053f45beSAndroid Build Coastguard Worker ensure_file "$watermarks_dir/mid" "exist" "600" 101*053f45beSAndroid Build Coastguard Worker ensure_file "$watermarks_dir/low" "exist" "600" 102*053f45beSAndroid Build Coastguard Worker} 103*053f45beSAndroid Build Coastguard Worker 104*053f45beSAndroid Build Coastguard Workertest_weights() 105*053f45beSAndroid Build Coastguard Worker{ 106*053f45beSAndroid Build Coastguard Worker weights_dir=$1 107*053f45beSAndroid Build Coastguard Worker ensure_dir "$weights_dir" "exist" 108*053f45beSAndroid Build Coastguard Worker ensure_file "$weights_dir/sz_permil" "exist" "600" 109*053f45beSAndroid Build Coastguard Worker ensure_file "$weights_dir/nr_accesses_permil" "exist" "600" 110*053f45beSAndroid Build Coastguard Worker ensure_file "$weights_dir/age_permil" "exist" "600" 111*053f45beSAndroid Build Coastguard Worker} 112*053f45beSAndroid Build Coastguard Worker 113*053f45beSAndroid Build Coastguard Workertest_quotas() 114*053f45beSAndroid Build Coastguard Worker{ 115*053f45beSAndroid Build Coastguard Worker quotas_dir=$1 116*053f45beSAndroid Build Coastguard Worker ensure_dir "$quotas_dir" "exist" 117*053f45beSAndroid Build Coastguard Worker ensure_file "$quotas_dir/ms" "exist" 600 118*053f45beSAndroid Build Coastguard Worker ensure_file "$quotas_dir/bytes" "exist" 600 119*053f45beSAndroid Build Coastguard Worker ensure_file "$quotas_dir/reset_interval_ms" "exist" 600 120*053f45beSAndroid Build Coastguard Worker test_weights "$quotas_dir/weights" 121*053f45beSAndroid Build Coastguard Worker} 122*053f45beSAndroid Build Coastguard Worker 123*053f45beSAndroid Build Coastguard Workertest_access_pattern() 124*053f45beSAndroid Build Coastguard Worker{ 125*053f45beSAndroid Build Coastguard Worker access_pattern_dir=$1 126*053f45beSAndroid Build Coastguard Worker ensure_dir "$access_pattern_dir" "exist" 127*053f45beSAndroid Build Coastguard Worker test_range "$access_pattern_dir/age" 128*053f45beSAndroid Build Coastguard Worker test_range "$access_pattern_dir/nr_accesses" 129*053f45beSAndroid Build Coastguard Worker test_range "$access_pattern_dir/sz" 130*053f45beSAndroid Build Coastguard Worker} 131*053f45beSAndroid Build Coastguard Worker 132*053f45beSAndroid Build Coastguard Workertest_scheme() 133*053f45beSAndroid Build Coastguard Worker{ 134*053f45beSAndroid Build Coastguard Worker scheme_dir=$1 135*053f45beSAndroid Build Coastguard Worker ensure_dir "$scheme_dir" "exist" 136*053f45beSAndroid Build Coastguard Worker ensure_file "$scheme_dir/action" "exist" "600" 137*053f45beSAndroid Build Coastguard Worker test_access_pattern "$scheme_dir/access_pattern" 138*053f45beSAndroid Build Coastguard Worker test_quotas "$scheme_dir/quotas" 139*053f45beSAndroid Build Coastguard Worker test_watermarks "$scheme_dir/watermarks" 140*053f45beSAndroid Build Coastguard Worker test_stats "$scheme_dir/stats" 141*053f45beSAndroid Build Coastguard Worker} 142*053f45beSAndroid Build Coastguard Worker 143*053f45beSAndroid Build Coastguard Workertest_schemes() 144*053f45beSAndroid Build Coastguard Worker{ 145*053f45beSAndroid Build Coastguard Worker schemes_dir=$1 146*053f45beSAndroid Build Coastguard Worker ensure_dir "$schemes_dir" "exist" 147*053f45beSAndroid Build Coastguard Worker ensure_file "$schemes_dir/nr_schemes" "exist" 600 148*053f45beSAndroid Build Coastguard Worker 149*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$schemes_dir/nr_schemes" "1" "valid input" 150*053f45beSAndroid Build Coastguard Worker test_scheme "$schemes_dir/0" 151*053f45beSAndroid Build Coastguard Worker 152*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$schemes_dir/nr_schemes" "2" "valid input" 153*053f45beSAndroid Build Coastguard Worker test_scheme "$schemes_dir/0" 154*053f45beSAndroid Build Coastguard Worker test_scheme "$schemes_dir/1" 155*053f45beSAndroid Build Coastguard Worker 156*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$schemes_dir/nr_schemes" "0" "valid input" 157*053f45beSAndroid Build Coastguard Worker ensure_dir "$schemes_dir/0" "not_exist" 158*053f45beSAndroid Build Coastguard Worker ensure_dir "$schemes_dir/1" "not_exist" 159*053f45beSAndroid Build Coastguard Worker} 160*053f45beSAndroid Build Coastguard Worker 161*053f45beSAndroid Build Coastguard Workertest_region() 162*053f45beSAndroid Build Coastguard Worker{ 163*053f45beSAndroid Build Coastguard Worker region_dir=$1 164*053f45beSAndroid Build Coastguard Worker ensure_dir "$region_dir" "exist" 165*053f45beSAndroid Build Coastguard Worker ensure_file "$region_dir/start" "exist" 600 166*053f45beSAndroid Build Coastguard Worker ensure_file "$region_dir/end" "exist" 600 167*053f45beSAndroid Build Coastguard Worker} 168*053f45beSAndroid Build Coastguard Worker 169*053f45beSAndroid Build Coastguard Workertest_regions() 170*053f45beSAndroid Build Coastguard Worker{ 171*053f45beSAndroid Build Coastguard Worker regions_dir=$1 172*053f45beSAndroid Build Coastguard Worker ensure_dir "$regions_dir" "exist" 173*053f45beSAndroid Build Coastguard Worker ensure_file "$regions_dir/nr_regions" "exist" 600 174*053f45beSAndroid Build Coastguard Worker 175*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$regions_dir/nr_regions" "1" "valid input" 176*053f45beSAndroid Build Coastguard Worker test_region "$regions_dir/0" 177*053f45beSAndroid Build Coastguard Worker 178*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$regions_dir/nr_regions" "2" "valid input" 179*053f45beSAndroid Build Coastguard Worker test_region "$regions_dir/0" 180*053f45beSAndroid Build Coastguard Worker test_region "$regions_dir/1" 181*053f45beSAndroid Build Coastguard Worker 182*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$regions_dir/nr_regions" "0" "valid input" 183*053f45beSAndroid Build Coastguard Worker ensure_dir "$regions_dir/0" "not_exist" 184*053f45beSAndroid Build Coastguard Worker ensure_dir "$regions_dir/1" "not_exist" 185*053f45beSAndroid Build Coastguard Worker} 186*053f45beSAndroid Build Coastguard Worker 187*053f45beSAndroid Build Coastguard Workertest_target() 188*053f45beSAndroid Build Coastguard Worker{ 189*053f45beSAndroid Build Coastguard Worker target_dir=$1 190*053f45beSAndroid Build Coastguard Worker ensure_dir "$target_dir" "exist" 191*053f45beSAndroid Build Coastguard Worker ensure_file "$target_dir/pid_target" "exist" "600" 192*053f45beSAndroid Build Coastguard Worker test_regions "$target_dir/regions" 193*053f45beSAndroid Build Coastguard Worker} 194*053f45beSAndroid Build Coastguard Worker 195*053f45beSAndroid Build Coastguard Workertest_targets() 196*053f45beSAndroid Build Coastguard Worker{ 197*053f45beSAndroid Build Coastguard Worker targets_dir=$1 198*053f45beSAndroid Build Coastguard Worker ensure_dir "$targets_dir" "exist" 199*053f45beSAndroid Build Coastguard Worker ensure_file "$targets_dir/nr_targets" "exist" 600 200*053f45beSAndroid Build Coastguard Worker 201*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$targets_dir/nr_targets" "1" "valid input" 202*053f45beSAndroid Build Coastguard Worker test_target "$targets_dir/0" 203*053f45beSAndroid Build Coastguard Worker 204*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$targets_dir/nr_targets" "2" "valid input" 205*053f45beSAndroid Build Coastguard Worker test_target "$targets_dir/0" 206*053f45beSAndroid Build Coastguard Worker test_target "$targets_dir/1" 207*053f45beSAndroid Build Coastguard Worker 208*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$targets_dir/nr_targets" "0" "valid input" 209*053f45beSAndroid Build Coastguard Worker ensure_dir "$targets_dir/0" "not_exist" 210*053f45beSAndroid Build Coastguard Worker ensure_dir "$targets_dir/1" "not_exist" 211*053f45beSAndroid Build Coastguard Worker} 212*053f45beSAndroid Build Coastguard Worker 213*053f45beSAndroid Build Coastguard Workertest_intervals() 214*053f45beSAndroid Build Coastguard Worker{ 215*053f45beSAndroid Build Coastguard Worker intervals_dir=$1 216*053f45beSAndroid Build Coastguard Worker ensure_dir "$intervals_dir" "exist" 217*053f45beSAndroid Build Coastguard Worker ensure_file "$intervals_dir/aggr_us" "exist" "600" 218*053f45beSAndroid Build Coastguard Worker ensure_file "$intervals_dir/sample_us" "exist" "600" 219*053f45beSAndroid Build Coastguard Worker ensure_file "$intervals_dir/update_us" "exist" "600" 220*053f45beSAndroid Build Coastguard Worker} 221*053f45beSAndroid Build Coastguard Worker 222*053f45beSAndroid Build Coastguard Workertest_monitoring_attrs() 223*053f45beSAndroid Build Coastguard Worker{ 224*053f45beSAndroid Build Coastguard Worker monitoring_attrs_dir=$1 225*053f45beSAndroid Build Coastguard Worker ensure_dir "$monitoring_attrs_dir" "exist" 226*053f45beSAndroid Build Coastguard Worker test_intervals "$monitoring_attrs_dir/intervals" 227*053f45beSAndroid Build Coastguard Worker test_range "$monitoring_attrs_dir/nr_regions" 228*053f45beSAndroid Build Coastguard Worker} 229*053f45beSAndroid Build Coastguard Worker 230*053f45beSAndroid Build Coastguard Workertest_context() 231*053f45beSAndroid Build Coastguard Worker{ 232*053f45beSAndroid Build Coastguard Worker context_dir=$1 233*053f45beSAndroid Build Coastguard Worker ensure_dir "$context_dir" "exist" 234*053f45beSAndroid Build Coastguard Worker ensure_file "$context_dir/avail_operations" "exit" 400 235*053f45beSAndroid Build Coastguard Worker ensure_file "$context_dir/operations" "exist" 600 236*053f45beSAndroid Build Coastguard Worker test_monitoring_attrs "$context_dir/monitoring_attrs" 237*053f45beSAndroid Build Coastguard Worker test_targets "$context_dir/targets" 238*053f45beSAndroid Build Coastguard Worker test_schemes "$context_dir/schemes" 239*053f45beSAndroid Build Coastguard Worker} 240*053f45beSAndroid Build Coastguard Worker 241*053f45beSAndroid Build Coastguard Workertest_contexts() 242*053f45beSAndroid Build Coastguard Worker{ 243*053f45beSAndroid Build Coastguard Worker contexts_dir=$1 244*053f45beSAndroid Build Coastguard Worker ensure_dir "$contexts_dir" "exist" 245*053f45beSAndroid Build Coastguard Worker ensure_file "$contexts_dir/nr_contexts" "exist" 600 246*053f45beSAndroid Build Coastguard Worker 247*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$contexts_dir/nr_contexts" "1" "valid input" 248*053f45beSAndroid Build Coastguard Worker test_context "$contexts_dir/0" 249*053f45beSAndroid Build Coastguard Worker 250*053f45beSAndroid Build Coastguard Worker ensure_write_fail "$contexts_dir/nr_contexts" "2" "only 0/1 are supported" 251*053f45beSAndroid Build Coastguard Worker test_context "$contexts_dir/0" 252*053f45beSAndroid Build Coastguard Worker 253*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$contexts_dir/nr_contexts" "0" "valid input" 254*053f45beSAndroid Build Coastguard Worker ensure_dir "$contexts_dir/0" "not_exist" 255*053f45beSAndroid Build Coastguard Worker} 256*053f45beSAndroid Build Coastguard Worker 257*053f45beSAndroid Build Coastguard Workertest_kdamond() 258*053f45beSAndroid Build Coastguard Worker{ 259*053f45beSAndroid Build Coastguard Worker kdamond_dir=$1 260*053f45beSAndroid Build Coastguard Worker ensure_dir "$kdamond_dir" "exist" 261*053f45beSAndroid Build Coastguard Worker ensure_file "$kdamond_dir/state" "exist" "600" 262*053f45beSAndroid Build Coastguard Worker ensure_file "$kdamond_dir/pid" "exist" 400 263*053f45beSAndroid Build Coastguard Worker test_contexts "$kdamond_dir/contexts" 264*053f45beSAndroid Build Coastguard Worker} 265*053f45beSAndroid Build Coastguard Worker 266*053f45beSAndroid Build Coastguard Workertest_kdamonds() 267*053f45beSAndroid Build Coastguard Worker{ 268*053f45beSAndroid Build Coastguard Worker kdamonds_dir=$1 269*053f45beSAndroid Build Coastguard Worker ensure_dir "$kdamonds_dir" "exist" 270*053f45beSAndroid Build Coastguard Worker 271*053f45beSAndroid Build Coastguard Worker ensure_file "$kdamonds_dir/nr_kdamonds" "exist" "600" 272*053f45beSAndroid Build Coastguard Worker 273*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$kdamonds_dir/nr_kdamonds" "1" "valid input" 274*053f45beSAndroid Build Coastguard Worker test_kdamond "$kdamonds_dir/0" 275*053f45beSAndroid Build Coastguard Worker 276*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$kdamonds_dir/nr_kdamonds" "2" "valid input" 277*053f45beSAndroid Build Coastguard Worker test_kdamond "$kdamonds_dir/0" 278*053f45beSAndroid Build Coastguard Worker test_kdamond "$kdamonds_dir/1" 279*053f45beSAndroid Build Coastguard Worker 280*053f45beSAndroid Build Coastguard Worker ensure_write_succ "$kdamonds_dir/nr_kdamonds" "0" "valid input" 281*053f45beSAndroid Build Coastguard Worker ensure_dir "$kdamonds_dir/0" "not_exist" 282*053f45beSAndroid Build Coastguard Worker ensure_dir "$kdamonds_dir/1" "not_exist" 283*053f45beSAndroid Build Coastguard Worker} 284*053f45beSAndroid Build Coastguard Worker 285*053f45beSAndroid Build Coastguard Workertest_damon_sysfs() 286*053f45beSAndroid Build Coastguard Worker{ 287*053f45beSAndroid Build Coastguard Worker damon_sysfs=$1 288*053f45beSAndroid Build Coastguard Worker if [ ! -d "$damon_sysfs" ] 289*053f45beSAndroid Build Coastguard Worker then 290*053f45beSAndroid Build Coastguard Worker echo "$damon_sysfs not found" 291*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 292*053f45beSAndroid Build Coastguard Worker fi 293*053f45beSAndroid Build Coastguard Worker 294*053f45beSAndroid Build Coastguard Worker test_kdamonds "$damon_sysfs/kdamonds" 295*053f45beSAndroid Build Coastguard Worker} 296*053f45beSAndroid Build Coastguard Worker 297*053f45beSAndroid Build Coastguard Workercheck_dependencies() 298*053f45beSAndroid Build Coastguard Worker{ 299*053f45beSAndroid Build Coastguard Worker if [ $EUID -ne 0 ] 300*053f45beSAndroid Build Coastguard Worker then 301*053f45beSAndroid Build Coastguard Worker echo "Run as root" 302*053f45beSAndroid Build Coastguard Worker exit $ksft_skip 303*053f45beSAndroid Build Coastguard Worker fi 304*053f45beSAndroid Build Coastguard Worker} 305*053f45beSAndroid Build Coastguard Worker 306*053f45beSAndroid Build Coastguard Workercheck_dependencies 307*053f45beSAndroid Build Coastguard Workertest_damon_sysfs "/sys/kernel/mm/damon/admin" 308