#!/bin/bash # --- CONFIGURATION --- VM_NAME="win11" GPU_DEV="0000:03:00.0" GPU_AUDIO="0000:03:00.1" # --- END CONFIGURATION --- GUEST_NAME="$1" HOOK_PHASE="$2" HOOK_SUBPHASE="$3" log() { echo "LibvirtHook: $1" | systemd-cat -t "vfio-hook" -p info } if [ "$GUEST_NAME" = "$VM_NAME" ]; then if [ "$HOOK_PHASE" = "prepare" ] && [ "$HOOK_SUBPHASE" = "begin" ]; then # This runs "pre-start" log "PRE-START: Unbinding $GPU_DEV and $GPU_AUDIO from host drivers..." echo "$GPU_DEV" > /sys/bus/pci/drivers/amdgpu/unbind 2>/dev/null echo "$GPU_AUDIO" > /sys/bus/pci/drivers/snd_hda_intel/unbind 2>/dev/null sleep 2 log "PRE-START: Applying BAR resize quirk to $GPU_DEV..." echo 3 > "/sys/bus/pci/devices/$GPU_DEV/resource2_resize" sleep 2 log "PRE-START: Binding devices to vfio-pci..." echo "$GPU_DEV" > /sys/bus/pci/drivers/vfio-pci/bind 2>/dev/null echo "$GPU_AUDIO" > /sys/bus/pci/drivers/vfio-pci/bind 2>/dev/null log "PRE-START: Hook complete." elif [ "$HOOK_PHASE" = "release" ] && [ "$HOOK_SUBPHASE" = "end" ]; then # This runs "post-stop" log "POST-STOP: Unbinding $GPU_DEV and $GPU_AUDIO from vfio-pci..." echo "$GPU_DEV" > /sys/bus/pci/drivers/vfio-pci/unbind 2>/dev/null echo "$GPU_AUDIO" > /sys/bus/pci/drivers/vfio-pci/unbind 2>/dev/null sleep 2 # mine auto-rebinds, but you may need to uncomment these to rebind to amdgpu if necessary #log "POST-STOP: Rebinding devices to host drivers..." #echo "$GPU_DEV" > /sys/bus/pci/drivers/amdgpu/bind 2>/dev/null #echo "$GPU_AUDIO" > /sys/bus/pci/drivers/snd_hda_intel/bind 2>/dev/null #sleep 2 log "POST-STOP: Hook complete." fi fi exit 0