xref: /spdk/test/setup/common.sh (revision eea06cfd840bd32b8059bc2603d5a4cd83d2c167)
1eb53c232Spaul luse#  SPDX-License-Identifier: BSD-3-Clause
2eb53c232Spaul luse#  Copyright (C) 2020 Intel Corporation
3eb53c232Spaul luse#  All rights reserved.
4eb53c232Spaul luse#
5eb53c232Spaul luse
6ec94874cSMichal Bergersource "$rootdir/test/common/autotest_common.sh"
7ec94874cSMichal Berger
8ec94874cSMichal Bergersetup() {
9ec94874cSMichal Berger	if [[ $1 == output ]]; then
10ec94874cSMichal Berger		"$rootdir/scripts/setup.sh" "${@:2}"
11ec94874cSMichal Berger	else
12ec94874cSMichal Berger		"$rootdir/scripts/setup.sh" "$@" &> /dev/null
13ec94874cSMichal Berger	fi
14ec94874cSMichal Berger}
15d60bc771SMichal Berger
16d60bc771SMichal Bergerget_meminfo() {
17d60bc771SMichal Berger	local get=$1
18d60bc771SMichal Berger	local node=$2
19d60bc771SMichal Berger	local var val
20d60bc771SMichal Berger	local mem_f mem
21d60bc771SMichal Berger
22d60bc771SMichal Berger	mem_f=/proc/meminfo
23d60bc771SMichal Berger	if [[ -e /sys/devices/system/node/node$node/meminfo ]]; then
24d60bc771SMichal Berger		mem_f=/sys/devices/system/node/node$node/meminfo
25327f69eaSMichal Berger	elif [[ -n $node ]]; then
26327f69eaSMichal Berger		return 1
27d60bc771SMichal Berger	fi
28d60bc771SMichal Berger	mapfile -t mem < "$mem_f"
29d60bc771SMichal Berger	mem=("${mem[@]#Node +([0-9]) }")
30d60bc771SMichal Berger
31d60bc771SMichal Berger	while IFS=": " read -r var val _; do
32d60bc771SMichal Berger		[[ $var == "$get" ]] || continue
33d60bc771SMichal Berger		echo "$val" && return 0
34d60bc771SMichal Berger	done < <(printf '%s\n' "${mem[@]}")
35d60bc771SMichal Berger	return 1
36d60bc771SMichal Berger}
3718020ec7SMichal Berger
3818020ec7SMichal Bergerpartition_drive() {
3918020ec7SMichal Berger	local disk=$1
4018020ec7SMichal Berger	local part_no=${2:-2}
4118020ec7SMichal Berger	local size=${3:-1073741824} # default 1G
4218020ec7SMichal Berger
4318020ec7SMichal Berger	local part part_start=0 part_end=0
4418020ec7SMichal Berger	local parts=()
4518020ec7SMichal Berger
4618020ec7SMichal Berger	for ((part = 1; part <= part_no; part++)); do
4718020ec7SMichal Berger		parts+=("${disk}p$part")
4818020ec7SMichal Berger	done
4918020ec7SMichal Berger
5018020ec7SMichal Berger	# Convert size to sectors for more precise partitioning
5126c2f987SMichal Berger	((size /= $(< "/sys/class/block/$disk/queue/hw_sector_size")))
5218020ec7SMichal Berger
5318020ec7SMichal Berger	"$rootdir/scripts/sync_dev_uevents.sh" block/partition "${parts[@]}" &
5418020ec7SMichal Berger
5518020ec7SMichal Berger	# Avoid parted since it generates to much noise over netlink
5618020ec7SMichal Berger	sgdisk "/dev/$disk" --zap-all || :
5718020ec7SMichal Berger	for ((part = 1; part <= part_no; part++)); do
5818020ec7SMichal Berger		((part_start = part_start == 0 ? 2048 : part_end + 1))
5918020ec7SMichal Berger		((part_end = part_start + size - 1))
60*eea06cfdSMichal Berger		flock "/dev/$disk" sgdisk "/dev/$disk" --new="$part:$part_start:$part_end"
6118020ec7SMichal Berger	done
6218020ec7SMichal Berger	wait "$!"
6318020ec7SMichal Berger}
6418020ec7SMichal Berger
6518020ec7SMichal Bergermkfs() {
6618020ec7SMichal Berger	local dev=$1 mount=$2 size=$3
6718020ec7SMichal Berger
6818020ec7SMichal Berger	mkdir -p "$mount"
6918020ec7SMichal Berger
7018020ec7SMichal Berger	[[ -e $dev ]]
7118020ec7SMichal Berger	mkfs.ext4 -qF "$dev" $size
7218020ec7SMichal Berger	mount "$dev" "$mount"
7318020ec7SMichal Berger}
740c78378aSMichal Berger
750c78378aSMichal Bergersec_size_to_bytes() {
760c78378aSMichal Berger	local dev=$1
770c78378aSMichal Berger
780c78378aSMichal Berger	[[ -e /sys/block/$dev ]] || return 1
790c78378aSMichal Berger	# /size is always represented in 512B blocks
800c78378aSMichal Berger	echo $(($(< "/sys/block/$dev/size") * 512))
810c78378aSMichal Berger}
82