1 #!/bin/bash 1 #!/bin/bash 2 # SPDX-License-Identifier: GPL-2.0-or-later << 3 # Copyright (c) 2016 Microsemi. All Rights Res 2 # Copyright (c) 2016 Microsemi. All Rights Reserved. 4 # 3 # >> 4 # This program is free software; you can redistribute it and/or >> 5 # modify it under the terms of the GNU General Public License as >> 6 # published by the Free Software Foundation; either version 2 of >> 7 # the License, or (at your option) any later version. >> 8 # >> 9 # This program is distributed in the hope that it would be useful, >> 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of >> 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> 12 # GNU General Public License for more details. >> 13 # 5 # Author: Logan Gunthorpe <logang@deltatee.com> 14 # Author: Logan Gunthorpe <logang@deltatee.com> 6 15 7 REMOTE_HOST= 16 REMOTE_HOST= 8 LIST_DEVS=FALSE 17 LIST_DEVS=FALSE 9 18 10 DEBUGFS=${DEBUGFS-/sys/kernel/debug} 19 DEBUGFS=${DEBUGFS-/sys/kernel/debug} 11 20 12 PERF_RUN_ORDER=32 21 PERF_RUN_ORDER=32 13 MAX_MW_SIZE=0 22 MAX_MW_SIZE=0 14 RUN_DMA_TESTS= 23 RUN_DMA_TESTS= 15 DONT_CLEANUP= 24 DONT_CLEANUP= 16 MW_SIZE=65536 25 MW_SIZE=65536 17 26 18 function show_help() 27 function show_help() 19 { 28 { 20 echo "Usage: $0 [OPTIONS] LOCAL_DEV RE 29 echo "Usage: $0 [OPTIONS] LOCAL_DEV REMOTE_DEV" 21 echo "Run tests on a pair of NTB endpo 30 echo "Run tests on a pair of NTB endpoints." 22 echo 31 echo 23 echo "If the NTB device loops back to 32 echo "If the NTB device loops back to the same host then," 24 echo "just specifying the two PCI ids 33 echo "just specifying the two PCI ids on the command line is" 25 echo "sufficient. Otherwise, if the NT 34 echo "sufficient. Otherwise, if the NTB link spans two hosts" 26 echo "use the -r option to specify the 35 echo "use the -r option to specify the hostname for the remote" 27 echo "device. SSH will then be used to 36 echo "device. SSH will then be used to test the remote side." 28 echo "An SSH key between the root user 37 echo "An SSH key between the root users of the host would then" 29 echo "be highly recommended." 38 echo "be highly recommended." 30 echo 39 echo 31 echo "Options:" 40 echo "Options:" 32 echo " -C don't cleanup 41 echo " -C don't cleanup ntb modules on exit" >> 42 echo " -d run dma tests" 33 echo " -h show this help 43 echo " -h show this help message" 34 echo " -l list available 44 echo " -l list available local and remote PCI ids" 35 echo " -r REMOTE_HOST specify the re 45 echo " -r REMOTE_HOST specify the remote's hostname to connect" 36 echo " to for the tes !! 46 echo " to for the test (using ssh)" 37 echo " -m MW_SIZE memory window !! 47 echo " -p NUM ntb_perf run order (default: $PERF_RUN_ORDER)" 38 echo " (default: $MW_ !! 48 echo " -w max_mw_size maxmium memory window size" 39 echo " -d run dma tests << 40 echo " -p ORDER total data ord << 41 echo " (default: $PER << 42 echo " -w MAX_MW_SIZE maxmium memory << 43 echo 49 echo 44 } 50 } 45 51 46 function parse_args() 52 function parse_args() 47 { 53 { 48 OPTIND=0 54 OPTIND=0 49 while getopts "b:Cdhlm:r:p:w:" opt; do !! 55 while getopts "Cdhlm:r:p:w:" opt; do 50 case "$opt" in 56 case "$opt" in 51 C) DONT_CLEANUP=1 ;; 57 C) DONT_CLEANUP=1 ;; 52 d) RUN_DMA_TESTS=1 ;; 58 d) RUN_DMA_TESTS=1 ;; 53 h) show_help; exit 0 ;; 59 h) show_help; exit 0 ;; 54 l) LIST_DEVS=TRUE ;; 60 l) LIST_DEVS=TRUE ;; 55 m) MW_SIZE=${OPTARG} ;; 61 m) MW_SIZE=${OPTARG} ;; 56 r) REMOTE_HOST=${OPTARG} ;; 62 r) REMOTE_HOST=${OPTARG} ;; 57 p) PERF_RUN_ORDER=${OPTARG} ; 63 p) PERF_RUN_ORDER=${OPTARG} ;; 58 w) MAX_MW_SIZE=${OPTARG} ;; 64 w) MAX_MW_SIZE=${OPTARG} ;; 59 \?) 65 \?) 60 echo "Invalid option: -$OP 66 echo "Invalid option: -$OPTARG" >&2 61 exit 1 67 exit 1 62 ;; 68 ;; 63 esac 69 esac 64 done 70 done 65 } 71 } 66 72 67 parse_args "$@" 73 parse_args "$@" 68 shift $((OPTIND-1)) 74 shift $((OPTIND-1)) 69 LOCAL_DEV=$1 75 LOCAL_DEV=$1 70 shift 76 shift 71 parse_args "$@" 77 parse_args "$@" 72 shift $((OPTIND-1)) 78 shift $((OPTIND-1)) 73 REMOTE_DEV=$1 79 REMOTE_DEV=$1 74 shift 80 shift 75 parse_args "$@" 81 parse_args "$@" 76 82 77 set -e 83 set -e 78 84 79 function _modprobe() 85 function _modprobe() 80 { 86 { 81 modprobe "$@" || return 1 !! 87 modprobe "$@" 82 << 83 if [[ "$REMOTE_HOST" != "" ]]; then << 84 ssh "$REMOTE_HOST" modprobe "$ << 85 fi << 86 } 88 } 87 89 88 function split_remote() 90 function split_remote() 89 { 91 { 90 VPATH=$1 92 VPATH=$1 91 REMOTE= 93 REMOTE= 92 94 93 if [[ "$VPATH" == *":/"* ]]; then 95 if [[ "$VPATH" == *":/"* ]]; then 94 REMOTE=${VPATH%%:*} 96 REMOTE=${VPATH%%:*} 95 VPATH=${VPATH#*:} 97 VPATH=${VPATH#*:} 96 fi 98 fi 97 } 99 } 98 100 99 function read_file() 101 function read_file() 100 { 102 { 101 split_remote $1 103 split_remote $1 102 if [[ "$REMOTE" != "" ]]; then 104 if [[ "$REMOTE" != "" ]]; then 103 ssh "$REMOTE" cat "$VPATH" 105 ssh "$REMOTE" cat "$VPATH" 104 else 106 else 105 cat "$VPATH" 107 cat "$VPATH" 106 fi 108 fi 107 } 109 } 108 110 109 function write_file() 111 function write_file() 110 { 112 { 111 split_remote $2 113 split_remote $2 112 VALUE=$1 114 VALUE=$1 113 115 114 if [[ "$REMOTE" != "" ]]; then 116 if [[ "$REMOTE" != "" ]]; then 115 ssh "$REMOTE" "echo \"$VALUE\" 117 ssh "$REMOTE" "echo \"$VALUE\" > \"$VPATH\"" 116 else 118 else 117 echo "$VALUE" > "$VPATH" 119 echo "$VALUE" > "$VPATH" 118 fi 120 fi 119 } 121 } 120 122 121 function check_file() << 122 { << 123 split_remote $1 << 124 << 125 if [[ "$REMOTE" != "" ]]; then << 126 ssh "$REMOTE" "[[ -e ${VPATH} << 127 else << 128 [[ -e ${VPATH} ]] << 129 fi << 130 } << 131 << 132 function subdirname() << 133 { << 134 echo $(basename $(dirname $1)) 2> /dev << 135 } << 136 << 137 function find_pidx() << 138 { << 139 PORT=$1 << 140 PPATH=$2 << 141 << 142 for ((i = 0; i < 64; i++)); do << 143 PEER_DIR="$PPATH/peer$i" << 144 << 145 check_file ${PEER_DIR} || brea << 146 << 147 PEER_PORT=$(read_file "${PEER_ << 148 if [[ ${PORT} -eq $PEER_PORT ] << 149 echo $i << 150 return 0 << 151 fi << 152 done << 153 << 154 return 1 << 155 } << 156 << 157 function port_test() << 158 { << 159 LOC=$1 << 160 REM=$2 << 161 << 162 echo "Running port tests on: $(basenam << 163 << 164 LOCAL_PORT=$(read_file "$LOC/port") << 165 REMOTE_PORT=$(read_file "$REM/port") << 166 << 167 LOCAL_PIDX=$(find_pidx ${REMOTE_PORT} << 168 REMOTE_PIDX=$(find_pidx ${LOCAL_PORT} << 169 << 170 echo "Local port ${LOCAL_PORT} with in << 171 echo "Peer port ${REMOTE_PORT} with in << 172 << 173 echo " Passed" << 174 } << 175 << 176 function link_test() 123 function link_test() 177 { 124 { 178 LOC=$1 125 LOC=$1 179 REM=$2 126 REM=$2 180 EXP=0 127 EXP=0 181 128 182 echo "Running link tests on: $(subdirn !! 129 echo "Running link tests on: $(basename $LOC) / $(basename $REM)" 183 130 184 if ! write_file "N" "$LOC/../link" 2> !! 131 if ! write_file "N" "$LOC/link" 2> /dev/null; then 185 echo " Unsupported" 132 echo " Unsupported" 186 return 133 return 187 fi 134 fi 188 135 189 write_file "N" "$LOC/link_event" 136 write_file "N" "$LOC/link_event" 190 137 191 if [[ $(read_file "$REM/link") != "N" 138 if [[ $(read_file "$REM/link") != "N" ]]; then 192 echo "Expected link to be down !! 139 echo "Expected remote link to be down in $REM/link" >&2 193 exit -1 140 exit -1 194 fi 141 fi 195 142 196 write_file "Y" "$LOC/../link" !! 143 write_file "Y" "$LOC/link" >> 144 write_file "Y" "$LOC/link_event" 197 145 198 echo " Passed" 146 echo " Passed" 199 } 147 } 200 148 201 function doorbell_test() 149 function doorbell_test() 202 { 150 { 203 LOC=$1 151 LOC=$1 204 REM=$2 152 REM=$2 205 EXP=0 153 EXP=0 206 154 207 echo "Running db tests on: $(basename 155 echo "Running db tests on: $(basename $LOC) / $(basename $REM)" 208 156 209 DB_VALID_MASK=$(read_file "$LOC/db_val !! 157 write_file "c 0xFFFFFFFF" "$REM/db" 210 << 211 write_file "c $DB_VALID_MASK" "$REM/db << 212 158 213 for ((i = 0; i < 64; i++)); do !! 159 for ((i=1; i <= 8; i++)); do 214 DB=$(read_file "$REM/db") !! 160 let DB=$(read_file "$REM/db") || true 215 if [[ "$DB" -ne "$EXP" ]]; the !! 161 if [[ "$DB" != "$EXP" ]]; then 216 echo "Doorbell doesn't 162 echo "Doorbell doesn't match expected value $EXP " \ 217 "in $REM/db" >&2 163 "in $REM/db" >&2 218 exit -1 164 exit -1 219 fi 165 fi 220 166 221 let "MASK = (1 << $i) & $DB_VA !! 167 let "MASK=1 << ($i-1)" || true 222 let "EXP = $EXP | $MASK" || tr !! 168 let "EXP=$EXP | $MASK" || true 223 << 224 write_file "s $MASK" "$LOC/pee 169 write_file "s $MASK" "$LOC/peer_db" 225 done 170 done 226 171 227 write_file "c $DB_VALID_MASK" "$REM/db << 228 write_file $DB_VALID_MASK "$REM/db_eve << 229 write_file "s $DB_VALID_MASK" "$REM/db << 230 << 231 write_file "c $DB_VALID_MASK" "$REM/db << 232 << 233 echo " Passed" 172 echo " Passed" 234 } 173 } 235 174 236 function get_files_count() !! 175 function read_spad() 237 { 176 { 238 NAME=$1 !! 177 VPATH=$1 239 LOC=$2 !! 178 IDX=$2 240 << 241 split_remote $LOC << 242 179 243 if [[ "$REMOTE" == "" ]]; then !! 180 ROW=($(read_file "$VPATH" | grep -e "^$IDX")) 244 echo $(ls -1 "$VPATH"/${NAME}* !! 181 let VAL=${ROW[1]} || true 245 else !! 182 echo $VAL 246 echo $(ssh "$REMOTE" "ls -1 \" << 247 wc -l" 2> /dev/null) << 248 fi << 249 } 183 } 250 184 251 function scratchpad_test() 185 function scratchpad_test() 252 { 186 { 253 LOC=$1 187 LOC=$1 254 REM=$2 188 REM=$2 >> 189 CNT=$(read_file "$LOC/spad" | wc -l) 255 190 256 echo "Running spad tests on: $(subdirn !! 191 echo "Running spad tests on: $(basename $LOC) / $(basename $REM)" 257 << 258 CNT=$(get_files_count "spad" "$LOC") << 259 << 260 if [[ $CNT -eq 0 ]]; then << 261 echo " Unsupported" << 262 return << 263 fi << 264 192 265 for ((i = 0; i < $CNT; i++)); do 193 for ((i = 0; i < $CNT; i++)); do 266 VAL=$RANDOM 194 VAL=$RANDOM 267 write_file "$VAL" "$LOC/spad$i !! 195 write_file "$i $VAL" "$LOC/peer_spad" 268 RVAL=$(read_file "$REM/../spad !! 196 RVAL=$(read_spad "$REM/spad" $i) 269 197 270 if [[ "$VAL" -ne "$RVAL" ]]; t !! 198 if [[ "$VAL" != "$RVAL" ]]; then 271 echo "Scratchpad $i va !! 199 echo "Scratchpad doesn't match expected value $VAL " \ >> 200 "in $REM/spad, got $RVAL" >&2 272 exit -1 201 exit -1 273 fi 202 fi 274 done << 275 203 276 echo " Passed" << 277 } << 278 << 279 function message_test() << 280 { << 281 LOC=$1 << 282 REM=$2 << 283 << 284 echo "Running msg tests on: $(subdirna << 285 << 286 CNT=$(get_files_count "msg" "$LOC") << 287 << 288 if [[ $CNT -eq 0 ]]; then << 289 echo " Unsupported" << 290 return << 291 fi << 292 << 293 MSG_OUTBITS_MASK=$(read_file "$LOC/../ << 294 MSG_INBITS_MASK=$(read_file "$REM/../m << 295 << 296 write_file "c $MSG_OUTBITS_MASK" "$LOC << 297 write_file "c $MSG_INBITS_MASK" "$REM/ << 298 << 299 for ((i = 0; i < $CNT; i++)); do << 300 VAL=$RANDOM << 301 write_file "$VAL" "$LOC/msg$i" << 302 RVAL=$(read_file "$REM/../msg$ << 303 << 304 if [[ "$VAL" -ne "${RVAL%%<-*} << 305 echo "Message $i value << 306 exit -1 << 307 fi << 308 done 204 done 309 205 310 echo " Passed" 206 echo " Passed" 311 } 207 } 312 208 313 function get_number() << 314 { << 315 KEY=$1 << 316 << 317 sed -n "s/^\(${KEY}\)[ \t]*\(0x[0-9a-f << 318 } << 319 << 320 function mw_alloc() << 321 { << 322 IDX=$1 << 323 LOC=$2 << 324 REM=$3 << 325 << 326 write_file $MW_SIZE "$LOC/mw_trans$IDX << 327 << 328 INB_MW=$(read_file "$LOC/mw_trans$IDX" << 329 MW_ALIGNED_SIZE=$(echo "$INB_MW" | get << 330 MW_DMA_ADDR=$(echo "$INB_MW" | get_num << 331 << 332 write_file "$MW_DMA_ADDR:$(($MW_ALIGNE << 333 << 334 if [[ $MW_SIZE -ne $MW_ALIGNED_SIZE ]] << 335 echo "MW $IDX size aligned to << 336 fi << 337 } << 338 << 339 function write_mw() 209 function write_mw() 340 { 210 { 341 split_remote $2 211 split_remote $2 342 212 343 if [[ "$REMOTE" != "" ]]; then 213 if [[ "$REMOTE" != "" ]]; then 344 ssh "$REMOTE" \ 214 ssh "$REMOTE" \ 345 dd if=/dev/urandom "of 215 dd if=/dev/urandom "of=$VPATH" 2> /dev/null || true 346 else 216 else 347 dd if=/dev/urandom "of=$VPATH" 217 dd if=/dev/urandom "of=$VPATH" 2> /dev/null || true 348 fi 218 fi 349 } 219 } 350 220 351 function mw_check() !! 221 function mw_test() 352 { 222 { 353 IDX=$1 223 IDX=$1 354 LOC=$2 224 LOC=$2 355 REM=$3 225 REM=$3 356 226 357 write_mw "$LOC/mw$IDX" !! 227 echo "Running $IDX tests on: $(basename $LOC) / $(basename $REM)" >> 228 >> 229 write_mw "$LOC/$IDX" 358 230 359 split_remote "$LOC/mw$IDX" !! 231 split_remote "$LOC/$IDX" 360 if [[ "$REMOTE" == "" ]]; then 232 if [[ "$REMOTE" == "" ]]; then 361 A=$VPATH 233 A=$VPATH 362 else 234 else 363 A=/tmp/ntb_test.$$.A 235 A=/tmp/ntb_test.$$.A 364 ssh "$REMOTE" cat "$VPATH" > " 236 ssh "$REMOTE" cat "$VPATH" > "$A" 365 fi 237 fi 366 238 367 split_remote "$REM/peer_mw$IDX" !! 239 split_remote "$REM/peer_$IDX" 368 if [[ "$REMOTE" == "" ]]; then 240 if [[ "$REMOTE" == "" ]]; then 369 B=$VPATH 241 B=$VPATH 370 else 242 else 371 B=/tmp/ntb_test.$$.B 243 B=/tmp/ntb_test.$$.B 372 ssh "$REMOTE" cat "$VPATH" > " 244 ssh "$REMOTE" cat "$VPATH" > "$B" 373 fi 245 fi 374 246 375 cmp -n $MW_ALIGNED_SIZE "$A" "$B" !! 247 cmp -n $MW_SIZE "$A" "$B" 376 if [[ $? != 0 ]]; then 248 if [[ $? != 0 ]]; then 377 echo "Memory window $MW did no 249 echo "Memory window $MW did not match!" >&2 378 fi 250 fi 379 251 380 if [[ "$A" == "/tmp/*" ]]; then 252 if [[ "$A" == "/tmp/*" ]]; then 381 rm "$A" 253 rm "$A" 382 fi 254 fi 383 255 384 if [[ "$B" == "/tmp/*" ]]; then 256 if [[ "$B" == "/tmp/*" ]]; then 385 rm "$B" 257 rm "$B" 386 fi 258 fi 387 } << 388 << 389 function mw_free() << 390 { << 391 IDX=$1 << 392 LOC=$2 << 393 REM=$3 << 394 << 395 write_file "$MW_DMA_ADDR:0" "$REM/peer << 396 << 397 write_file 0 "$LOC/mw_trans$IDX" << 398 } << 399 << 400 function mw_test() << 401 { << 402 LOC=$1 << 403 REM=$2 << 404 << 405 CNT=$(get_files_count "mw_trans" "$LOC << 406 << 407 for ((i = 0; i < $CNT; i++)); do << 408 echo "Running mw$i tests on: $ << 409 "$(subdirname $REM)" << 410 << 411 mw_alloc $i $LOC $REM << 412 << 413 mw_check $i $LOC $REM << 414 << 415 mw_free $i $LOC $REM << 416 << 417 echo " Passed" << 418 done << 419 259 >> 260 echo " Passed" 420 } 261 } 421 262 422 function pingpong_test() 263 function pingpong_test() 423 { 264 { 424 LOC=$1 265 LOC=$1 425 REM=$2 266 REM=$2 426 267 427 echo "Running ping pong tests on: $(ba 268 echo "Running ping pong tests on: $(basename $LOC) / $(basename $REM)" 428 269 429 LOC_START=$(read_file "$LOC/count") !! 270 LOC_START=$(read_file $LOC/count) 430 REM_START=$(read_file "$REM/count") !! 271 REM_START=$(read_file $REM/count) 431 272 432 sleep 7 273 sleep 7 433 274 434 LOC_END=$(read_file "$LOC/count") !! 275 LOC_END=$(read_file $LOC/count) 435 REM_END=$(read_file "$REM/count") !! 276 REM_END=$(read_file $REM/count) 436 277 437 if [[ $LOC_START == $LOC_END ]] || [[ 278 if [[ $LOC_START == $LOC_END ]] || [[ $REM_START == $REM_END ]]; then 438 echo "Ping pong counter not in 279 echo "Ping pong counter not incrementing!" >&2 439 exit 1 280 exit 1 440 fi 281 fi 441 282 442 echo " Passed" 283 echo " Passed" 443 } 284 } 444 285 445 function msi_test() << 446 { << 447 LOC=$1 << 448 REM=$2 << 449 << 450 write_file 1 $LOC/ready << 451 << 452 echo "Running MSI interrupt tests on: << 453 << 454 CNT=$(read_file "$LOC/count") << 455 for ((i = 0; i < $CNT; i++)); do << 456 START=$(read_file $REM/../irq$ << 457 write_file $i $LOC/trigger << 458 END=$(read_file $REM/../irq${i << 459 << 460 if [[ $(($END - $START)) != 1 << 461 echo "MSI did not trig << 462 exit 1 << 463 fi << 464 done << 465 << 466 echo " Passed" << 467 } << 468 << 469 function perf_test() 286 function perf_test() 470 { 287 { 471 USE_DMA=$1 288 USE_DMA=$1 472 289 473 if [[ $USE_DMA == "1" ]]; then 290 if [[ $USE_DMA == "1" ]]; then 474 WITH="with" 291 WITH="with" 475 else 292 else 476 WITH="without" 293 WITH="without" 477 fi 294 fi 478 295 479 _modprobe ntb_perf total_order=$PERF_R !! 296 _modprobe ntb_perf run_order=$PERF_RUN_ORDER \ 480 max_mw_size=$MAX_MW_SIZE use_d 297 max_mw_size=$MAX_MW_SIZE use_dma=$USE_DMA 481 298 482 echo "Running local perf test $WITH DM 299 echo "Running local perf test $WITH DMA" 483 write_file "$LOCAL_PIDX" "$LOCAL_PERF/ !! 300 write_file "" $LOCAL_PERF/run 484 echo -n " " 301 echo -n " " 485 read_file "$LOCAL_PERF/run" !! 302 read_file $LOCAL_PERF/run 486 echo " Passed" 303 echo " Passed" 487 304 488 echo "Running remote perf test $WITH D 305 echo "Running remote perf test $WITH DMA" 489 write_file "$REMOTE_PIDX" "$REMOTE_PER !! 306 write_file "" $REMOTE_PERF/run 490 echo -n " " 307 echo -n " " 491 read_file "$REMOTE_PERF/run" !! 308 read_file $REMOTE_PERF/run 492 echo " Passed" 309 echo " Passed" 493 310 494 _modprobe -r ntb_perf 311 _modprobe -r ntb_perf 495 } 312 } 496 313 497 function ntb_tool_tests() 314 function ntb_tool_tests() 498 { 315 { 499 LOCAL_TOOL="$DEBUGFS/ntb_tool/$LOCAL_D !! 316 LOCAL_TOOL=$DEBUGFS/ntb_tool/$LOCAL_DEV 500 REMOTE_TOOL="$REMOTE_HOST:$DEBUGFS/ntb !! 317 REMOTE_TOOL=$REMOTE_HOST:$DEBUGFS/ntb_tool/$REMOTE_DEV 501 318 502 echo "Starting ntb_tool tests..." 319 echo "Starting ntb_tool tests..." 503 320 504 _modprobe ntb_tool 321 _modprobe ntb_tool 505 322 506 port_test "$LOCAL_TOOL" "$REMOTE_TOOL" !! 323 write_file Y $LOCAL_TOOL/link_event 507 !! 324 write_file Y $REMOTE_TOOL/link_event 508 LOCAL_PEER_TOOL="$LOCAL_TOOL/peer$LOCA << 509 REMOTE_PEER_TOOL="$REMOTE_TOOL/peer$RE << 510 325 511 link_test "$LOCAL_PEER_TOOL" "$REMOTE_ !! 326 link_test $LOCAL_TOOL $REMOTE_TOOL 512 link_test "$REMOTE_PEER_TOOL" "$LOCAL_ !! 327 link_test $REMOTE_TOOL $LOCAL_TOOL 513 328 514 #Ensure the link is up on both sides b 329 #Ensure the link is up on both sides before continuing 515 write_file "Y" "$LOCAL_PEER_TOOL/link_ !! 330 write_file Y $LOCAL_TOOL/link_event 516 write_file "Y" "$REMOTE_PEER_TOOL/link !! 331 write_file Y $REMOTE_TOOL/link_event 517 332 518 doorbell_test "$LOCAL_TOOL" "$REMOTE_T !! 333 for PEER_TRANS in $(ls $LOCAL_TOOL/peer_trans*); do 519 doorbell_test "$REMOTE_TOOL" "$LOCAL_T !! 334 PT=$(basename $PEER_TRANS) >> 335 write_file $MW_SIZE $LOCAL_TOOL/$PT >> 336 write_file $MW_SIZE $REMOTE_TOOL/$PT >> 337 done 520 338 521 scratchpad_test "$LOCAL_PEER_TOOL" "$R !! 339 doorbell_test $LOCAL_TOOL $REMOTE_TOOL 522 scratchpad_test "$REMOTE_PEER_TOOL" "$ !! 340 doorbell_test $REMOTE_TOOL $LOCAL_TOOL >> 341 scratchpad_test $LOCAL_TOOL $REMOTE_TOOL >> 342 scratchpad_test $REMOTE_TOOL $LOCAL_TOOL 523 343 524 message_test "$LOCAL_PEER_TOOL" "$REMO !! 344 for MW in $(ls $LOCAL_TOOL/mw*); do 525 message_test "$REMOTE_PEER_TOOL" "$LOC !! 345 MW=$(basename $MW) 526 346 527 mw_test "$LOCAL_PEER_TOOL" "$REMOTE_PE !! 347 mw_test $MW $LOCAL_TOOL $REMOTE_TOOL 528 mw_test "$REMOTE_PEER_TOOL" "$LOCAL_PE !! 348 mw_test $MW $REMOTE_TOOL $LOCAL_TOOL >> 349 done 529 350 530 _modprobe -r ntb_tool 351 _modprobe -r ntb_tool 531 } 352 } 532 353 533 function ntb_pingpong_tests() 354 function ntb_pingpong_tests() 534 { 355 { 535 LOCAL_PP="$DEBUGFS/ntb_pingpong/$LOCAL !! 356 LOCAL_PP=$DEBUGFS/ntb_pingpong/$LOCAL_DEV 536 REMOTE_PP="$REMOTE_HOST:$DEBUGFS/ntb_p !! 357 REMOTE_PP=$REMOTE_HOST:$DEBUGFS/ntb_pingpong/$REMOTE_DEV 537 358 538 echo "Starting ntb_pingpong tests..." 359 echo "Starting ntb_pingpong tests..." 539 360 540 _modprobe ntb_pingpong 361 _modprobe ntb_pingpong 541 362 542 pingpong_test $LOCAL_PP $REMOTE_PP 363 pingpong_test $LOCAL_PP $REMOTE_PP 543 364 544 _modprobe -r ntb_pingpong 365 _modprobe -r ntb_pingpong 545 } 366 } 546 367 547 function ntb_msi_tests() << 548 { << 549 LOCAL_MSI="$DEBUGFS/ntb_msi_test/$LOCA << 550 REMOTE_MSI="$REMOTE_HOST:$DEBUGFS/ntb_ << 551 << 552 echo "Starting ntb_msi_test tests..." << 553 << 554 if ! _modprobe ntb_msi_test 2> /dev/nu << 555 echo " Not doing MSI tests se << 556 return << 557 fi << 558 << 559 port_test $LOCAL_MSI $REMOTE_MSI << 560 << 561 LOCAL_PEER="$LOCAL_MSI/peer$LOCAL_PIDX << 562 REMOTE_PEER="$REMOTE_MSI/peer$REMOTE_P << 563 << 564 msi_test $LOCAL_PEER $REMOTE_PEER << 565 msi_test $REMOTE_PEER $LOCAL_PEER << 566 << 567 _modprobe -r ntb_msi_test << 568 } << 569 << 570 function ntb_perf_tests() 368 function ntb_perf_tests() 571 { 369 { 572 LOCAL_PERF="$DEBUGFS/ntb_perf/$LOCAL_D !! 370 LOCAL_PERF=$DEBUGFS/ntb_perf/$LOCAL_DEV 573 REMOTE_PERF="$REMOTE_HOST:$DEBUGFS/ntb !! 371 REMOTE_PERF=$REMOTE_HOST:$DEBUGFS/ntb_perf/$REMOTE_DEV 574 372 575 echo "Starting ntb_perf tests..." 373 echo "Starting ntb_perf tests..." 576 374 577 perf_test 0 375 perf_test 0 578 376 579 if [[ $RUN_DMA_TESTS ]]; then 377 if [[ $RUN_DMA_TESTS ]]; then 580 perf_test 1 378 perf_test 1 581 fi 379 fi 582 } 380 } 583 381 584 function cleanup() 382 function cleanup() 585 { 383 { 586 set +e 384 set +e 587 _modprobe -r ntb_tool 2> /dev/null 385 _modprobe -r ntb_tool 2> /dev/null 588 _modprobe -r ntb_perf 2> /dev/null 386 _modprobe -r ntb_perf 2> /dev/null 589 _modprobe -r ntb_pingpong 2> /dev/null 387 _modprobe -r ntb_pingpong 2> /dev/null 590 _modprobe -r ntb_transport 2> /dev/nul 388 _modprobe -r ntb_transport 2> /dev/null 591 _modprobe -r ntb_msi_test 2> /dev/null << 592 set -e 389 set -e 593 } 390 } 594 391 595 cleanup 392 cleanup 596 393 597 if ! [[ $$DONT_CLEANUP ]]; then 394 if ! [[ $$DONT_CLEANUP ]]; then 598 trap cleanup EXIT 395 trap cleanup EXIT 599 fi 396 fi 600 397 601 if [ "$(id -u)" != "0" ]; then 398 if [ "$(id -u)" != "0" ]; then 602 echo "This script must be run as root" 399 echo "This script must be run as root" 1>&2 603 exit 1 400 exit 1 604 fi 401 fi 605 402 606 if [[ "$LIST_DEVS" == TRUE ]]; then 403 if [[ "$LIST_DEVS" == TRUE ]]; then 607 echo "Local Devices:" 404 echo "Local Devices:" 608 ls -1 /sys/bus/ntb/devices 405 ls -1 /sys/bus/ntb/devices 609 echo 406 echo 610 407 611 if [[ "$REMOTE_HOST" != "" ]]; then 408 if [[ "$REMOTE_HOST" != "" ]]; then 612 echo "Remote Devices:" 409 echo "Remote Devices:" 613 ssh $REMOTE_HOST ls -1 /sys/bu 410 ssh $REMOTE_HOST ls -1 /sys/bus/ntb/devices 614 fi 411 fi 615 412 616 exit 0 413 exit 0 617 fi 414 fi 618 415 619 if [[ "$LOCAL_DEV" == $"" ]] || [[ "$REMOTE_DE 416 if [[ "$LOCAL_DEV" == $"" ]] || [[ "$REMOTE_DEV" == $"" ]]; then 620 show_help 417 show_help 621 exit 1 418 exit 1 622 fi 419 fi 623 420 624 ntb_tool_tests 421 ntb_tool_tests 625 echo 422 echo 626 ntb_pingpong_tests 423 ntb_pingpong_tests 627 echo << 628 ntb_msi_tests << 629 echo 424 echo 630 ntb_perf_tests 425 ntb_perf_tests 631 echo 426 echo
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.