1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2019 Intel Corporation 4# All rights reserved. 5# 6set -e 7 8testdir=$(readlink -f $(dirname $0)) 9rootdir=$(readlink -f $testdir/../..) 10source "$rootdir/scripts/common.sh" 11source "$rootdir/test/common/autotest_common.sh" 12 13# The OPAL CI tests is only used for P4510 devices. 14mapfile -t bdfs < <(get_nvme_bdfs_by_id 0x0a54) 15if [[ -z ${bdfs[0]} ]]; then 16 echo "No P4510 device found, exit the tests" 17 exit 1 18fi 19 20bdf=${bdfs[0]} 21 22function opal_revert_and_init() { 23 $SPDK_BIN_DIR/spdk_tgt & 24 spdk_tgt_pid=$! 25 trap 'killprocess $spdk_tgt_pid; exit 1' SIGINT SIGTERM EXIT 26 waitforlisten $spdk_tgt_pid 27 28 $rootdir/scripts/rpc.py bdev_nvme_attach_controller -b "nvme0" -t "pcie" -a ${bdf} 29 # Ignore if this fails. 30 $rootdir/scripts/rpc.py bdev_nvme_opal_revert -b nvme0 -p test || true 31 sleep 1 32 $rpc_py bdev_nvme_opal_init -b nvme0 -p test 33 $rpc_py bdev_nvme_detach_controller nvme0 34 35 killprocess $spdk_tgt_pid 36} 37 38function test_opal_cmds() { 39 $rpc_py bdev_nvme_attach_controller -b "nvme0" -t "pcie" -a ${bdf} 40 41 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 42 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 43 $rpc_py bdev_opal_get_info -b nvme0n1r1 -p test 44 45 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 46 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 47 48 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 49 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 50 51 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 52 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 53 54 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 3 -s 4096 -l 4096 -p test 55 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 56 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 57 58 $rpc_py bdev_opal_new_user -b nvme0n1r3 -p test -i 3 -u tester3 59 $rpc_py bdev_opal_get_info -b nvme0n1r3 -p test 60 $rpc_py bdev_opal_set_lock_state -b nvme0n1r3 -i 3 -p tester3 -l readonly 61 $rpc_py bdev_opal_get_info -b nvme0n1r3 -p test 62 $rpc_py bdev_opal_set_lock_state -b nvme0n1r1 -i 0 -p test -l rwlock 63 64 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 65 $rpc_py bdev_opal_delete -b nvme0n1r3 -p test 66 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 67 68 $rpc_py bdev_nvme_detach_controller nvme0 69} 70 71function setup_test_environment() { 72 $rpc_py bdev_nvme_attach_controller -b "nvme0" -t "pcie" -a ${bdf} 73 74 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 1 -s 0 -l 1024 -p test 75 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 2 -s 1024 -l 512 -p test 76 $rpc_py bdev_opal_create -b nvme0 -n 1 -i 3 -s 4096 -l 4096 -p test 77 78 $rpc_py bdev_opal_new_user -b nvme0n1r1 -p test -i 1 -u tester1 79 $rpc_py bdev_opal_set_lock_state -b nvme0n1r1 -i 1 -p tester1 -l readwrite 80 $rpc_py bdev_opal_new_user -b nvme0n1r3 -p test -i 3 -u tester3 81 $rpc_py bdev_opal_set_lock_state -b nvme0n1r3 -i 3 -p tester3 -l readwrite 82 83 $rpc_py bdev_opal_set_lock_state -b nvme0n1r2 -i 0 -p test -l readwrite 84} 85 86function clean_up() { 87 $rpc_py bdev_opal_delete -b nvme0n1r1 -p test 88 $rpc_py bdev_opal_delete -b nvme0n1r2 -p test 89 $rpc_py bdev_opal_delete -b nvme0n1r3 -p test 90} 91 92function revert() { 93 $rpc_py bdev_nvme_opal_revert -b nvme0 -p test 94} 95 96function opal_spdk_tgt() { 97 $SPDK_BIN_DIR/spdk_tgt & 98 spdk_tgt_pid=$! 99 trap 'killprocess $spdk_tgt_pid; exit 1' SIGINT SIGTERM EXIT 100 waitforlisten $spdk_tgt_pid 101 test_opal_cmds 102 killprocess $spdk_tgt_pid 103} 104 105function opal_bdevio() { 106 $rootdir/test/bdev/bdevio/bdevio -w & 107 bdevio_pid=$! 108 trap 'killprocess $bdevio_pid; exit 1' SIGINT SIGTERM EXIT 109 waitforlisten $bdevio_pid 110 setup_test_environment 111 $rootdir/test/bdev/bdevio/tests.py perform_tests 112 clean_up 113 $rpc_py bdev_nvme_detach_controller nvme0 114 trap - SIGINT SIGTERM EXIT 115 killprocess $bdevio_pid 116} 117 118function opal_bdevperf() { 119 $rootdir/build/examples/bdevperf -z -q 8 -o 4096 -w verify -t 10 & 120 bdevperf_pid=$! 121 trap 'revert; killprocess $bdevperf_pid; exit 1' SIGINT SIGTERM EXIT 122 waitforlisten $bdevperf_pid 123 setup_test_environment 124 $rootdir/examples/bdev/bdevperf/bdevperf.py perform_tests 125 clean_up 126 revert 127 $rpc_py bdev_nvme_detach_controller nvme0 128 trap - SIGINT SIGTERM EXIT 129 killprocess $bdevperf_pid 130} 131 132opal_revert_and_init 133 134run_test "nvme_opal_spdk_tgt" opal_spdk_tgt 135run_test "nvme_opal_bdevio" opal_bdevio 136run_test "nvme_opal_bdevperf" opal_bdevperf 137