1# SPDX-License-Identifier: BSD-3-Clause 2# Copyright (C) 2020 Intel Corporation 3# All rights reserved. 4# 5 6source "$rootdir/test/common/autotest_common.sh" 7 8setup() { 9 if [[ $1 == output ]]; then 10 "$rootdir/scripts/setup.sh" "${@:2}" 11 else 12 "$rootdir/scripts/setup.sh" "$@" &> /dev/null 13 fi 14} 15 16get_meminfo() { 17 local get=$1 18 local node=$2 19 local var val 20 local mem_f mem 21 22 mem_f=/proc/meminfo 23 if [[ -e /sys/devices/system/node/node$node/meminfo ]]; then 24 mem_f=/sys/devices/system/node/node$node/meminfo 25 elif [[ -n $node ]]; then 26 return 1 27 fi 28 mapfile -t mem < "$mem_f" 29 mem=("${mem[@]#Node +([0-9]) }") 30 31 while IFS=": " read -r var val _; do 32 [[ $var == "$get" ]] || continue 33 echo "$val" && return 0 34 done < <(printf '%s\n' "${mem[@]}") 35 return 1 36} 37 38partition_drive() { 39 local disk=$1 40 local part_no=${2:-2} 41 local size=${3:-1073741824} # default 1G 42 43 local part part_start=0 part_end=0 44 local parts=() 45 46 for ((part = 1; part <= part_no; part++)); do 47 parts+=("${disk}p$part") 48 done 49 50 # Convert size to sectors for more precise partitioning 51 ((size /= $(< "/sys/class/block/$disk/queue/hw_sector_size"))) 52 53 "$rootdir/scripts/sync_dev_uevents.sh" block/partition "${parts[@]}" & 54 55 # Avoid parted since it generates to much noise over netlink 56 sgdisk "/dev/$disk" --zap-all || : 57 for ((part = 1; part <= part_no; part++)); do 58 ((part_start = part_start == 0 ? 2048 : part_end + 1)) 59 ((part_end = part_start + size - 1)) 60 flock "/dev/$disk" sgdisk "/dev/$disk" --new="$part:$part_start:$part_end" 61 done 62 wait "$!" 63} 64 65mkfs() { 66 local dev=$1 mount=$2 size=$3 67 68 mkdir -p "$mount" 69 70 [[ -e $dev ]] 71 mkfs.ext4 -qF "$dev" $size 72 mount "$dev" "$mount" 73} 74 75sec_size_to_bytes() { 76 local dev=$1 77 78 [[ -e /sys/block/$dev ]] || return 1 79 # /size is always represented in 512B blocks 80 echo $(($(< "/sys/block/$dev/size") * 512)) 81} 82