diff options
author | Matt Delco <delco@chromium.org> | 2019-10-07 22:32:47 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-10-23 22:20:15 +0000 |
commit | 4ad168c0d7859fd8bcefe77b60c14327f094f6e7 (patch) | |
tree | d784659e0462298ab784e4da55fd406910a8cffa | |
parent | 30de32f2af9a2a57d74a7fdaf01e6e1fdce3c9e5 (diff) | |
download | crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.tar crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.tar.gz crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.tar.bz2 crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.tar.lz crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.tar.xz crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.tar.zst crosvm-4ad168c0d7859fd8bcefe77b60c14327f094f6e7.zip |
crosvm: add support for immediate exit
Adds ability to set the immediate exit bit and ask kvm if it's supported. BUG=None TEST=local compile and test Change-Id: I5c58a5920ebda13267efeb079c0bb671f83464ee Signed-off-by: Matt Delco <delco@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1847857 Reviewed-by: Zach Reizner <zachr@chromium.org>
-rw-r--r-- | kvm/src/cap.rs | 1 | ||||
-rw-r--r-- | kvm_sys/src/aarch64/bindings.rs | 16 | ||||
-rw-r--r-- | kvm_sys/src/x86/bindings.rs | 16 |
3 files changed, 29 insertions, 4 deletions
diff --git a/kvm/src/cap.rs b/kvm/src/cap.rs index b095f82..7dfd965 100644 --- a/kvm/src/cap.rs +++ b/kvm/src/cap.rs @@ -118,4 +118,5 @@ pub enum Cap { PpcEnableHcall = KVM_CAP_PPC_ENABLE_HCALL, CheckExtensionVm = KVM_CAP_CHECK_EXTENSION_VM, S390UserSigp = KVM_CAP_S390_USER_SIGP, + ImmediateExit = KVM_CAP_IMMEDIATE_EXIT, } diff --git a/kvm_sys/src/aarch64/bindings.rs b/kvm_sys/src/aarch64/bindings.rs index 26b10b4..7be9e0d 100644 --- a/kvm_sys/src/aarch64/bindings.rs +++ b/kvm_sys/src/aarch64/bindings.rs @@ -436,6 +436,7 @@ pub const KVM_CAP_GUEST_DEBUG_HW_BPS: ::std::os::raw::c_uint = 119; pub const KVM_CAP_GUEST_DEBUG_HW_WPS: ::std::os::raw::c_uint = 120; pub const KVM_CAP_SPLIT_IRQCHIP: ::std::os::raw::c_uint = 121; pub const KVM_CAP_IOEVENTFD_ANY_LENGTH: ::std::os::raw::c_uint = 122; +pub const KVM_CAP_IMMEDIATE_EXIT: ::std::os::raw::c_uint = 136; pub const KVM_IRQ_ROUTING_IRQCHIP: ::std::os::raw::c_uint = 1; pub const KVM_IRQ_ROUTING_MSI: ::std::os::raw::c_uint = 2; pub const KVM_IRQ_ROUTING_S390_ADAPTER: ::std::os::raw::c_uint = 3; @@ -1652,7 +1653,8 @@ fn bindgen_test_layout_kvm_s390_skeys() { #[derive(Copy, Clone)] pub struct kvm_run { pub request_interrupt_window: __u8, - pub padding1: [__u8; 7usize], + pub immediate_exit: __u8, + pub padding1: [__u8; 6usize], pub exit_reason: __u32, pub ready_for_interrupt_injection: __u8, pub if_flag: __u8, @@ -3143,12 +3145,22 @@ fn bindgen_test_layout_kvm_run() { ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).padding1 as *const _ as usize }, + unsafe { &(*(::std::ptr::null::<kvm_run>())).immediate_exit as *const _ as usize }, 1usize, concat!( "Offset of field: ", stringify!(kvm_run), "::", + stringify!(immediate_exit) + ) + ); + assert_eq!( + unsafe { &(*(::std::ptr::null::<kvm_run>())).padding1 as *const _ as usize }, + 2usize, + concat!( + "Offset of field: ", + stringify!(kvm_run), + "::", stringify!(padding1) ) ); diff --git a/kvm_sys/src/x86/bindings.rs b/kvm_sys/src/x86/bindings.rs index 06b8680..a9d792f 100644 --- a/kvm_sys/src/x86/bindings.rs +++ b/kvm_sys/src/x86/bindings.rs @@ -422,6 +422,7 @@ pub const KVM_CAP_GUEST_DEBUG_HW_BPS: ::std::os::raw::c_uint = 119; pub const KVM_CAP_GUEST_DEBUG_HW_WPS: ::std::os::raw::c_uint = 120; pub const KVM_CAP_SPLIT_IRQCHIP: ::std::os::raw::c_uint = 121; pub const KVM_CAP_IOEVENTFD_ANY_LENGTH: ::std::os::raw::c_uint = 122; +pub const KVM_CAP_IMMEDIATE_EXIT: ::std::os::raw::c_uint = 136; pub const KVM_IRQ_ROUTING_IRQCHIP: ::std::os::raw::c_uint = 1; pub const KVM_IRQ_ROUTING_MSI: ::std::os::raw::c_uint = 2; pub const KVM_IRQ_ROUTING_S390_ADAPTER: ::std::os::raw::c_uint = 3; @@ -4040,7 +4041,8 @@ fn bindgen_test_layout_kvm_s390_skeys() { #[derive(Copy, Clone)] pub struct kvm_run { pub request_interrupt_window: __u8, - pub padding1: [__u8; 7usize], + pub immediate_exit: __u8, + pub padding1: [__u8; 6usize], pub exit_reason: __u32, pub ready_for_interrupt_injection: __u8, pub if_flag: __u8, @@ -5532,12 +5534,22 @@ fn bindgen_test_layout_kvm_run() { ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).padding1 as *const _ as usize }, + unsafe { &(*(::std::ptr::null::<kvm_run>())).immediate_exit as *const _ as usize }, 1usize, concat!( "Offset of field: ", stringify!(kvm_run), "::", + stringify!(immediate_exit) + ) + ); + assert_eq!( + unsafe { &(*(::std::ptr::null::<kvm_run>())).padding1 as *const _ as usize }, + 2usize, + concat!( + "Offset of field: ", + stringify!(kvm_run), + "::", stringify!(padding1) ) ); |