diff options
author | Dominique Martinet <dominique.martinet@cea.fr> | 2017-09-07 09:48:11 +0200 |
---|---|---|
committer | Dominique Martinet <dominique.martinet@cea.fr> | 2017-09-07 09:48:11 +0200 |
commit | 9bf399b5bd11cc9d03123e3e831ea6f13dc529b3 (patch) | |
tree | fa49a47849e0b0503203316f36349286039be3b4 | |
parent | c6ecafb710966d0b9caaef6980660cd55be02dfa (diff) |
vfio: lock when dealing with drivers
vfio doesn't like binding/unbinding multiple devices in parallel
-rwxr-xr-x | kvm-wrapper.sh | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/kvm-wrapper.sh b/kvm-wrapper.sh index dbc4b22..23bc5a7 100755 --- a/kvm-wrapper.sh +++ b/kvm-wrapper.sh @@ -181,7 +181,7 @@ function random_mac () # but calling unlock lets us unlink lock file safely function lock () { - local VARIANT="$1" + local VARIANT="${1//-/_}" local LOCKFILE="/tmp/kvm-wrapper-$VARIANT.lock" local LOCKFD @@ -204,7 +204,7 @@ function lock () function unlock () { - local VARIANT="$1" + local VARIANT="${1//-/_}" local LOCKFILE="/tmp/kvm-wrapper-$VARIANT.lock" local LOCKFD @@ -391,6 +391,9 @@ function pci_bind_driver () local PCI_BIND_DRIVER="/sys/bus/pci/drivers/$BIND_DRIVER_NAME" + # drivers don't like parallel bind/unbind, lock through. + lock "$BIND_DRIVER_NAME" + # In case driver is not loaded test_file_rw "$PCI_BIND_DRIVER/new_id" || modprobe "$BIND_DRIVER_NAME" test_file_rw "$PCI_BIND_DRIVER/new_id" || fail_exit "$BIND_DRIVER_NAME driver not available" @@ -406,6 +409,8 @@ function pci_bind_driver () [[ -w "/sys/bus/pci/devices/$PCIDOMAIN/driver/unbind" ]] && \ { echo "$PCIDOMAIN" > "/sys/bus/pci/devices/$PCIDOMAIN/driver/unbind" || fail_exit "couldn't unbind"; } echo "$PCIDOMAIN" > "$PCI_BIND_DRIVER/bind" || fail_exit "couldn't bind" + + unlock "$BIND_DRIVER_NAME" } function pci_unbind_driver() |