aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristos Margiolis <christos@FreeBSD.org>2024-01-02 18:20:42 +0000
committerChristos Margiolis <christos@FreeBSD.org>2024-01-09 16:47:36 +0000
commita00a507e2d5f4f5de7e7bbafc6df419a1565da24 (patch)
treeead2e7d21f426a9247171c3cc35b7b245e9f2cdf
parent4566bff5c90e99c872ed2f6e00e46b1bac0caba6 (diff)
downloadsrc-a00a507e2d5f4f5de7e7bbafc6df419a1565da24.tar.gz
src-a00a507e2d5f4f5de7e7bbafc6df419a1565da24.zip
vmrun.sh: allow device name arguments in pci-passthru option
This is more intuitive than having to run `pciconf -l` and figure out the bus/slot/func entry manually. Reviewed by: markj Sponsored by; The FreeBSD Foundation MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D43270 (cherry picked from commit 2ee77056d2d4f9d43bd316ce6dc91bf5e4b0848b)
-rwxr-xr-xshare/examples/bhyve/vmrun.sh25
1 files changed, 18 insertions, 7 deletions
diff --git a/share/examples/bhyve/vmrun.sh b/share/examples/bhyve/vmrun.sh
index d2cc371e472f..323d8e22a041 100755
--- a/share/examples/bhyve/vmrun.sh
+++ b/share/examples/bhyve/vmrun.sh
@@ -62,7 +62,7 @@ usage() {
echo " [-L <VNC IP for UEFI framebuffer>]"
echo " [-m <memsize>]" \
"[-n <network adapter emulation type>]"
- echo " [-p <bus/slot/func>]"
+ echo " [-p <pcidev|bus/slot/func>]"
echo " [-P <port>] [-t <tapdev>] <vmname>"
echo ""
echo " -h: display this help message"
@@ -87,8 +87,8 @@ usage() {
echo " -m: memory size (default: ${DEFAULT_MEMSIZE})"
echo " -n: network adapter emulation type" \
"(default: ${DEFAULT_NIC})"
- echo " -p: pass-through a host PCI device at bus/slot/func" \
- "(e.g. 10/0/0)"
+ echo " -p: pass-through a host PCI device (e.g ppt0 or" \
+ "bus/slot/func)"
echo " -P: UEFI GOP VNC port (default: ${DEFAULT_VNCPORT})"
echo " -t: tap device for virtio-net (default: $DEFAULT_TAPDEV)"
echo " -T: Enable tablet device (for UEFI GOP)"
@@ -351,10 +351,21 @@ while [ 1 ]; do
i=0
while [ $i -lt $pass_total ] ; do
- eval "pass=\$pass_dev${i}"
- devargs="$devargs -s $nextslot:0,passthru,${pass} "
- nextslot=$(($nextslot + 1))
- i=$(($i + 1))
+ eval "pass=\$pass_dev${i}"
+ bsfform="$(echo "${pass}" | grep "^[0-9]\+/[0-9]\+/[0-9]\+$")"
+ if [ -z "${bsfform}" ]; then
+ bsf="$(pciconf -l "${pass}" 2>/dev/null)"
+ if [ $? -ne 0 ]; then
+ errmsg "${pass} is not a host PCI device"
+ exit 1
+ fi
+ bsf="$(echo "${bsf}" | awk -F: '{print $2"/"$3"/"$4}')"
+ else
+ bsf="${pass}"
+ fi
+ devargs="$devargs -s $nextslot:0,passthru,${bsf} "
+ nextslot=$(($nextslot + 1))
+ i=$(($i + 1))
done
efiargs=""