🠛
QuantaVirt ›
Error Code Reference
Error Code Reference
QV-REF-ERR
Rev 1.0 — January 2026
Reference
Complete reference for all error codes, status codes, and failure responses across every QuantaVirt subsystem — hypervisor core, VM lifecycle, CPU virtualization, memory management, storage, networking, PQC cryptography, QUAC 100 hardware, live migration, REST API, and CLI exit codes. Each entry includes the numeric value, symbolic name, human-readable description, common causes, and recommended recovery actions.
Error Code Overview #
QuantaVirt uses a unified error code system across all subsystems. Error codes are negative 32-bit signed integers organized by subsystem range. A value of 0 always indicates success.
Range Subsystem Prefix Header
0Success — quantavirt/error.h
-1 to -99Hypervisor Core QV_ERR_quantavirt/error.h
-100 to -199PQC Subsystem PQC_ERR_quantavirt/pqc_error.h
-200 to -299QUAC 100 Driver QUAC100_ERR_quantavirt/quac100_error.h
-300 to -399Migration QV_MIG_ERR_quantavirt/migration_error.h
-400 to -499Storage QV_STR_ERR_quantavirt/storage_error.h
-500 to -599Network QV_NET_ERR_quantavirt/network_error.h
Error codes appear in logs, CLI output, and API responses in a consistent format:
/* Log format */
[ERROR] quantavirt::vm: VM start failed: QV_ERR_NOVMX (-3): hardware virtualization not enabled in BIOS
/* CLI output */
$ quantavirt vm start my-vm
Error: QV_ERR_NOVMX (-3): Intel VMX / AMD SVM not available — enable in BIOS/UEFI
/* REST API JSON response */
{
"error": {
"code": -3,
"name": "QV_ERR_NOVMX",
"message": "Intel VMX / AMD SVM not available",
"detail": "Enable hardware virtualization in BIOS/UEFI settings",
"subsystem": "hypervisor"
}
}
/* C API */
int ret = qv_vm_start(vm);
if (ret < 0) {
fprintf(stderr, "Failed: %s (%d): %s\n",
qv_strerror_name(ret), ret, qv_strerror(ret));
}
Hypervisor Core (QV_ERR_*) #
General hypervisor errors returned by core subsystem operations.
Code Name Description Common Cause Recovery
0QV_SUCCESS Operation completed successfully — —
-1QV_ERR_GENERIC Unspecified internal error Bug or unexpected state Check logs, report issue
-2QV_ERR_NOMEM Insufficient host memory Host RAM exhausted; hugepage pool depleted Free memory or reduce VM sizes; check hugepage allocation
-3QV_ERR_NOVMX Hardware virtualization not available Intel VMX / AMD SVM disabled in BIOS or not supported Enable VT-x/AMD-V in BIOS/UEFI; verify CPU model supports virtualization
-4QV_ERR_NOIOMMU IOMMU not available Intel VT-d / AMD-Vi disabled or not present Enable IOMMU in BIOS; add intel_iommu=on or amd_iommu=on to kernel cmdline
-5QV_ERR_INVAL Invalid parameter or argument Malformed config, out-of-range value, type mismatch Validate configuration against schema; check parameter constraints
-6QV_ERR_NOENT Resource not found VM name, disk path, network, or key not found Verify resource name/path exists; check spelling
-7QV_ERR_EXIST Resource already exists Duplicate VM name, conflicting network name Use a unique name or delete the existing resource
-8QV_ERR_BUSY Resource is busy or locked Disk locked by another VM; operation in progress Wait for current operation to complete; check for stale locks
-9QV_ERR_PERM Permission denied Insufficient privileges; file permission issue Run as root or with quantavirt group membership; check file ownership
-10QV_ERR_NODEV Device not found or not available PCI device missing; QUAC 100 not detected Check lspci; reseat card; verify driver loaded
-11QV_ERR_IO I/O error Disk read/write failure; device communication timeout Check disk health (smartctl); verify device connectivity
-12QV_ERR_TIMEOUT Operation timed out VM failed to respond within deadline; device stall Increase timeout; check for system load; verify device health
-13QV_ERR_AGAIN Try again (transient failure) Temporary resource contention Retry the operation after a brief delay
-14QV_ERR_NOSPC No space left Storage pool full; no available VM slots Free disk space; remove unused VMs or snapshots
-15QV_ERR_UNSUPPORTED Feature not supported Requested capability not available on this hardware/firmware Check quantavirt system capabilities; upgrade firmware
-16QV_ERR_STATE Invalid state transition Operation not allowed in current VM state (e.g. migrate a stopped VM) Check VM state with quantavirt vm show; follow valid state transitions
-17QV_ERR_CONFIG Configuration error Invalid JSON, missing required field, schema violation Validate config with quantavirt vm validate --config <file>
-18QV_ERR_LIMIT Resource limit exceeded Max VMs, max vCPUs, max NICs, max disks reached Remove unused resources or increase limits in system config
-19QV_ERR_AUTH Authentication failed Invalid API token; expired credentials Re-authenticate; generate new token with quantavirt system token create
-20QV_ERR_VERSION Version incompatibility Config schema version mismatch; incompatible firmware Update configuration to current schema version; upgrade firmware
VM Lifecycle Errors #
Code Name Description Recovery
-21QV_ERR_VM_CREATE VM creation failed Check config validation; verify resource availability
-22QV_ERR_VM_START VM start failed Check VMCS/VMCB allocation; verify hardware virtualization
-23QV_ERR_VM_STOP VM stop failed Force stop with --force; check for stuck state
-24QV_ERR_VM_DESTROY VM destruction failed Stop VM first; check for active migration or snapshot
-25QV_ERR_VM_PAUSE VM pause failed Verify VM is running; check hypervisor state
-26QV_ERR_VM_RESUME VM resume failed Verify VM is paused; check resource availability
-27QV_ERR_VM_SNAPSHOT Snapshot creation failed Check disk space; verify qcow2 format (raw disks don't support snapshots)
-28QV_ERR_VM_RESTORE Snapshot restore failed Stop VM first; verify snapshot exists and isn't corrupted
-29QV_ERR_VM_CLONE VM clone failed Check disk space; stop source VM if using linked clone
-30QV_ERR_VM_STUCK VM is in unresponsive state Force destroy: quantavirt vm destroy --force <name>
CPU Virtualization Errors #
Code Name Description Recovery
-31QV_ERR_VMCS_ALLOC Failed to allocate VMCS (Intel) structure Free memory; reduce running VM count
-32QV_ERR_VMCB_ALLOC Failed to allocate VMCB (AMD) structure Free memory; reduce running VM count
-33QV_ERR_VMLAUNCH VMLAUNCH instruction failed Check VMCS fields; dmesg for VMX abort; verify nested virtualization
-34QV_ERR_VMRESUME VMRESUME instruction failed Check VM-exit reason in logs; verify VMCS consistency
-35QV_ERR_VMEXIT Unexpected VM-exit Log exit reason; check guest for triple fault or invalid instructions
-36QV_ERR_EPT_SETUP EPT (Intel) setup failed Check memory available for page tables; verify EPT support in CPUID
-37QV_ERR_NPT_SETUP NPT (AMD) setup failed Check memory for page tables; verify NPT support
-38QV_ERR_EPT_VIOLATION Unhandled EPT violation Guest accessed unmapped memory; check memory config
-39QV_ERR_CPUID CPUID emulation error Unsupported leaf; check CPU model configuration
-40QV_ERR_MSR MSR access error Guest accessed forbidden MSR; check MSR bitmap configuration
-41QV_ERR_PIN vCPU pinning failed Specified pCPU doesn't exist or is offline; verify CPU topology
-42QV_ERR_TOPOLOGY CPU topology validation failed sockets × cores × threads must equal vCPU count
-43QV_ERR_TRIPLE_FAULT Guest triggered triple fault Guest OS crashed; check guest boot config and kernel
Memory Subsystem Errors #
Code Name Description Recovery
-51QV_ERR_HUGEPAGE Hugepage allocation failed Pre-allocate: echo N > /proc/sys/vm/nr_hugepages
-52QV_ERR_BALLOON Balloon driver communication failed Install VirtIO balloon driver in guest; check guest agent
-53QV_ERR_HOTPLUG_MEM Memory hot-add failed Guest kernel must support ACPI memory hotplug; check max_size
-54QV_ERR_MEM_ENCRYPT Memory encryption setup failed Verify AMD SEV or Intel TDX support on host; check firmware
-55QV_ERR_NUMA NUMA allocation failed Requested NUMA node doesn't exist or has insufficient memory
Storage Subsystem Errors #
Code Name Description Recovery
-400QV_STR_ERR_OPEN Failed to open disk image Check file path, permissions, and format
-401QV_STR_ERR_FORMAT Unrecognized or corrupt disk format Verify format; run qemu-img check for qcow2
-402QV_STR_ERR_LOCK Disk image locked by another process Check for other VMs using this disk; remove stale lock files
-403QV_STR_ERR_READONLY Write to read-only disk Set "readonly": false or use a writable disk
-404QV_STR_ERR_FULL Disk image or storage pool full Expand disk image; free host filesystem space
-405QV_STR_ERR_IO Disk I/O error Check host disk health; verify NFS/iSCSI connectivity
-406QV_STR_ERR_QCOW2_CORRUPT QCOW2 metadata corruption detected Run qemu-img check --repair; restore from backup
-407QV_STR_ERR_SNAPSHOT Snapshot operation failed Check qcow2 integrity; ensure sufficient disk space
-408QV_STR_ERR_ENCRYPT_KEY Disk encryption key unavailable Ensure PQC subsystem is running; check keystore
-409QV_STR_ERR_ENCRYPT_FAIL Disk encryption/decryption failed Verify key correctness; check QUAC 100 status
-410QV_STR_ERR_CONTROLLER Storage controller initialization failed Check controller type compatibility; reduce queue count
-411QV_STR_ERR_DISCARD TRIM/discard operation failed Verify host filesystem supports discard; check VirtIO config
Network Subsystem Errors #
Code Name Description Recovery
-500QV_NET_ERR_CREATE Network creation failed Check for IP conflicts; verify bridge/TAP permissions
-501QV_NET_ERR_BRIDGE Bridge interface error Verify bridge exists: ip link show <bridge>; check permissions
-502QV_NET_ERR_TAP TAP device creation failed Check /dev/net/tun permissions; load tun kernel module
-503QV_NET_ERR_VHOST vhost-net activation failed Load vhost_net module; check /dev/vhost-net permissions
-504QV_NET_ERR_VHOST_USER vhost-user socket connection failed Verify DPDK application is running; check socket path and permissions
-505QV_NET_ERR_DHCP DHCP server startup failed Check for port conflicts; verify network subnet configuration
-506QV_NET_ERR_NAT NAT/masquerade setup failed Check iptables/nftables; verify IP forwarding is enabled
-507QV_NET_ERR_MAC Invalid or duplicate MAC address Use valid MAC format; let QuantaVirt auto-generate
-508QV_NET_ERR_MTU MTU configuration failed Verify host NIC supports requested MTU; check jumbo frame support
-509QV_NET_ERR_PQC_TUNNEL PQC tunnel establishment failed Check PQC subsystem status; verify remote endpoint supports PQC
-510QV_NET_ERR_FIREWALL Firewall rule application failed Check iptables/nftables syntax; verify rule conflicts
PQC Subsystem (PQC_ERR_*) #
Code Name Description Recovery
-100PQC_ERR_INIT PQC subsystem initialization failed Check QUAC 100 driver loaded; verify /dev/quac100 exists
-101PQC_ERR_KEYGEN Key generation failed Check QRNG health; verify algorithm parameters
-102PQC_ERR_ENCAPS ML-KEM encapsulation failed Verify public key validity; check input sizes
-103PQC_ERR_DECAPS ML-KEM decapsulation failed Verify secret key matches; check ciphertext integrity
-104PQC_ERR_SIGN ML-DSA signing failed Verify secret key; check message size
-105PQC_ERR_VERIFY ML-DSA signature verification failed Signature invalid — possible tampering or key mismatch
-106PQC_ERR_ENCRYPT AEAD encryption failed Check key and nonce; verify input length
-107PQC_ERR_DECRYPT AEAD decryption failed (auth tag mismatch) Data integrity violation — ciphertext tampered or wrong key
-108PQC_ERR_KEYSTORE Keystore access error Check keystore file permissions; verify keystore isn't locked
-109PQC_ERR_KEY_NOT_FOUND Referenced key ID not found in keystore List keys: quantavirt crypto key list; re-import key
-110PQC_ERR_KEY_EXPIRED Key has passed its expiration date Rotate key: quantavirt crypto key rotate
-111PQC_ERR_ALGORITHM Unsupported or invalid algorithm identifier Use valid strings: ML-KEM-512, ML-KEM-768, ML-KEM-1024, etc.
-112PQC_ERR_PARAM_SET Invalid parameter set for algorithm Verify parameter set matches algorithm (e.g. ML-DSA-44/65/87)
-113PQC_ERR_QRNG QRNG entropy unavailable Check QRNG health: quantavirt crypto qrng status; wait for pool refill
-114PQC_ERR_SELF_TEST PQC self-test failed Hardware/firmware fault — run diagnostics; contact support
-115PQC_ERR_ATTESTATION VM attestation failed Measurement mismatch — VM image may have been modified; re-attest
-116PQC_ERR_FALLBACK Software fallback failed Both hardware and software backends unavailable; check installation
-117PQC_ERR_KDF Key derivation failed Invalid inputs to HKDF; check salt and info strings
QUAC 100 Hardware (QUAC100_ERR_*) #
Driver-level errors when communicating with the QUAC 100 PCIe card.
Code Name Description Recovery
-200QUAC100_ERR_NOT_FOUND QUAC 100 device not detected on PCIe bus Reseat card; check lspci | grep 1DB7; verify power cable
-201QUAC100_ERR_DRIVER Driver initialization failed Reload: modprobe quac100; check dmesg for errors
-202QUAC100_ERR_FW_VERSION Firmware version incompatible with driver Update firmware: quantavirt crypto quac100 fw-update <image>
-203QUAC100_ERR_MMIO BAR0 MMIO mapping failed Check IOMMU configuration; verify no address conflict in PCIe
-204QUAC100_ERR_RING_INIT Command/response ring initialization failed Check DMA-capable memory allocation; verify IOMMU passthrough
-205QUAC100_ERR_RING_FULL Command ring is full Wait for completions; increase ring size; check for stalled commands
-206QUAC100_ERR_DMA DMA transfer failed Check IOMMU mappings; verify physical address validity
-207QUAC100_ERR_INTERRUPT MSI-X interrupt delivery failure Check interrupt allocation; verify MSI-X not exhausted
-208QUAC100_ERR_OVERTEMP Device thermal throttling — operation rejected Improve cooling; check fan operation; reduce workload
-209QUAC100_ERR_WATCHDOG Hardware watchdog expired Device may be hung — reset: quantavirt crypto quac100 reset
-210QUAC100_ERR_SELF_TEST Hardware self-test failed Power cycle system; if persistent, RMA the card
-211QUAC100_ERR_FW_UPDATE Firmware update failed Device reverts to previous bank; retry update with verified image
-212QUAC100_ERR_NTT NTT engine error Reset NTT engine; check polynomial parameters
-213QUAC100_ERR_QRNG_HEALTH QRNG health test failed Entropy source degraded; device will auto-recover or use software RNG fallback
-214QUAC100_ERR_POWER Auxiliary power not connected Connect 6-pin PCIe power cable to the QUAC 100
QUAC 100 Response Codes #
These are the 16-bit status codes returned in hardware response descriptors (see QUAC 100 Register Map → Response Codes ). The driver translates them to QUAC100_ERR_* codes above.
Code Name Description Maps To
0x0000QUAC100_RESP_SUCCESS Operation completed successfully QV_SUCCESS (0)
0x0001QUAC100_RESP_INVALID_OPCODE Unknown or unsupported opcode QV_ERR_UNSUPPORTED (-15)
0x0002QUAC100_RESP_INVALID_PARAM Invalid parameter set or key handle QV_ERR_INVAL (-5)
0x0003QUAC100_RESP_INVALID_LEN Input or output length out of range QV_ERR_INVAL (-5)
0x0004QUAC100_RESP_DMA_ERROR DMA read/write failed QUAC100_ERR_DMA (-206)
0x0005QUAC100_RESP_CRYPTO_FAIL Cryptographic operation failed PQC_ERR_DECRYPT (-107)
0x0006QUAC100_RESP_KEY_NOT_FOUND Key ID not in hardware keystore PQC_ERR_KEY_NOT_FOUND (-109)
0x0007QUAC100_RESP_BUSY Engine busy — retry later QV_ERR_AGAIN (-13)
0x0008QUAC100_RESP_TIMEOUT Operation timed out (watchdog) QUAC100_ERR_WATCHDOG (-209)
0x0009QUAC100_RESP_SELF_TEST_FAIL Self-test detected internal error QUAC100_ERR_SELF_TEST (-210)
0x000AQUAC100_RESP_QRNG_DEPLETED QRNG entropy pool empty PQC_ERR_QRNG (-113)
0x000BQUAC100_RESP_QRNG_HEALTH_FAIL QRNG health test failed QUAC100_ERR_QRNG_HEALTH (-213)
0x000CQUAC100_RESP_OVERTEMP Rejected due to thermal throttling QUAC100_ERR_OVERTEMP (-208)
0x000DQUAC100_RESP_FW_ERROR Firmware internal error QV_ERR_GENERIC (-1)
0x00FFQUAC100_RESP_UNKNOWN Unknown error — hardware fault QV_ERR_GENERIC (-1)
Migration Errors #
Code Name Description Recovery
-300QV_MIG_ERR_CONNECT Failed to connect to destination host Check network connectivity; verify destination hypervisor is running
-301QV_MIG_ERR_AUTH Migration authentication failed Verify PQC key exchange; ensure both hosts share trust domain
-302QV_MIG_ERR_CPU_COMPAT CPU model incompatible between hosts Use a named CPU model instead of "host"; match CPU features
-303QV_MIG_ERR_MEM_TRANSFER Memory page transfer failed Check bandwidth; increase timeout; reduce dirty page rate
-304QV_MIG_ERR_CONVERGE Dirty page rate exceeds transfer rate — migration cannot converge Enable auto_converge; reduce guest I/O; increase bandwidth
-305QV_MIG_ERR_DOWNTIME Estimated downtime exceeds max_downtime_ms Increase max_downtime_ms; reduce VM memory; use postcopy mode
-306QV_MIG_ERR_CANCEL Migration was cancelled Migration aborted by user or policy — VM continues on source
-307QV_MIG_ERR_PQC_KEY PQC key exchange for migration channel failed Verify QUAC 100 or software PQC backend on both hosts
-308QV_MIG_ERR_STORAGE Shared storage not accessible from destination Ensure NFS/iSCSI/CEPH is mounted on both hosts
-309QV_MIG_ERR_RDMA RDMA transport initialization failed Verify RDMA NICs and ibverbs; fall back to TCP transport
-310QV_MIG_ERR_DEVICE Device state migration failed Check device compatibility; hot-unplug problematic devices first
REST API Error Responses #
The REST API returns standard HTTP status codes with a JSON error body containing the internal error code.
HTTP Status Meaning Internal Codes Example
400Bad Request QV_ERR_INVAL, QV_ERR_CONFIG Malformed JSON, invalid parameter
401Unauthorized QV_ERR_AUTH Missing or invalid API token
403Forbidden QV_ERR_PERM Token lacks required permission scope
404Not Found QV_ERR_NOENT VM, network, or disk not found
409Conflict QV_ERR_EXIST, QV_ERR_STATE, QV_ERR_BUSY Name conflict; invalid state transition; resource locked
422Unprocessable Entity QV_ERR_CONFIG, QV_ERR_TOPOLOGY Valid JSON but fails schema validation
429Too Many Requests QV_ERR_LIMIT API rate limit exceeded
500Internal Server Error QV_ERR_GENERIC Unexpected internal error
503Service Unavailable QV_ERR_AGAIN, QUAC100_ERR_NOT_FOUND Hypervisor restarting; hardware unavailable
507Insufficient Storage QV_ERR_NOSPC, QV_ERR_NOMEM Disk space or memory exhausted
/* Example 409 Conflict response */
HTTP/1.1 409 Conflict
Content-Type: application/json
{
"error": {
"code": -16,
"name": "QV_ERR_STATE",
"message": "Invalid state transition",
"detail": "Cannot migrate VM 'web-server': current state is STOPPED (must be RUNNING)",
"subsystem": "hypervisor",
"request_id": "req-7a3b4c5d"
}
}
CLI Exit Codes #
The quantavirt CLI maps internal error codes to standard Unix exit codes (0–125).
Exit Code Meaning Internal Errors
0Success QV_SUCCESS
1General error QV_ERR_GENERIC, any unmapped error
2Invalid arguments / usage QV_ERR_INVAL, QV_ERR_CONFIG
3Resource not found QV_ERR_NOENT
4Permission denied QV_ERR_PERM, QV_ERR_AUTH
5Resource conflict QV_ERR_EXIST, QV_ERR_BUSY, QV_ERR_STATE
6Hardware not available QV_ERR_NOVMX, QV_ERR_NODEV, QUAC100_ERR_NOT_FOUND
7Insufficient resources QV_ERR_NOMEM, QV_ERR_NOSPC, QV_ERR_LIMIT
8I/O error QV_ERR_IO, QV_STR_ERR_IO
9Timeout QV_ERR_TIMEOUT
10PQC / crypto error PQC_ERR_* (any)
11Migration error QV_MIG_ERR_* (any)
12Connection error API socket unreachable
125Feature not supported QV_ERR_UNSUPPORTED
Linux errno Mapping #
When QuantaVirt errors originate from system calls, the original errno is preserved and mapped.
errno Name QuantaVirt Mapping
1 EPERM QV_ERR_PERM (-9)
2 ENOENT QV_ERR_NOENT (-6)
5 EIO QV_ERR_IO (-11)
11 EAGAIN QV_ERR_AGAIN (-13)
12 ENOMEM QV_ERR_NOMEM (-2)
13 EACCES QV_ERR_PERM (-9)
16 EBUSY QV_ERR_BUSY (-8)
17 EEXIST QV_ERR_EXIST (-7)
19 ENODEV QV_ERR_NODEV (-10)
22 EINVAL QV_ERR_INVAL (-5)
28 ENOSPC QV_ERR_NOSPC (-14)
110 ETIMEDOUT QV_ERR_TIMEOUT (-12)
Diagnostic Commands #
Commands for investigating errors and collecting diagnostic information.
Look Up Error Code
$ quantavirt system error-lookup -3
QV_ERR_NOVMX (-3)
Description: Intel VMX / AMD SVM hardware virtualization not available
Subsystem: hypervisor
Severity: fatal
Common Causes:
- Hardware virtualization disabled in BIOS/UEFI
- CPU does not support VT-x (Intel) or AMD-V (AMD)
- Another hypervisor (VirtualBox, VMware) has locked VMX
Recovery:
1. Enable VT-x/AMD-V in BIOS/UEFI firmware settings
2. Verify: grep -c 'vmx\|svm' /proc/cpuinfo
3. Unload conflicting hypervisors: rmmod kvm_intel kvm
Search Logs by Error Code
$ quantavirt log tail --level error --last 1h
[2026-01-15 14:32:01 UTC] [ERROR] storage: QV_STR_ERR_LOCK (-402): /var/lib/quantavirt/disks/web.qcow2 locked by VM 'web-prod' (pid 4821)
[2026-01-15 14:32:01 UTC] [ERROR] vm: QV_ERR_VM_START (-22): VM 'web-staging' start failed: disk locked
$ quantavirt log tail --grep "PQC_ERR" --last 24h
[2026-01-15 10:15:43 UTC] [WARN] pqc: PQC_ERR_QRNG (-113): QRNG pool depleted, waiting for refill (pool: 0/4096 bytes)
[2026-01-15 10:15:44 UTC] [INFO] pqc: QRNG pool recovered (pool: 2048/4096 bytes)
Generate Support Bundle
$ quantavirt system support-bundle --output /tmp/diag.tar.gz
Collecting system info... done
Collecting hypervisor logs... done (42 MB)
Collecting VM configurations... done (14 VMs)
Collecting QUAC 100 diagnostics.. done
Collecting kernel messages... done
Collecting network state... done
Redacting sensitive data... done
Support bundle: /tmp/diag.tar.gz (8.2 MB compressed)
Upload to: support@dyber.org
C API Error Handling Functions
/* Error introspection API */
const char* qv_strerror(int code); // Human-readable description
const char* qv_strerror_name(int code); // Symbolic name (e.g. "QV_ERR_NOMEM")
const char* qv_strerror_subsystem(int code); // Subsystem name
int qv_error_is_transient(int code); // 1 if retryable (AGAIN, BUSY, TIMEOUT)
int qv_error_to_errno(int code); // Map to closest Linux errno
/* Example usage */
int ret = qv_vm_create(&vm, config);
if (ret < 0) {
if (qv_error_is_transient(ret)) {
sleep(1);
ret = qv_vm_create(&vm, config); // retry
} else {
fprintf(stderr, "Fatal: %s (%d): %s\n",
qv_strerror_name(ret), ret, qv_strerror(ret));
return EXIT_FAILURE;
}
}