Commit 69ae10f7 authored by Michal Berger's avatar Michal Berger Committed by Tomasz Zawadzki
Browse files

scripts/setup: Unify block name lookup



Change-Id: Icde3b528d37f6c9a2d8a2fd9f3548f3ee75ceff0
Signed-off-by: default avatarMichal Berger <michalx.berger@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3890


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
parent 51b5fa85
Loading
Loading
Loading
Loading
+26 −45
Original line number Diff line number Diff line
@@ -146,37 +146,31 @@ function linux_hugetlbfs_mounts() {
	mount | grep ' type hugetlbfs ' | awk '{ print $3 }'
}

function get_nvme_name_from_bdf() {
	local blknames=()
function get_block_dev_from_bdf() {
	local bdf=$1
	local block

	set +e
	nvme_devs=$(lsblk -d --output NAME | grep "^nvme")
	set -e
	for dev in $nvme_devs; do
		link_name=$(readlink /sys/block/$dev/device/device) || true
		if [ -z "$link_name" ]; then
			link_name=$(readlink /sys/block/$dev/device)
		fi
		link_bdf=$(basename "$link_name")
		if [ "$link_bdf" = "$1" ]; then
			blknames+=($dev)
	for block in /sys/block/*; do
		if [[ $(readlink -f "$block/device") == *"/$bdf/"* ]]; then
			echo "${block##*/}"
			return 0
		fi
	done

	printf '%s\n' "${blknames[@]}"
}

function get_virtio_names_from_bdf() {
	blk_devs=$(lsblk --nodeps --output NAME)
	virtio_names=()
function get_mounted_part_dev_from_bdf_block() {
	local bdf=$1
	local blocks block part

	blocks=($(get_block_dev_from_bdf "$bdf"))

	for dev in $blk_devs; do
		if readlink "/sys/block/$dev" | grep -q "$1"; then
			virtio_names+=("$dev")
	for block in "${blocks[@]}"; do
		for part in "/sys/block/$block/$block"*; do
			if [[ $(< /proc/mounts) == *"/dev/${part##*/} "* ]]; then
				echo "${part##*/}"
			fi
		done

	eval "$2=( " "${virtio_names[@]}" " )"
	done
}

function collect_devices() {
@@ -246,22 +240,13 @@ function configure_linux_pci() {

	# NVMe
	for bdf in ${pci_bus_cache["0x010802"]}; do
		blknames=()
		blknames=($(get_mounted_part_dev_from_bdf_block "$bdf"))
		if ! pci_can_use $bdf; then
			pci_dev_echo "$bdf" "Skipping un-whitelisted NVMe controller at $bdf"
			continue
		fi

		mount=false
		for blkname in $(get_nvme_name_from_bdf $bdf); do
			mountpoints=$(lsblk /dev/$blkname --output MOUNTPOINT -n | wc -w)
			if [ "$mountpoints" != "0" ]; then
				mount=true
				blknames+=($blkname)
			fi
		done

		if ! $mount; then
		if ((${#blknames[@]} == 0)); then
			linux_bind_driver "$bdf" "$driver_name"
		else
			for name in "${blknames[@]}"; do
@@ -318,14 +303,11 @@ function configure_linux_pci() {
				pci_dev_echo "$bdf" "Skipping un-whitelisted Virtio device at $bdf"
				continue
			fi
			blknames=()
			get_virtio_names_from_bdf "$bdf" blknames
			for blkname in "${blknames[@]}"; do
				if [ "$(lsblk /dev/$blkname --output MOUNTPOINT -n | wc -w)" != "0" ]; then
					pci_dev_echo "$bdf" "Active mountpoints on /dev/$blkname, so not binding"
					continue 2
			blknames=($(get_mounted_part_dev_from_bdf_block "$bdf"))
			if ((${#blknames[@]} > 0)); then
				pci_dev_echo "$bdf" "Active mountpoints on ${blknames[*]}, so not binding"
				continue
			fi
			done

			linux_bind_driver "$bdf" "$driver_name"
		done
@@ -715,8 +697,7 @@ function status_linux() {
			fi
			device=$(cat /sys/bus/pci/devices/$bdf/device)
			vendor=$(cat /sys/bus/pci/devices/$bdf/vendor)
			blknames=()
			get_virtio_names_from_bdf "$bdf" blknames
			blknames=($(get_mounted_part_dev_from_bdf_block "$bdf"))
			echo -e "$bdf\t${vendor#0x}\t${device#0x}\t$node\t\t${driver:--}\t\t" "${blknames[@]}"
		done
	done