summaryrefslogtreecommitdiffstats
path: root/scripts/launch_qemu_direct.sh
blob: e7b11990b684ea117353fc178884f6a1fc19d5a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/bin/bash
# SPDX-License-Identifier: BSD-3-Clause
# Copyright (c) 2026 Open-IOV contributors
# launch_qemu_direct.sh - launch the vGPU VM directly, with a serial
# socket, QMP socket and guest agent socket that tools/guest-diag scripts
# expect. The mdev UUID is taken from $1 or MDEV_UUID, else the first
# existing /sys/bus/mdev/devices entry.
#
# Usage: sudo scripts/launch_qemu_direct.sh [mdev-uuid]
set -euo pipefail

MDEV_UUID="${1:-${MDEV_UUID:-}}"
if [ -z "$MDEV_UUID" ]; then
    MDEV_UUID=$(ls /sys/bus/mdev/devices/ 2>/dev/null | head -1)
fi
if [ -z "$MDEV_UUID" ]; then
    echo "ERROR: no mdev device (create one first)" >&2
    exit 1
fi
MDEV_PATH="/sys/bus/mdev/devices/${MDEV_UUID}"
DISK="${DISK:-/home/rmcore/.local/libvf.io/kernel/linux.qcow2}"
SERIAL_SOCK="${SERIAL_SOCK:-/tmp/qemu-serial.sock}"
QMP_SOCK="${QMP_SOCK:-/tmp/qemu-qmp-direct.sock}"
GUEST_AGENT_SOCK="${GUEST_AGENT_SOCK:-/tmp/qemu-guest-agent-direct.sock}"

rm -f "$SERIAL_SOCK" "$QMP_SOCK" "$GUEST_AGENT_SOCK"

exec qemu-system-x86_64 \
    -no-hpet \
    -mem-prealloc \
    -qmp "unix:${QMP_SOCK},server,nowait" \
    -chardev "socket,path=${GUEST_AGENT_SOCK},server=on,wait=off,id=qga0" \
    -device virtio-serial-pci \
    -device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0 \
    -serial "unix:${SERIAL_SOCK},server,nowait" \
    -gdb tcp::1234 \
    -nographic \
    -vga none \
    -device ivshmem-plain,id=shmem0,memdev=ivshmem_kvmfr \
    -object memory-backend-file,id=ivshmem_kvmfr,mem-path=/dev/shm/kvmfr-direct,size=128M,share=yes \
    -device ivshmem-plain,id=shmem1,memdev=ivshmem_kvmsr \
    -object memory-backend-file,id=ivshmem_kvmsr,mem-path=/dev/shm/kvmsr-direct,size=2M,share=yes \
    -uuid 90288662-2b76-49a4-83a5-7eb1e8ec22ed \
    -machine pc-q35-4.2,accel=kvm,usb=off,vmport=off,dump-guest-core=off \
    -cpu host,ss=on,vmx=on,pcid=on,hypervisor=on,arat=on,tsc-adjust=on,umip=on,md-clear=on,stibp=on,arch-capabilities=on,ssbd=on,xsaveopt=on,pdpe1gb=on,ibpb=on,amd-stibp=on,amd-ssbd=on,skip-l1dfl-vmentry=on,pschange-mc-no=on,hv-vapic,hv-time,hv-spinlocks=0x1fff,hv-vendor-id=null,kvm=on,topoext=on \
    -rtc clock=host,base=localtime \
    -m "${RAM:-4096}" \
    -smp cores=4,threads=1,sockets=1 \
    -hda "${DISK}" \
    --enable-kvm \
    -device vfio-pci,sysfsdev="${MDEV_PATH}",display=off \
    -device rtl8139,netdev=net0 \
    -netdev user,id=net0,hostfwd=tcp::2222-:22 \
    -net user \
    -net nic \
    -device vhost-vsock-pci,guest-cid="${VSOCK_CID:-97844}" \
    -display none