- [#275]: Introduce
riscv64
ioctls.
- [#289]: Drop
x86
32-bit andarm
32-bit support.
- [#264]: Added
KVM_SET_USER_MEMORY_REGION2
,KVM_CREATE_GUEST_MEMFD
andKVM_SET_MEMORY_ATTRIBUTES
ioctls. - [#267]: Added
HypercallExit
field toVcpuExit::Hypercall
and addedExitHypercall
toCap
. - [#270]: Added
MemoryFaultInfo
toCap
and propagatedMemoryFault
exit reason inKVM_RUN
.
- [#255]: Fixed a
soundness issue when accessing the
kvm_run
struct.VcpuFd::run()
andVcpuFd::set_kvm_immediate_exit()
now take&mut self
as a consequence. - [#260]: Updated kvm-bindings to 0.8.0.
- [#242] x86: add support
for SMI injection via
Vcpu::smi()
(KVM_SMI
ioctl). - [#241] Add support for userspace MSR handling.
- [#246] Add support for
userspace NMI injection (
KVM_NMI
ioctl). - [#244] add support for
coalesced MMIO (
KVM_CAP_COALESCED_MMIO
/KVM_CAP_COALESCED_PIO
)
- [#234] vcpu: export reg_size as a public method.
- [#243] derived the
Copy
trait forIoEventAddress
andNoDatamatch
.
- [#230] Added
check_extension_raw
method to use raw integer values instead ofCap
enum. - [#228] arm64: add support for vCPU SVE feature.
- [#219] Add
Cap::ArmPtrAuthAddress
andCap::ArmPtrAuthGeneric
capabilities.
- [#219] Support for
KVM_GET_MSR_FEATURE_INDEX_LIST
andKVM_GET_MSRS
system ioctls. - [#221] Add
Cap::ArmPmuV3
.
- [#223] aarch64:
Updated
get/set_one_reg
to support different registers sizes through byte slices.
- [#213] Add
Kvm::new_with_path()
andKvm::open_with_cloexec_at()
to allow using kvm device files other than/dev/kvm
.
- [#187] Support for
KVM_SET_IDENTITY_MAP_ADDR
- Derive Debug for all exported structs and enums
- [#189] Expose
KVM_SET_
andKVM_HAS_DEVICE_ATTR
for vcpu - [#191] Add
KVM_TRANSLATE
support and thetranslate_gva
function that translates guest virtual address to the physical address - [#190] Enable usage of
sync_regs
to allow bulk getting and setting of general purpose registers, reducing the number of ioctls needed. - [#198] Return details about
KVM_EXIT_FAIL_ENTRY
in vCPU run - [#199] Add
register_irqfd_with_resample
so thatirqfd
+resaplefd
can be registered throughKVM_IRQFD
- [#202] Add
KVM_CAP_GUEST_DEBUG_HVM_DPS/WPS
- [#202] Added
check_extension_int
which allows checking the capabilities that return numbers instead of booleans
- Updated vmm-sys-util to 0.11.0
- Updated kvm-bindings to 0.6.0
- Upgraded to rust 2021 edition
- Switched to specifying dependencies using caret requirements instead of comparision requirements
- [#195] Do not panic on unsupported
KVM_EXIT
reason - [#196] Expose a mutable reference
to the
kvm_run
structure to allow proper handling of unsupported exit reasons - [#200] Fix wrong
target_arch
gate preventingset_guest_debug
from being exported on ARM - [#206] use
u128
inget/set_on_reg
- [#178] Support for the AMD
Security Encrypted Virtualization (SEV) through the following VM ioctls:
encrypt_op
,encrypt_op_sev
,register_enc_memory_region
andunregister_enc_memory_region
. - [#184]
DeviceFd
now derivesDebug
.
- Now depends on kvm-bindings >=0.5.0 which replaced the v4.20 KVM bindings with the v5.13 ones.
- Updated
VcpuExit::Debug
to return architecture specific information for the debug event.
- Support for accessing and controlling the Time Stamp Counter on x86 platforms
through the
get_tsc_khz
andset_tsc_khz
functions.
- Updated
create_vm
onaarch64
to create a VM fd from the KVM fd using the host's maximum IPA size.
- Support for specifying VM type (an opaque platform and architecture specific
constant) when creating a VM (
KVM_CREATE_VM
ioctl) via theKvm::create_vm_with_type
function.
- Now depends on kvm-bindings >=0.4.0 to support use of a newer vmm-sys-utils dependency.
- Support for the system API that returns the maximum allowed vCPU ID
(
KVM_CAP_MAX_VCPU_ID
). - Support for
KVM_MEMORY_ENCRYPT_OP
.
- [#119]: Disallow invalid
number of cpuid entries to be passed to
get_supported_cpuid
andget_emulated_cpuid
.
- [#123]: Updated
create_vcpu
to useu64
as the parameter for the number of vCPUs.
- Support for the vcpu ioctls:
KVM_SET_GUEST_DEBUG
,KVM_KVMCLOCK_CTRL
, andKVM_GET_REG_LIST
. - Support for the vm ioctl
KVM_GET_DEVICE_ATTR
. - Support for the device ioctl
KVM_HAS_DEVICE_ATTR
. - Support for
VcpuExit::Debug
. - Support for enabling vcpu capabilities using
Vcpu::enable_cap
. - Support for checking Hyper-V (
HypervSynic
andHypervSynic2
), MSI (MsiDevid
), and IPA Size (ArmVmIPASize
) capabilities. usingkvm.check_extension
. - Support for checking the VM capabilities via
Vm::check_extension
. - Create a VM with flexible IPA size using
Kvm::create_vm_with_ipa_size
.
- Removed
Kvm::new_with_fd_number
. The same functionality is offered by theKvm
FromRawFd trait implementation.
- The VM ioctl
unregister_ioevent
now correctly unregisters the events that correspond to the data match passed as a parameter. - The
SystemEvent
Vcpu Exit now also contains the relevant type and flags. - Updated
get_dirty_log
such that it does not assume the page size is 4K, but instead reads it usinglibc::sysconf
.
- Support for the vcpu ioctls
KVM_GET/SET_VCPU_EVENTS
andKVM_GET_DIRTY_LOG
onaarch64
. - Support for the vcpu ioctl
KVM_IRQ_LINE
.
- Support for unregistering ioeventfds through
KVM_IOEVENTFD
.
- Functions working with event FDs now require vmm_sys_util::eventfd::EventFd in their interface instead of RawFd.
- Functions working with FAM structs kvm_msr_list and kvm_msrs, were changed to work with their respective safe counterparts MsrList and respectively Msrs.
- Now exporting kvm_ioctls::Error type definition so that users of this crate can create their own wrapping errors without having to know the Error type used internally by this crate.
- No longer exporting kvm_ioctls::Result. Users of this crate should not have to use kvm_ioctls::Result outside the crate.
- kvm_ioctls::Error now works with errno::Error instead of io::Error.
- CpuId safe wrapper over FAM struct kvm_cpuid2. The safe wrapper is now provided by the kvm_bindings crate starting with v0.2.0.
- KVM_MAX_MSR_ENTRIES and MAX_KVM_CPUID_ENTRIES. Equivalent constants are provided by the kvm_bindings crate starting with v0.2.0.
- Support for setting vcpu
kvm_immediate_exit
flag - Support for the vcpu ioctl
KVM_GET_CPUID2
- Support for the vcpu ioctl
KVM_GET_MP_STATE
- Support for the vcpu ioctl
KVM_SET_MP_STATE
- Support for the vcpu ioctl
KVM_GET_VCPU_EVENTS
- Support for the vcpu ioctl
KVM_SET_VCPU_EVENTS
- Support for the vcpu ioctl
KVM_GET_DEBUGREGS
- Support for the vcpu ioctl
KVM_SET_DEBUGREGS
- Support for the vcpu ioctl
KVM_GET_XSAVE
- Support for the vcpu ioctl
KVM_SET_XSAVE
- Support for the vcpu ioctl
KVM_GET_XCRS
- Support for the vcpu ioctl
KVM_SET_XCRS
- Support for the vm ioctl
KVM_GET_IRQCHIP
- Support for the vm ioctl
KVM_SET_IRQCHIP
- Support for the vm ioctl
KVM_GET_CLOCK
- Support for the vm ioctl
KVM_SET_CLOCK
- Support for the vm ioctl
KVM_GET_PIT2
- Support for the vm ioctl
KVM_SET_PIT2
- Support for the vcpu ioctl
KVM_GET_ONE_REG
- Function offering support for
KVM_SET_MSRS
also returns the number of MSR entries successfully written.
- Add support for
KVM_ENABLE_CAP
. - Add support for
KVM_SIGNAL_MSI
.
- Fix bug in KvmRunWrapper. The memory for kvm_run struct was not unmapped after the KvmRunWrapper object got out of scope.
- Return proper value when receiving the EOI KVM exit.
- Mark set_user_memory_region as unsafe.
First release of the kvm-ioctls crate.
The kvm-ioctls crate provides safe wrappers over the KVM API, a set of ioctls used for creating and configuring Virtual Machines (VMs) on Linux. The ioctls are accessible through four structures:
- Kvm - wrappers over system ioctls
- VmFd - wrappers over VM ioctls
- VcpuFd - wrappers over vCPU ioctls
- DeviceFd - wrappers over device ioctls
The kvm-ioctls can be used on x86_64 and aarch64. Right now the aarch64 support is considered experimental.