1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2017 Intel Corporation 4# All rights reserved. 5# 6testdir=$(readlink -f $(dirname $0)) 7rootdir=$(readlink -f $testdir/../../..) 8source "$rootdir/test/vhost/hotplug/common.sh" 9 10if [[ $scsi_hot_remove_test == 1 ]] && [[ $blk_hot_remove_test == 1 ]]; then 11 notice "Vhost-scsi and vhost-blk hotremove tests cannot be run together" 12fi 13 14# Run spdk by calling run_vhost from hotplug/common.sh. 15# Then prepare vhost with rpc calls and setup and run 4 VMs. 16function pre_hot_attach_detach_test_case() { 17 used_vms="" 18 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p0.0 19 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p1.0 20 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p2.1 21 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p3.1 22 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p4.2 23 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p5.2 24 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p6.3 25 $rpc_py vhost_create_scsi_controller naa.Nvme0n1p7.3 26 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p4.2 0 Nvme0n1p8 27 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p4.2 1 Nvme0n1p9 28 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p5.2 0 Nvme0n1p10 29 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p5.2 1 Nvme0n1p11 30 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p6.3 0 Nvme0n1p12 31 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p6.3 1 Nvme0n1p13 32 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p7.3 0 Nvme0n1p14 33 $rpc_py vhost_scsi_controller_add_target naa.Nvme0n1p7.3 1 Nvme0n1p15 34 vms_setup_and_run "0 1 2 3" 35 vms_prepare "0 1 2 3" 36} 37 38function clear_vhost_config() { 39 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 0 40 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p4.2 1 41 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p5.2 0 42 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p5.2 1 43 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p6.3 0 44 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p6.3 1 45 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p7.3 0 46 $rpc_py vhost_scsi_controller_remove_target naa.Nvme0n1p7.3 1 47 $rpc_py vhost_delete_controller naa.Nvme0n1p0.0 48 $rpc_py vhost_delete_controller naa.Nvme0n1p1.0 49 $rpc_py vhost_delete_controller naa.Nvme0n1p2.1 50 $rpc_py vhost_delete_controller naa.Nvme0n1p3.1 51 $rpc_py vhost_delete_controller naa.Nvme0n1p4.2 52 $rpc_py vhost_delete_controller naa.Nvme0n1p5.2 53 $rpc_py vhost_delete_controller naa.Nvme0n1p6.3 54 $rpc_py vhost_delete_controller naa.Nvme0n1p7.3 55} 56 57trap 'error_exit "${FUNCNAME}" "${LINENO}"' ERR 58# Hotremove/hotattach/hotdetach test cases prerequisites 59# Run vhost with 2 NVMe disks. 60 61notice "===============" 62notice "" 63notice "running SPDK" 64notice "" 65vhost_run -n 0 66$rpc_py bdev_nvme_set_hotplug -e 67$rpc_py bdev_split_create Nvme0n1 16 68$rpc_py bdev_malloc_create 128 512 -b Malloc 69$rpc_py bdev_split_create Malloc 4 70$rpc_py bdev_split_create HotInNvme0n1 2 71$rpc_py bdev_split_create HotInNvme1n1 2 72$rpc_py bdev_split_create HotInNvme2n1 2 73$rpc_py bdev_split_create HotInNvme3n1 2 74$rpc_py bdev_get_bdevs 75 76if [[ $scsi_hot_remove_test == 0 ]] && [[ $blk_hot_remove_test == 0 ]]; then 77 pre_hot_attach_detach_test_case 78 $testdir/scsi_hotattach.sh --fio-bin=$fio_bin & 79 first_script=$! 80 $testdir/scsi_hotdetach.sh --fio-bin=$fio_bin & 81 second_script=$! 82 wait $first_script 83 wait $second_script 84 vm_shutdown_all 85 clear_vhost_config 86fi 87if [[ $scsi_hot_remove_test == 1 ]]; then 88 source $testdir/scsi_hotremove.sh 89fi 90if [[ $blk_hot_remove_test == 1 ]]; then 91 source $testdir/blk_hotremove.sh 92fi 93post_test_case 94