#!/bin/bash

prepare() {
    systemctl start win10-usb

    # https://github.com/gnif/vendor-reset/issues/46#issuecomment-992282166
    {% for pci_device_id in pci_device_ids %}
    echo 'device_specific' >'/sys/bus/pci/devices/{{ pci_device_id.domain }}:{{ pci_device_id.bus }}:{{ pci_device_id.slot }}.{{ pci_device_id.function }}/reset_method'
    {% endfor %}
        
    vfio-isolate -u /tmp/win10.undo \
        drop-caches \
        compact-memory \
        irq-affinity mask C1-3,5-7 \
        cpuset-modify --cpus C0,4 /system.slice \
        cpuset-modify --cpus C0,4 /user.slice \
        cpu-governor performance C0-7

    for _ in $(seq 10); do
        # assign hugepages
        sysctl -w vm.nr_overcommit_hugepages=8192 && break
        sleep 1
    done
    # sleep 10
}

release() {
    systemctl stop win10-usb
    vfio-isolate restore /tmp/win10.undo
    # sysctl -w vm.nr_overcommit_hugepages=0
}

if [ "$1" == "win10" ]; then
    if [ "$2" == "prepare" ]; then
        prepare
    fi
    if [ "$2" == "release" ]; then
        release
    fi
fi