diff options
-rw-r--r-- | Cargo.lock | 17 | ||||
-rw-r--r-- | Cargo.toml | 3 | ||||
-rw-r--r-- | aarch64/Cargo.toml | 16 | ||||
-rw-r--r-- | aarch64/src/fdt.rs | 447 | ||||
-rw-r--r-- | aarch64/src/lib.rs | 373 | ||||
-rw-r--r-- | kvm/src/lib.rs | 39 | ||||
-rw-r--r-- | kvm_sys/src/arm/bindings.rs | 6144 | ||||
-rw-r--r-- | kvm_sys/src/lib.rs | 4 | ||||
-rw-r--r-- | seccomp/aarch64/balloon_device.policy | 28 | ||||
-rw-r--r-- | seccomp/aarch64/block_device.policy | 32 | ||||
-rw-r--r-- | seccomp/aarch64/net_device.policy | 29 | ||||
-rw-r--r-- | seccomp/aarch64/rng_device.policy | 29 | ||||
-rw-r--r-- | seccomp/aarch64/vhost_net_device.policy | 46 | ||||
-rw-r--r-- | seccomp/aarch64/vhost_vsock_device.policy | 49 | ||||
-rw-r--r-- | src/linux.rs | 51 | ||||
-rw-r--r-- | src/main.rs | 2 |
16 files changed, 1114 insertions, 6195 deletions
diff --git a/Cargo.lock b/Cargo.lock index 9b523f7..2b8a4fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,4 +1,20 @@ [[package]] +name = "aarch64" +version = "0.1.0" +dependencies = [ + "arch 0.1.0", + "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "data_model 0.1.0", + "device_manager 0.1.0", + "devices 0.1.0", + "kernel_cmdline 0.1.0", + "kvm 0.1.0", + "kvm_sys 0.1.0", + "libc 0.2.34 (registry+https://github.com/rust-lang/crates.io-index)", + "sys_util 0.1.0", +] + +[[package]] name = "arch" version = "0.1.0" dependencies = [ @@ -29,6 +45,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" name = "crosvm" version = "0.1.0" dependencies = [ + "aarch64 0.1.0", "arch 0.1.0", "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "crosvm_plugin 0.13.0", diff --git a/Cargo.toml b/Cargo.toml index e720a57..1771719 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,6 +37,9 @@ qcow_utils = { path = "qcow_utils" } [target.'cfg(target_arch = "x86_64")'.dependencies] x86_64 = { path = "x86_64" } +[target.'cfg(any(target_arch = "aarch64", target_arch = "arm"))'.dependencies] +aarch64 = { path = "aarch64" } + [dev-dependencies] rand = "=0.3.20" sys_util = { path = "sys_util" } diff --git a/aarch64/Cargo.toml b/aarch64/Cargo.toml new file mode 100644 index 0000000..7793426 --- /dev/null +++ b/aarch64/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "aarch64" +version = "0.1.0" +authors = ["The Chromium OS Authors"] + +[dependencies] +arch = { path = "../arch" } +data_model = { path = "../data_model" } +device_manager = { path = "../device_manager" } +devices = { path = "../devices" } +kernel_cmdline = { path = "../kernel_cmdline" } +kvm_sys = { path = "../kvm_sys" } +kvm = { path = "../kvm" } +sys_util = { path = "../sys_util" } +libc = "*" +byteorder = "*" diff --git a/aarch64/src/fdt.rs b/aarch64/src/fdt.rs new file mode 100644 index 0000000..6e1776d --- /dev/null +++ b/aarch64/src/fdt.rs @@ -0,0 +1,447 @@ +// Copyright 2018 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +use byteorder::{ByteOrder, BigEndian}; +use libc::{c_char, c_int, c_void}; +use std::error::{self, Error as FdtError}; +use std::fmt; +use std::ffi::{CString, CStr}; +use std::ptr::null; + +use sys_util::{GuestAddress, GuestMemory}; + +// This is the start of DRAM in the physical address space. +use AARCH64_PHYS_MEM_START; + +// These are GIC address-space location constants. +use AARCH64_GIC_DIST_SIZE; +use AARCH64_GIC_CPUI_SIZE; +use AARCH64_GIC_DIST_BASE; +use AARCH64_GIC_CPUI_BASE; + +// These are serial device related constants. +use AARCH64_SERIAL_ADDR; +use AARCH64_SERIAL_SIZE; +use AARCH64_SERIAL_SPEED; + +// These are related to guest virtio devices. +use AARCH64_MMIO_BASE; +use AARCH64_MMIO_LEN; +use AARCH64_IRQ_BASE; + +// This is an arbitrary number to specify the node for the GIC. +// If we had a more complex interrupt architecture, then we'd need an enum for +// these. +const PHANDLE_GIC: u32 = 1; + +// These are specified by the Linux GIC bindings +const GIC_FDT_IRQ_NUM_CELLS: u32 = 3; +const GIC_FDT_IRQ_TYPE_SPI: u32 = 0; +const GIC_FDT_IRQ_TYPE_PPI: u32 = 1; +const GIC_FDT_IRQ_PPI_CPU_SHIFT: u32 = 8; +const GIC_FDT_IRQ_PPI_CPU_MASK: u32 = (0xff << GIC_FDT_IRQ_PPI_CPU_SHIFT); +const IRQ_TYPE_EDGE_RISING: u32 = 0x00000001; +const IRQ_TYPE_LEVEL_LOW: u32 = 0x00000008; + +// This links to libfdt which handles the creation of the binary blob +// flattened device tree (fdt) that is passed to the kernel and indicates +// the hardware configuration of the machine. +#[link(name = "fdt")] +extern { + fn fdt_create(buf: *mut c_void, bufsize: c_int) -> c_int; + fn fdt_finish_reservemap(fdt: *mut c_void) -> c_int; + fn fdt_begin_node(fdt: *mut c_void, name: *const c_char) -> c_int; + fn fdt_property(fdt: *mut c_void, name: *const c_char, val: *const c_void, + len: c_int) -> c_int; + fn fdt_end_node(fdt: *mut c_void) -> c_int; + fn fdt_open_into(fdt: *const c_void, buf: *mut c_void, bufsize: c_int) + -> c_int; + fn fdt_finish(fdt: *const c_void) -> c_int; + fn fdt_pack(fdt: *mut c_void) -> c_int; +} + +#[derive(Debug)] +pub enum Error { + FdtCreateError(c_int), + FdtFinishReservemapError(c_int), + FdtBeginNodeError(c_int), + FdtPropertyError(c_int), + FdtEndNodeError(c_int), + FdtOpenIntoError(c_int), + FdtFinishError(c_int), + FdtPackError(c_int), + FdtGuestMemoryWriteError, +} + +impl error::Error for Error { + fn description(&self) -> &str { + match self { + &Error::FdtCreateError(_) => "Error creating FDT", + &Error::FdtFinishReservemapError(_) => "Error finishing reserve map", + &Error::FdtBeginNodeError(_) => "Error beginning FDT node", + &Error::FdtPropertyError(_) => "Error adding FDT property", + &Error::FdtEndNodeError(_) => "Error ending FDT node", + &Error::FdtOpenIntoError(_) => "Error copying FDT to Guest", + &Error::FdtFinishError(_) => "Error performing FDT finish", + &Error::FdtPackError(_) => "Error packing FDT", + &Error::FdtGuestMemoryWriteError => + "Error writing FDT to Guest Memory", + } + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let prefix = "Libfdt Error: "; + match self { + &Error::FdtCreateError(fdt_ret) | + &Error::FdtFinishReservemapError(fdt_ret) | + &Error::FdtBeginNodeError(fdt_ret) | + &Error::FdtPropertyError(fdt_ret) | + &Error::FdtEndNodeError(fdt_ret) | + &Error::FdtOpenIntoError(fdt_ret) | + &Error::FdtFinishError(fdt_ret) | + &Error::FdtPackError(fdt_ret) => { + write!(f, "{} {} code: {}", prefix, + Error::description(self), fdt_ret) + }, + &Error::FdtGuestMemoryWriteError => + write!(f, "{} {}", prefix, Error::description(self)), + } + } +} + +// Our ARM systems are little-endian whereas fdts are big-endian, so we need +// to convert integers +fn cpu_to_fdt32(input: u32) -> [u8; 4] { + let mut buf = [0; 4]; + BigEndian::write_u32(&mut buf, input); + buf +} + +fn cpu_to_fdt64(input: u64) -> [u8; 8] { + let mut buf = [0; 8]; + BigEndian::write_u64(&mut buf, input); + buf +} + +fn begin_node(fdt: &mut Vec<u8>, name: &str) -> Result<(), Box<Error>> { + let cstr_name = CString::new(name).unwrap(); + + // Safe because we allocated fdt and converted name to a CString + let fdt_ret = unsafe { fdt_begin_node(fdt.as_mut_ptr() as *mut c_void, + cstr_name.as_ptr()) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtBeginNodeError(fdt_ret))); + } + Ok(()) +} + +fn end_node(fdt: &mut Vec<u8>) -> Result<(), Box<Error>> { + // Safe because we allocated fdt + let fdt_ret = unsafe { fdt_end_node(fdt.as_mut_ptr() as *mut c_void) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtEndNodeError(fdt_ret))); + } + Ok(()) +} + +fn property(fdt: &mut Vec<u8>, name: &str, val: &[u8]) + -> Result<(), Box<Error>> { + let cstr_name = CString::new(name).unwrap(); + let val_ptr = val.as_ptr() as *const c_void; + + // Safe because we allocated fdt and converted name to a CString + let fdt_ret = unsafe { fdt_property(fdt.as_mut_ptr() as *mut c_void, + cstr_name.as_ptr(), + val_ptr, val.len() as i32) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtPropertyError(fdt_ret))); + } + Ok(()) +} + +fn property_cstring(fdt: &mut Vec<u8>, name: &str, cstr_value: &CStr) + -> Result<(), Box<Error>> { + let value_bytes = cstr_value.to_bytes_with_nul(); + let cstr_name = CString::new(name).unwrap(); + + // Safe because we allocated fdt, converted name and value to CStrings + let fdt_ret = unsafe { fdt_property(fdt.as_mut_ptr() as *mut c_void, + cstr_name.as_ptr(), + value_bytes.as_ptr() as *mut c_void, + value_bytes.len() as i32) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtPropertyError(fdt_ret))); + } + Ok(()) +} + +fn property_null(fdt: &mut Vec<u8>, name: &str) -> Result<(), Box<Error>> { + let cstr_name = CString::new(name).unwrap(); + + // Safe because we allocated fdt, converted name to a CString + let fdt_ret = unsafe { fdt_property(fdt.as_mut_ptr() as *mut c_void, + cstr_name.as_ptr(), + null(), 0) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtPropertyError(fdt_ret))); + } + Ok(()) +} + +fn property_string(fdt: &mut Vec<u8>, name: &str, value: &str) + -> Result<(), Box<Error>> { + let cstr_value = CString::new(value).unwrap(); + property_cstring(fdt, name, &cstr_value) +} + +fn property_u32(fdt: &mut Vec<u8>, name: &str, val: u32) + -> Result<(), Box<Error>> { + property(fdt, name, &cpu_to_fdt32(val)) +} + +fn property_u64(fdt: &mut Vec<u8>, name: &str, val: u64) + -> Result<(), Box<Error>> { + property(fdt, name, &cpu_to_fdt64(val)) +} + +// Helper to generate a properly formatted byte vector using 32-bit cells +fn generate_prop32(cells: &[u32]) -> Vec<u8> { + let mut ret: Vec<u8> = Vec::new(); + for &e in cells { + ret.extend(cpu_to_fdt32(e).into_iter()); + } + ret +} + +// Helper to generate a properly formatted byte vector using 64-bit cells +fn generate_prop64(cells: &[u64]) -> Vec<u8> { + let mut ret: Vec<u8> = Vec::new(); + for &e in cells { + ret.extend(cpu_to_fdt64(e).into_iter()); + } + ret +} + +fn create_memory_node(fdt: &mut Vec<u8>, guest_mem: &GuestMemory) + -> Result<(), Box<Error>> { + let mem_size = guest_mem.memory_size(); + let mem_reg_prop = generate_prop64(&[AARCH64_PHYS_MEM_START, mem_size]); + + begin_node(fdt, "memory")?; + property_string(fdt, "device_type", "memory")?; + property(fdt, "reg", &mem_reg_prop)?; + end_node(fdt)?; + Ok(()) +} + +fn create_cpu_nodes(fdt: &mut Vec<u8>, num_cpus: u32) -> Result<(), Box<Error>> { + begin_node(fdt, "cpus")?; + property_u32(fdt, "#address-cells", 0x1)?; + property_u32(fdt, "#size-cells", 0x0)?; + + for cpu_id in 0..num_cpus { + let cpu_name = format!("cpu@{:x}", cpu_id); + begin_node(fdt, &cpu_name)?; + property_string(fdt, "device_type", "cpu")?; + property_string(fdt, "compatible", "arm,arm-v8")?; + if num_cpus > 1 { + property_string(fdt, "enable-method", "psci")?; + } + property_u32(fdt, "reg", cpu_id)?; + end_node(fdt)?; + } + end_node(fdt)?; + Ok(()) +} + +fn create_gic_node(fdt: &mut Vec<u8>) -> Result<(), Box<Error>> { + let gic_reg_prop = generate_prop64(&[ + AARCH64_GIC_DIST_BASE, + AARCH64_GIC_DIST_SIZE, + AARCH64_GIC_CPUI_BASE, + AARCH64_GIC_CPUI_SIZE]); + + begin_node(fdt, "intc")?; + property_string(fdt, "compatible", "arm,cortex-a15-gic")?; + property_u32(fdt, "#interrupt-cells", GIC_FDT_IRQ_NUM_CELLS)?; + property_null(fdt, "interrupt-controller")?; + property(fdt, "reg", &gic_reg_prop)?; + property_u32(fdt, "phandle", PHANDLE_GIC)?; + property_u32(fdt, "#address-cells", 2)?; + property_u32(fdt, "#size-cells", 2)?; + end_node(fdt)?; + + Ok(()) +} + +fn create_timer_node(fdt: &mut Vec<u8>, num_cpus: u32) -> Result<(), Box<Error>> { + // These are fixed interrupt numbers for the timer device. + let irqs = [13, 14, 11, 10]; + let compatible = "arm,armv8-timer"; + let cpu_mask: u32 = (((1 << num_cpus) - 1) << GIC_FDT_IRQ_PPI_CPU_SHIFT) & + GIC_FDT_IRQ_PPI_CPU_MASK; + + let mut timer_reg_cells = Vec::new(); + for &irq in irqs.iter() { + timer_reg_cells.push(GIC_FDT_IRQ_TYPE_PPI); + timer_reg_cells.push(irq); + timer_reg_cells.push(cpu_mask | IRQ_TYPE_LEVEL_LOW); + } + let timer_reg_prop = generate_prop32(timer_reg_cells.as_slice()); + + begin_node(fdt, "timer")?; + property_string(fdt, "compatible", compatible)?; + property(fdt, "interrupts", &timer_reg_prop)?; + property_null(fdt, "always-on")?; + end_node(fdt)?; + + Ok(()) +} + +fn create_serial_node(fdt: &mut Vec<u8>) -> Result<(), Box<Error>> { + let serial_reg_prop = generate_prop64(&[ + AARCH64_SERIAL_ADDR, AARCH64_SERIAL_SIZE]); + + begin_node(fdt, "U6_16550A@3f8")?; + property_string(fdt, "compatible", "ns16550a")?; + property(fdt, "reg", &serial_reg_prop)?; + property_u32(fdt, "clock-frequency", + AARCH64_SERIAL_SPEED)?; + end_node(fdt)?; + + Ok(()) +} + +// TODO(sonnyrao) -- check to see if host kernel supports PSCI 0_2 +fn create_psci_node(fdt: &mut Vec<u8>) -> Result<(), Box<Error>> { + let compatible = "arm,psci-0.2"; + begin_node(fdt, "psci")?; + property_string(fdt, "compatible", compatible)?; + // Only support aarch64 guest + property_string(fdt, "method", "hvc")?; + // These constants are from PSCI + property_u32(fdt, "cpu_suspend", 0xc4000001)?; + property_u32(fdt, "cpu_off", 0x84000002)?; + property_u32(fdt, "cpu_on", 0xc4000003)?; + property_u32(fdt, "migrate", 0xc4000005)?; + end_node(fdt)?; + + Ok(()) +} + +fn create_chosen_node(fdt: &mut Vec<u8>, cmdline: &CStr) + -> Result<(), Box<Error>> { + begin_node(fdt, "chosen")?; + property_u32(fdt, "linux,pci-probe-only", 1)?; + property_cstring(fdt, "bootargs", cmdline)?; + property_u64(fdt, "kaslr", 0)?; + end_node(fdt)?; + + Ok(()) +} + +fn create_io_nodes(fdt: &mut Vec<u8>) -> Result<(), Box<Error>> { + // TODO(sonnyrao) Pass in bus to get number of devices + // HACK -- this is creating a static number of device nodes + // the unused nodes just throw a warning when the guest boots + for i in 0..8 { + let addr = AARCH64_MMIO_BASE + i * AARCH64_MMIO_LEN; + let node = format!("virtio@{:x}", addr); + let reg = generate_prop64(&[addr, AARCH64_MMIO_LEN]); + let irq = generate_prop32(&[ + GIC_FDT_IRQ_TYPE_SPI, + AARCH64_IRQ_BASE + i as u32, + IRQ_TYPE_EDGE_RISING]); + + begin_node(fdt, &node)?; + property_string(fdt, "compatible", "virtio,mmio")?; + property(fdt, "reg", ®)?; + property_null(fdt, "dma-coherent")?; + property(fdt, "interrupts", &irq)?; + end_node(fdt)?; + } + Ok(()) +} + +/// Creates a flattened device tree containing all of the parameters for the +/// kernel and loads it into the guest memory at the specified offset. +/// +/// # Arguments +/// +/// * `fdt_max_size` - The amount of space reserved for the device tree +/// * `guest_mem` - The guest memory object +/// * `num_cpus` - Number of virtual CPUs the guest will have +/// * `fdt_load_offset` - The offset into physical memory for the device tree +/// * `cmdline` - The kernel commandline +pub fn create_fdt(fdt_max_size: usize, + guest_mem: &GuestMemory, + num_cpus: u32, + fdt_load_offset: u64, + cmdline: &CStr) -> Result<(), Box<Error>> { + let mut fdt = vec![0; fdt_max_size]; + + // Safe since we allocated this array with fdt_max_size + let mut fdt_ret = unsafe { fdt_create(fdt.as_mut_ptr() as *mut c_void, + fdt_max_size as c_int) }; + + if fdt_ret != 0 { + return Err(Box::new(Error::FdtCreateError(fdt_ret))); + } + // Safe since we allocated this array + fdt_ret = unsafe { fdt_finish_reservemap(fdt.as_mut_ptr() as *mut c_void) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtFinishReservemapError(fdt_ret))); + } + + // The whole thing is put into one giant node with some top level properties + begin_node(&mut fdt, "")?; + property_u32(&mut fdt, "interrupt-parent", PHANDLE_GIC)?; + property_string(&mut fdt, "compatible", "linux,dummy-virt")?; + property_u32(&mut fdt, "#address-cells", 0x2)?; + property_u32(&mut fdt, "#size-cells", 0x2)?; + + create_chosen_node(&mut fdt, cmdline)?; + create_memory_node(&mut fdt, guest_mem)?; + create_cpu_nodes(&mut fdt, num_cpus)?; + create_gic_node(&mut fdt)?; + create_timer_node(&mut fdt, num_cpus)?; + create_serial_node(&mut fdt)?; + create_psci_node(&mut fdt)?; + create_io_nodes(&mut fdt)?; + // End giant node + end_node(&mut fdt)?; + + // Safe since we allocated fdt_final and previously passed in it's size + fdt_ret = unsafe { fdt_finish(fdt.as_mut_ptr() as *mut c_void) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtFinishError(fdt_ret))); + } + + // Allocate another buffer so we can format and then write fdt to guest + let mut fdt_final = vec![0; fdt_max_size]; + + // Safe because we allocated both arrays with the correct size + fdt_ret = unsafe { fdt_open_into(fdt.as_mut_ptr() as *mut c_void, + fdt_final.as_mut_ptr() as *mut c_void, + fdt_max_size as i32) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtOpenIntoError(fdt_ret))); + } + + // Safe since we allocated fdt_final + fdt_ret = unsafe { fdt_pack(fdt_final.as_mut_ptr() as *mut c_void) }; + if fdt_ret != 0 { + return Err(Box::new(Error::FdtPackError(fdt_ret))); + } + let fdt_address = GuestAddress(AARCH64_PHYS_MEM_START + fdt_load_offset); + let written = guest_mem.write_slice_at_addr(fdt_final.as_slice(), + fdt_address). + map_err(|_| Error::FdtGuestMemoryWriteError)?; + if written < fdt_max_size { + return Err(Box::new(Error::FdtGuestMemoryWriteError)); + } + Ok(()) +} diff --git a/aarch64/src/lib.rs b/aarch64/src/lib.rs new file mode 100644 index 0000000..de1f776 --- /dev/null +++ b/aarch64/src/lib.rs @@ -0,0 +1,373 @@ +// Copyright 2018 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +extern crate arch; +extern crate byteorder; +extern crate data_model; +extern crate device_manager; +extern crate devices; +extern crate kernel_cmdline; +extern crate kvm; +extern crate kvm_sys; +extern crate libc; +extern crate sys_util; + +use std::error::{self, Error as Aarch64Error}; +use std::fmt::{self, Display}; +use std::fs::File; +use std::io::stdout; +use std::sync::{Arc, Mutex}; +use std::ffi::CStr; + +use sys_util::{EventFd, GuestAddress, GuestMemory}; +use std::os::unix::io::FromRawFd; + +use kvm::*; +use kvm_sys::kvm_device_attr; + +use arch::Result; +mod fdt; + +// We place the kernel at offset 8MB +const AARCH64_KERNEL_OFFSET: u64 = 0x80000; +const AARCH64_FDT_MAX_SIZE: u64 = 0x200000; + +// These constants indicate the address space used by the ARM vGIC. +const AARCH64_GIC_DIST_SIZE: u64 = 0x10000; +const AARCH64_GIC_CPUI_SIZE: u64 = 0x20000; + +// This indicates the start of DRAM inside the physical address space. +const AARCH64_PHYS_MEM_START: u64 = 0x80000000; +const AARCH64_AXI_BASE: u64 = 0x40000000; + +// These constants indicate the placement of the GIC registers in the physical +// address space. +const AARCH64_GIC_DIST_BASE: u64 = AARCH64_AXI_BASE - AARCH64_GIC_DIST_SIZE; +const AARCH64_GIC_CPUI_BASE: u64 = AARCH64_GIC_DIST_BASE - + AARCH64_GIC_CPUI_SIZE; + +// This is the minimum number of SPI interrupts aligned to 32 + 32 for the +// PPI (16) and GSI (16). +const AARCH64_GIC_NR_IRQS: u32 = 64; + + // PSR (Processor State Register) bits +const PSR_MODE_EL1H: u64 = 0x00000005; +const PSR_F_BIT: u64 = 0x00000040; +const PSR_I_BIT: u64 = 0x00000080; +const PSR_A_BIT: u64 = 0x00000100; +const PSR_D_BIT: u64 = 0x00000200; + +macro_rules! offset__of { + ($str:ty, $($field:ident).+ $([$idx:expr])*) => { + unsafe { &(*(0 as *const $str))$(.$field)* $([$idx])* as *const _ as usize } + } +} + +const KVM_REG_ARM64: u64 = 0x6000000000000000; +const KVM_REG_SIZE_U64: u64 = 0x0030000000000000; +const KVM_REG_ARM_COPROC_SHIFT: u64 = 16; +const KVM_REG_ARM_CORE: u64 = 0x0010 << KVM_REG_ARM_COPROC_SHIFT; + +macro_rules! arm64_core_reg { + ($reg: tt) => { + KVM_REG_ARM64 | KVM_REG_SIZE_U64 | KVM_REG_ARM_CORE | ((offset__of!(kvm_sys::user_pt_regs, $reg) / 4) as u64) + }; +} + +fn get_kernel_addr() -> GuestAddress { + GuestAddress(AARCH64_PHYS_MEM_START + AARCH64_KERNEL_OFFSET) +} + +// Place the serial device at a typical address for x86. +const AARCH64_SERIAL_ADDR: u64 = 0x3F8; +// Serial device requires 8 bytes of registers; +const AARCH64_SERIAL_SIZE: u64 = 0x8; +// This was the speed kvmtool used, not sure if it matters. +const AARCH64_SERIAL_SPEED: u32 = 1843200; + +// This is the base address of MMIO devices. +const AARCH64_MMIO_BASE: u64 = 0x10000; +// Each MMIO device gets a 4k page. +const AARCH64_MMIO_LEN: u64 = 0x1000; +// We start at 0 which gets mapped to the first SPI interrupt (physical 32). +const AARCH64_IRQ_BASE: u32 = 0; + +#[derive(Debug)] +pub enum Error { + /// FDT could not be created + FDTCreateFailure(Box<error::Error>), + /// Kernel could not be loaded + KernelLoadFailure, + /// Failure to Create GIC + CreateGICFailure(sys_util::Error), + /// VCPU Init failed + VCPUInitFailure, + /// VCPU Set one reg failed + VCPUSetRegFailure, +} + +impl error::Error for Error { + fn description(&self) -> &str { + match self { + &Error::FDTCreateFailure(_) => + "FDT could not be created", + &Error::KernelLoadFailure => + "Kernel cound not be loaded", + &Error::CreateGICFailure(_) => + "Failure to create GIC", + &Error::VCPUInitFailure => + "Failed to initialize VCPU", + &Error::VCPUSetRegFailure => + "Failed to set register", + } + } +} + +impl Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "Aarch64 Error: {}", Error::description(self)) + } +} + +/// Returns a Vec of the valid memory addresses. +/// These should be used to configure the GuestMemory structure for the platfrom. +pub fn arch_memory_regions(size: u64) -> Vec<(GuestAddress, u64)> { + vec![(GuestAddress(AARCH64_PHYS_MEM_START), size)] +} + +fn fdt_offset(mem_size: u64) -> u64 { + // Put fdt up near the top of memory + // TODO(sonnyrao): will have to handle this differently if there's + // > 4GB memory + mem_size - AARCH64_FDT_MAX_SIZE - 0x10000 +} + +pub struct AArch64; + +impl arch::LinuxArch for AArch64 { + /// Loads the kernel from an open file. + /// + /// # Arguments + /// + /// * `mem` - The memory to be used by the guest. + /// * `kernel_image` - the File object for the specified kernel. + fn load_kernel(guest_mem: &GuestMemory, mut kernel_image: &mut File) -> Result<()> { + let kernel_addr = get_kernel_addr(); + let kernel_meta = kernel_image.metadata()?; + let kernel_size = kernel_meta.len(); + guest_mem.read_to_memory(kernel_addr, &mut kernel_image, kernel_size as usize). + map_err(|_| Error::KernelLoadFailure)?; + Ok(()) + } + + fn setup_system_memory(mem: &GuestMemory, mem_size: u64, vcpu_count: u32, + cmdline: &CStr) -> Result<()> { + fdt::create_fdt(AARCH64_FDT_MAX_SIZE as usize, + mem, + vcpu_count, + fdt_offset(mem_size), + cmdline)?; + Ok(()) + } + + fn create_vm(kvm: &Kvm, mem: GuestMemory) -> Result<Vm> { + let vm = Vm::new(&kvm, mem)?; + Ok(vm) + } + + fn setup_memory(mem_size: u64) -> Result<GuestMemory> { + let arch_mem_regions = arch_memory_regions(mem_size); + let mem = GuestMemory::new(&arch_mem_regions)?; + Ok(mem) + } + + fn get_base_dev_pfn(mem_size: u64) -> u64 { + AARCH64_PHYS_MEM_START + mem_size + } + + /// This returns a base part of the kernel command for this architecture + fn get_base_linux_cmdline() -> kernel_cmdline::Cmdline { + let mut cmdline = kernel_cmdline::Cmdline::new(sys_util::pagesize()); + cmdline.insert_str("console=ttyS0 reboot=k panic=1"). + unwrap(); + cmdline + } + + /// This creates and returns a device_manager object for this vm. + /// + /// # Arguments + /// + /// * `vm` - the vm object + /// * `mem` - A copy of the GuestMemory object for this VM. + fn get_device_manager(vm: &mut Vm, mem: GuestMemory) -> + Result<device_manager::DeviceManager> { + let mut dm = device_manager::DeviceManager::new(vm, + mem, + AARCH64_MMIO_LEN, + AARCH64_MMIO_BASE, + AARCH64_IRQ_BASE); + let com_evt_1_3 = EventFd::new()?; + let serial = Arc::new(Mutex::new(devices::Serial::new_out( + com_evt_1_3.try_clone()?, + Box::new(stdout())))); + + dm.bus.insert(serial.clone(), AARCH64_SERIAL_ADDR, + AARCH64_SERIAL_SIZE).expect("failed to add serial device"); + Ok(dm) + } + + /// The creates the interrupt controller device and optionally returns the fd for it. + /// Some architectures may not have a separate descriptor for the interrupt + /// controller, so they would return None even on success. + /// + /// # Arguments + /// + /// * `vm` - the vm object + fn create_irq_chip(vm: &Vm) -> Result<Option<File>> { + let cpu_if_addr: u64 = AARCH64_GIC_CPUI_BASE; + let dist_if_addr: u64 = AARCH64_GIC_DIST_BASE; + let raw_cpu_if_addr = &cpu_if_addr as *const u64; + let raw_dist_if_addr = &dist_if_addr as *const u64; + + let cpu_if_attr = kvm_device_attr { + group: kvm_sys::KVM_DEV_ARM_VGIC_GRP_ADDR, + attr: kvm_sys::KVM_VGIC_V2_ADDR_TYPE_CPU as u64, + addr: raw_cpu_if_addr as u64, + flags: 0, + }; + let dist_attr = kvm_device_attr { + group: kvm_sys::KVM_DEV_ARM_VGIC_GRP_ADDR, + attr: kvm_sys::KVM_VGIC_V2_ADDR_TYPE_DIST as u64, + addr: raw_dist_if_addr as u64, + flags: 0, + }; + let mut kcd = kvm_sys::kvm_create_device { + type_: kvm_sys::kvm_device_type_KVM_DEV_TYPE_ARM_VGIC_V2, + fd: 0, + flags: 0, + }; + vm.create_device(&mut kcd).map_err(|e| Error::CreateGICFailure(e))?; + + // Safe because the kernel is passing us an FD back inside + // the struct after we successfully did the create_device ioctl + let vgic_fd = unsafe { File::from_raw_fd(kcd.fd as i32) }; + + // Safe because we allocated the struct that's being passed in + let ret = unsafe { + sys_util::ioctl_with_ref(&vgic_fd, kvm_sys::KVM_SET_DEVICE_ATTR(), + &cpu_if_attr) + }; + if ret != 0 { + return Err(Box::new(Error::CreateGICFailure( + sys_util::Error::new(ret)))) + } + + // Safe because we allocated the struct that's being passed in + let ret = unsafe { + sys_util::ioctl_with_ref(&vgic_fd, kvm_sys::KVM_SET_DEVICE_ATTR(), + &dist_attr) + }; + if ret != 0 { + return Err(Box::new(Error::CreateGICFailure( + sys_util::Error::new(ret)))) + } + + // We need to tell the kernel how many irqs to support with this vgic + let nr_irqs: u32 = AARCH64_GIC_NR_IRQS; + let nr_irqs_ptr = &nr_irqs as *const u32; + let nr_irqs_attr = kvm_device_attr { + group: kvm_sys::KVM_DEV_ARM_VGIC_GRP_NR_IRQS, + attr: 0, + addr: nr_irqs_ptr as u64, + flags: 0, + }; + // Safe because we allocated the struct that's being passed in + let ret = unsafe { + sys_util::ioctl_with_ref(&vgic_fd, kvm_sys::KVM_SET_DEVICE_ATTR(), + &nr_irqs_attr) + }; + if ret != 0 { + return Err(Box::new(Error::CreateGICFailure( + sys_util::Error::new(ret)))) + } + + // Finalize the GIC + let init_gic_attr = kvm_device_attr { + group: kvm_sys::KVM_DEV_ARM_VGIC_GRP_CTRL, + attr: kvm_sys::KVM_DEV_ARM_VGIC_CTRL_INIT as u64, + addr: 0, + flags: 0, + }; + + // Safe because we allocated the struct that's being passed in + let ret = unsafe { + sys_util::ioctl_with_ref(&vgic_fd, kvm_sys::KVM_SET_DEVICE_ATTR(), + &init_gic_attr) + }; + if ret != 0 { + return Err(Box::new(sys_util::Error::new(ret))) + } + Ok(Some(vgic_fd)) + } + + fn setup_io_bus(_vm: &mut Vm, _exit_evt: EventFd) + -> Result<(devices::Bus, Arc<Mutex<devices::Serial>>)> { + // ARM doesn't really use the io bus like x86, instead we have a + // separate serial device that is returned as a separate object. + let io_bus = devices::Bus::new(); + let com_evt_1_3 = EventFd::new()?; + + let serial = Arc::new(Mutex::new(devices::Serial::new_out( + com_evt_1_3.try_clone()?, + Box::new(stdout())))); + Ok((io_bus, serial)) + } + + fn configure_vcpu(guest_mem: &GuestMemory, + _kvm: &Kvm, + vcpu: &Vcpu, + cpu_id: u64, + _num_cpus: u64) + -> Result<()> { + let mut kvi = kvm_sys::kvm_vcpu_init { + // TODO(sonnyrao): need to read back target from host kernel + target: kvm_sys::KVM_ARM_TARGET_GENERIC_V8, + features: [0; 7], + }; + + // TODO(sonnyrao): need to verify this feature is supported by host kernel + kvi.features[0] |= 1 << kvm_sys::KVM_ARM_VCPU_PSCI_0_2; + + // Non-boot cpus are powered off initially + if cpu_id > 0 { + kvi.features[0] |= 1 << kvm_sys::KVM_ARM_VCPU_POWER_OFF; + } + vcpu.arm_vcpu_init(&kvi)?; + + // set up registers + let mut data: u64; + let mut reg_id: u64; + + // All interrupts masked + data = PSR_D_BIT | PSR_A_BIT | PSR_I_BIT | PSR_F_BIT | PSR_MODE_EL1H; + reg_id = arm64_core_reg!(pstate); + vcpu.set_one_reg(reg_id, data)?; + + // Other cpus are powered off initially + if cpu_id == 0 { + data = AARCH64_PHYS_MEM_START + AARCH64_KERNEL_OFFSET; + reg_id = arm64_core_reg!(pc); + vcpu.set_one_reg(reg_id, data)?; + + /* X0 -- fdt address */ + let mem_size = guest_mem.memory_size(); + data = (AARCH64_PHYS_MEM_START + fdt_offset(mem_size)) as u64; + // hack -- can't get this to do offsetof(regs[0]) but luckily it's at offset 0 + reg_id = arm64_core_reg!(regs); + vcpu.set_one_reg(reg_id, data)?; + } + Ok(()) + } + +} diff --git a/kvm/src/lib.rs b/kvm/src/lib.rs index 2bf2677..a76c018 100644 --- a/kvm/src/lib.rs +++ b/kvm/src/lib.rs @@ -708,6 +708,16 @@ impl Vm { errno_result() } } + + /// Does KVM_CREATE_DEVICE for a generic device. + pub fn create_device(&self, device: &mut kvm_create_device) -> Result<()> { + let ret = unsafe { sys_util::ioctl_with_ref(self, KVM_CREATE_DEVICE(), device) }; + if ret == 0 { + Ok(()) + } else { + errno_result() + } + } } impl AsRawFd for Vm { @@ -1157,6 +1167,35 @@ impl Vcpu { } Ok(()) } + + /// Sets the value of one register on this VCPU. The id of the register is + /// encoded as specified in the kernel documentation for KVM_SET_ONE_REG. + #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] + pub fn set_one_reg(&self, reg_id: u64, data: u64) -> Result<()> { + let data_ref = &data as *const u64; + let onereg = kvm_one_reg { id: reg_id, + addr: data_ref as u64}; + // safe becuase we allocated the struct and we know the kernel will read + // exactly the size of the struct + let ret = unsafe { ioctl_with_ref(self, KVM_SET_ONE_REG(), &onereg) }; + if ret < 0 { + return errno_result(); + } + Ok(()) + } + + /// This initializes an ARM VCPU to the specified type with the specified features + /// and resets the values of all of its registers to defaults. + #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] + pub fn arm_vcpu_init(&self, kvi: &kvm_vcpu_init) -> Result<()> { + // safe becuase we allocated the struct and we know the kernel will read + // exactly the size of the struct + let ret = unsafe { ioctl_with_ref(self, KVM_ARM_VCPU_INIT(), kvi) }; + if ret < 0 { + return errno_result(); + } + Ok(()) + } } impl AsRawFd for Vcpu { diff --git a/kvm_sys/src/arm/bindings.rs b/kvm_sys/src/arm/bindings.rs deleted file mode 100644 index a6bdc94..0000000 --- a/kvm_sys/src/arm/bindings.rs +++ /dev/null @@ -1,6144 +0,0 @@ -/* automatically generated by rust-bindgen */ - -#[repr(C)] -#[derive(Default)] -pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>); -impl<T> __IncompleteArrayField<T> { - #[inline] - pub fn new() -> Self { - __IncompleteArrayField(::std::marker::PhantomData) - } - #[inline] - pub unsafe fn as_ptr(&self) -> *const T { - ::std::mem::transmute(self) - } - #[inline] - pub unsafe fn as_mut_ptr(&mut self) -> *mut T { - ::std::mem::transmute(self) - } - #[inline] - pub unsafe fn as_slice(&self, len: usize) -> &[T] { - ::std::slice::from_raw_parts(self.as_ptr(), len) - } - #[inline] - pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] { - ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len) - } -} -impl<T> ::std::fmt::Debug for __IncompleteArrayField<T> { - fn fmt(&self, fmt: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { - fmt.write_str("__IncompleteArrayField") - } -} -impl<T> ::std::clone::Clone for __IncompleteArrayField<T> { - #[inline] - fn clone(&self) -> Self { - Self::new() - } -} -impl<T> ::std::marker::Copy for __IncompleteArrayField<T> {} -pub const __BITS_PER_LONG: ::std::os::raw::c_uint = 32; -pub const __FD_SETSIZE: ::std::os::raw::c_uint = 1024; -pub const _IOC_NRBITS: ::std::os::raw::c_uint = 8; -pub const _IOC_TYPEBITS: ::std::os::raw::c_uint = 8; -pub const _IOC_SIZEBITS: ::std::os::raw::c_uint = 14; -pub const _IOC_DIRBITS: ::std::os::raw::c_uint = 2; -pub const _IOC_NRMASK: ::std::os::raw::c_uint = 255; -pub const _IOC_TYPEMASK: ::std::os::raw::c_uint = 255; -pub const _IOC_SIZEMASK: ::std::os::raw::c_uint = 16383; -pub const _IOC_DIRMASK: ::std::os::raw::c_uint = 3; -pub const _IOC_NRSHIFT: ::std::os::raw::c_uint = 0; -pub const _IOC_TYPESHIFT: ::std::os::raw::c_uint = 8; -pub const _IOC_SIZESHIFT: ::std::os::raw::c_uint = 16; -pub const _IOC_DIRSHIFT: ::std::os::raw::c_uint = 30; -pub const _IOC_NONE: ::std::os::raw::c_uint = 0; -pub const _IOC_WRITE: ::std::os::raw::c_uint = 1; -pub const _IOC_READ: ::std::os::raw::c_uint = 2; -pub const IOC_IN: ::std::os::raw::c_uint = 1073741824; -pub const IOC_OUT: ::std::os::raw::c_uint = 2147483648; -pub const IOC_INOUT: ::std::os::raw::c_uint = 3221225472; -pub const IOCSIZE_MASK: ::std::os::raw::c_uint = 1073676288; -pub const IOCSIZE_SHIFT: ::std::os::raw::c_uint = 16; -pub const PSCI_0_2_FN_BASE: ::std::os::raw::c_uint = 2214592512; -pub const PSCI_0_2_64BIT: ::std::os::raw::c_uint = 1073741824; -pub const PSCI_0_2_FN64_BASE: ::std::os::raw::c_uint = 3288334336; -pub const PSCI_0_2_POWER_STATE_ID_MASK: ::std::os::raw::c_uint = 65535; -pub const PSCI_0_2_POWER_STATE_ID_SHIFT: ::std::os::raw::c_uint = 0; -pub const PSCI_0_2_POWER_STATE_TYPE_SHIFT: ::std::os::raw::c_uint = 16; -pub const PSCI_0_2_POWER_STATE_TYPE_MASK: ::std::os::raw::c_uint = 65536; -pub const PSCI_0_2_POWER_STATE_AFFL_SHIFT: ::std::os::raw::c_uint = 24; -pub const PSCI_0_2_POWER_STATE_AFFL_MASK: ::std::os::raw::c_uint = 50331648; -pub const PSCI_1_0_EXT_POWER_STATE_ID_MASK: ::std::os::raw::c_uint = 268435455; -pub const PSCI_1_0_EXT_POWER_STATE_ID_SHIFT: ::std::os::raw::c_uint = 0; -pub const PSCI_1_0_EXT_POWER_STATE_TYPE_SHIFT: ::std::os::raw::c_uint = 30; -pub const PSCI_1_0_EXT_POWER_STATE_TYPE_MASK: ::std::os::raw::c_uint = 1073741824; -pub const PSCI_0_2_AFFINITY_LEVEL_ON: ::std::os::raw::c_uint = 0; -pub const PSCI_0_2_AFFINITY_LEVEL_OFF: ::std::os::raw::c_uint = 1; -pub const PSCI_0_2_AFFINITY_LEVEL_ON_PENDING: ::std::os::raw::c_uint = 2; -pub const PSCI_0_2_TOS_UP_MIGRATE: ::std::os::raw::c_uint = 0; -pub const PSCI_0_2_TOS_UP_NO_MIGRATE: ::std::os::raw::c_uint = 1; -pub const PSCI_0_2_TOS_MP: ::std::os::raw::c_uint = 2; -pub const PSCI_VERSION_MAJOR_SHIFT: ::std::os::raw::c_uint = 16; -pub const PSCI_VERSION_MINOR_MASK: ::std::os::raw::c_uint = 65535; -pub const PSCI_VERSION_MAJOR_MASK: ::std::os::raw::c_int = -65536; -pub const PSCI_1_0_FEATURES_CPU_SUSPEND_PF_SHIFT: ::std::os::raw::c_uint = 1; -pub const PSCI_1_0_FEATURES_CPU_SUSPEND_PF_MASK: ::std::os::raw::c_uint = 2; -pub const PSCI_RET_SUCCESS: ::std::os::raw::c_uint = 0; -pub const PSCI_RET_NOT_SUPPORTED: ::std::os::raw::c_int = -1; -pub const PSCI_RET_INVALID_PARAMS: ::std::os::raw::c_int = -2; -pub const PSCI_RET_DENIED: ::std::os::raw::c_int = -3; -pub const PSCI_RET_ALREADY_ON: ::std::os::raw::c_int = -4; -pub const PSCI_RET_ON_PENDING: ::std::os::raw::c_int = -5; -pub const PSCI_RET_INTERNAL_FAILURE: ::std::os::raw::c_int = -6; -pub const PSCI_RET_NOT_PRESENT: ::std::os::raw::c_int = -7; -pub const PSCI_RET_DISABLED: ::std::os::raw::c_int = -8; -pub const PSCI_RET_INVALID_ADDRESS: ::std::os::raw::c_int = -9; -pub const HWCAP_SWP: ::std::os::raw::c_uint = 1; -pub const HWCAP_HALF: ::std::os::raw::c_uint = 2; -pub const HWCAP_THUMB: ::std::os::raw::c_uint = 4; -pub const HWCAP_26BIT: ::std::os::raw::c_uint = 8; -pub const HWCAP_FAST_MULT: ::std::os::raw::c_uint = 16; -pub const HWCAP_FPA: ::std::os::raw::c_uint = 32; -pub const HWCAP_VFP: ::std::os::raw::c_uint = 64; -pub const HWCAP_EDSP: ::std::os::raw::c_uint = 128; -pub const HWCAP_JAVA: ::std::os::raw::c_uint = 256; -pub const HWCAP_IWMMXT: ::std::os::raw::c_uint = 512; -pub const HWCAP_CRUNCH: ::std::os::raw::c_uint = 1024; -pub const HWCAP_THUMBEE: ::std::os::raw::c_uint = 2048; -pub const HWCAP_NEON: ::std::os::raw::c_uint = 4096; -pub const HWCAP_VFPv3: ::std::os::raw::c_uint = 8192; -pub const HWCAP_VFPv3D16: ::std::os::raw::c_uint = 16384; -pub const HWCAP_TLS: ::std::os::raw::c_uint = 32768; -pub const HWCAP_VFPv4: ::std::os::raw::c_uint = 65536; -pub const HWCAP_IDIVA: ::std::os::raw::c_uint = 131072; -pub const HWCAP_IDIVT: ::std::os::raw::c_uint = 262144; -pub const HWCAP_VFPD32: ::std::os::raw::c_uint = 524288; -pub const HWCAP_IDIV: ::std::os::raw::c_uint = 393216; -pub const HWCAP_LPAE: ::std::os::raw::c_uint = 1048576; -pub const HWCAP_EVTSTRM: ::std::os::raw::c_uint = 2097152; -pub const HWCAP2_AES: ::std::os::raw::c_uint = 1; -pub const HWCAP2_PMULL: ::std::os::raw::c_uint = 2; -pub const HWCAP2_SHA1: ::std::os::raw::c_uint = 4; -pub const HWCAP2_SHA2: ::std::os::raw::c_uint = 8; -pub const HWCAP2_CRC32: ::std::os::raw::c_uint = 16; -pub const PTRACE_GETREGS: ::std::os::raw::c_uint = 12; -pub const PTRACE_SETREGS: ::std::os::raw::c_uint = 13; -pub const PTRACE_GETFPREGS: ::std::os::raw::c_uint = 14; -pub const PTRACE_SETFPREGS: ::std::os::raw::c_uint = 15; -pub const PTRACE_GETWMMXREGS: ::std::os::raw::c_uint = 18; -pub const PTRACE_SETWMMXREGS: ::std::os::raw::c_uint = 19; -pub const PTRACE_OLDSETOPTIONS: ::std::os::raw::c_uint = 21; -pub const PTRACE_GET_THREAD_AREA: ::std::os::raw::c_uint = 22; -pub const PTRACE_SET_SYSCALL: ::std::os::raw::c_uint = 23; -pub const PTRACE_GETCRUNCHREGS: ::std::os::raw::c_uint = 25; -pub const PTRACE_SETCRUNCHREGS: ::std::os::raw::c_uint = 26; -pub const PTRACE_GETVFPREGS: ::std::os::raw::c_uint = 27; -pub const PTRACE_SETVFPREGS: ::std::os::raw::c_uint = 28; -pub const PTRACE_GETHBPREGS: ::std::os::raw::c_uint = 29; -pub const PTRACE_SETHBPREGS: ::std::os::raw::c_uint = 30; -pub const USR26_MODE: ::std::os::raw::c_uint = 0; -pub const FIQ26_MODE: ::std::os::raw::c_uint = 1; -pub const IRQ26_MODE: ::std::os::raw::c_uint = 2; -pub const SVC26_MODE: ::std::os::raw::c_uint = 3; -pub const USR_MODE: ::std::os::raw::c_uint = 16; -pub const SVC_MODE: ::std::os::raw::c_uint = 19; -pub const FIQ_MODE: ::std::os::raw::c_uint = 17; -pub const IRQ_MODE: ::std::os::raw::c_uint = 18; -pub const ABT_MODE: ::std::os::raw::c_uint = 23; -pub const HYP_MODE: ::std::os::raw::c_uint = 26; -pub const UND_MODE: ::std::os::raw::c_uint = 27; -pub const SYSTEM_MODE: ::std::os::raw::c_uint = 31; -pub const MODE32_BIT: ::std::os::raw::c_uint = 16; -pub const MODE_MASK: ::std::os::raw::c_uint = 31; -pub const V4_PSR_T_BIT: ::std::os::raw::c_uint = 32; -pub const V7M_PSR_T_BIT: ::std::os::raw::c_uint = 16777216; -pub const PSR_T_BIT: ::std::os::raw::c_uint = 32; -pub const PSR_F_BIT: ::std::os::raw::c_uint = 64; -pub const PSR_I_BIT: ::std::os::raw::c_uint = 128; -pub const PSR_A_BIT: ::std::os::raw::c_uint = 256; -pub const PSR_E_BIT: ::std::os::raw::c_uint = 512; -pub const PSR_J_BIT: ::std::os::raw::c_uint = 16777216; -pub const PSR_Q_BIT: ::std::os::raw::c_uint = 134217728; -pub const PSR_V_BIT: ::std::os::raw::c_uint = 268435456; -pub const PSR_C_BIT: ::std::os::raw::c_uint = 536870912; -pub const PSR_Z_BIT: ::std::os::raw::c_uint = 1073741824; -pub const PSR_N_BIT: ::std::os::raw::c_uint = 2147483648; -pub const PSR_f: ::std::os::raw::c_uint = 4278190080; -pub const PSR_s: ::std::os::raw::c_uint = 16711680; -pub const PSR_x: ::std::os::raw::c_uint = 65280; -pub const PSR_c: ::std::os::raw::c_uint = 255; -pub const APSR_MASK: ::std::os::raw::c_uint = 4161732608; -pub const PSR_ISET_MASK: ::std::os::raw::c_uint = 16777232; -pub const PSR_IT_MASK: ::std::os::raw::c_uint = 100727808; -pub const PSR_ENDIAN_MASK: ::std::os::raw::c_uint = 512; -pub const PSR_ENDSTATE: ::std::os::raw::c_uint = 0; -pub const PT_TEXT_ADDR: ::std::os::raw::c_uint = 65536; -pub const PT_DATA_ADDR: ::std::os::raw::c_uint = 65540; -pub const PT_TEXT_END_ADDR: ::std::os::raw::c_uint = 65544; -pub const ARM_VFPREGS_SIZE: ::std::os::raw::c_uint = 260; -pub const KVM_ARM_TARGET_CORTEX_A15: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_TARGET_CORTEX_A7: ::std::os::raw::c_uint = 1; -pub const KVM_ARM_NUM_TARGETS: ::std::os::raw::c_uint = 2; -pub const KVM_ARM_DEVICE_TYPE_SHIFT: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_DEVICE_TYPE_MASK: ::std::os::raw::c_uint = 65535; -pub const KVM_ARM_DEVICE_ID_SHIFT: ::std::os::raw::c_uint = 16; -pub const KVM_ARM_DEVICE_ID_MASK: ::std::os::raw::c_uint = 4294901760; -pub const KVM_ARM_DEVICE_VGIC_V2: ::std::os::raw::c_uint = 0; -pub const KVM_VGIC_V2_ADDR_TYPE_DIST: ::std::os::raw::c_uint = 0; -pub const KVM_VGIC_V2_ADDR_TYPE_CPU: ::std::os::raw::c_uint = 1; -pub const KVM_VGIC_V2_DIST_SIZE: ::std::os::raw::c_uint = 4096; -pub const KVM_VGIC_V2_CPU_SIZE: ::std::os::raw::c_uint = 8192; -pub const KVM_ARM_VCPU_POWER_OFF: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_VCPU_PSCI_0_2: ::std::os::raw::c_uint = 1; -pub const KVM_REG_ARM_COPROC_MASK: ::std::os::raw::c_uint = 268369920; -pub const KVM_REG_ARM_COPROC_SHIFT: ::std::os::raw::c_uint = 16; -pub const KVM_REG_ARM_32_OPC2_MASK: ::std::os::raw::c_uint = 7; -pub const KVM_REG_ARM_32_OPC2_SHIFT: ::std::os::raw::c_uint = 0; -pub const KVM_REG_ARM_OPC1_MASK: ::std::os::raw::c_uint = 120; -pub const KVM_REG_ARM_OPC1_SHIFT: ::std::os::raw::c_uint = 3; -pub const KVM_REG_ARM_CRM_MASK: ::std::os::raw::c_uint = 1920; -pub const KVM_REG_ARM_CRM_SHIFT: ::std::os::raw::c_uint = 7; -pub const KVM_REG_ARM_32_CRN_MASK: ::std::os::raw::c_uint = 30720; -pub const KVM_REG_ARM_32_CRN_SHIFT: ::std::os::raw::c_uint = 11; -pub const KVM_REG_ARM_CORE: ::std::os::raw::c_uint = 1048576; -pub const KVM_REG_ARM_DEMUX: ::std::os::raw::c_uint = 1114112; -pub const KVM_REG_ARM_DEMUX_ID_MASK: ::std::os::raw::c_uint = 65280; -pub const KVM_REG_ARM_DEMUX_ID_SHIFT: ::std::os::raw::c_uint = 8; -pub const KVM_REG_ARM_DEMUX_ID_CCSIDR: ::std::os::raw::c_uint = 0; -pub const KVM_REG_ARM_DEMUX_VAL_MASK: ::std::os::raw::c_uint = 255; -pub const KVM_REG_ARM_DEMUX_VAL_SHIFT: ::std::os::raw::c_uint = 0; -pub const KVM_REG_ARM_VFP: ::std::os::raw::c_uint = 1179648; -pub const KVM_REG_ARM_VFP_MASK: ::std::os::raw::c_uint = 65535; -pub const KVM_REG_ARM_VFP_BASE_REG: ::std::os::raw::c_uint = 0; -pub const KVM_REG_ARM_VFP_FPSID: ::std::os::raw::c_uint = 4096; -pub const KVM_REG_ARM_VFP_FPSCR: ::std::os::raw::c_uint = 4097; -pub const KVM_REG_ARM_VFP_MVFR1: ::std::os::raw::c_uint = 4102; -pub const KVM_REG_ARM_VFP_MVFR0: ::std::os::raw::c_uint = 4103; -pub const KVM_REG_ARM_VFP_FPEXC: ::std::os::raw::c_uint = 4104; -pub const KVM_REG_ARM_VFP_FPINST: ::std::os::raw::c_uint = 4105; -pub const KVM_REG_ARM_VFP_FPINST2: ::std::os::raw::c_uint = 4106; -pub const KVM_DEV_ARM_VGIC_GRP_ADDR: ::std::os::raw::c_uint = 0; -pub const KVM_DEV_ARM_VGIC_GRP_DIST_REGS: ::std::os::raw::c_uint = 1; -pub const KVM_DEV_ARM_VGIC_GRP_CPU_REGS: ::std::os::raw::c_uint = 2; -pub const KVM_DEV_ARM_VGIC_CPUID_SHIFT: ::std::os::raw::c_uint = 32; -pub const KVM_DEV_ARM_VGIC_CPUID_MASK: ::std::os::raw::c_ulonglong = 1095216660480; -pub const KVM_DEV_ARM_VGIC_OFFSET_SHIFT: ::std::os::raw::c_uint = 0; -pub const KVM_DEV_ARM_VGIC_OFFSET_MASK: ::std::os::raw::c_uint = 4294967295; -pub const KVM_DEV_ARM_VGIC_GRP_NR_IRQS: ::std::os::raw::c_uint = 3; -pub const KVM_DEV_ARM_VGIC_GRP_CTRL: ::std::os::raw::c_uint = 4; -pub const KVM_DEV_ARM_VGIC_CTRL_INIT: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_IRQ_TYPE_SHIFT: ::std::os::raw::c_uint = 24; -pub const KVM_ARM_IRQ_TYPE_MASK: ::std::os::raw::c_uint = 255; -pub const KVM_ARM_IRQ_VCPU_SHIFT: ::std::os::raw::c_uint = 16; -pub const KVM_ARM_IRQ_VCPU_MASK: ::std::os::raw::c_uint = 255; -pub const KVM_ARM_IRQ_NUM_SHIFT: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_IRQ_NUM_MASK: ::std::os::raw::c_uint = 65535; -pub const KVM_ARM_IRQ_TYPE_CPU: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_IRQ_TYPE_SPI: ::std::os::raw::c_uint = 1; -pub const KVM_ARM_IRQ_TYPE_PPI: ::std::os::raw::c_uint = 2; -pub const KVM_ARM_IRQ_CPU_IRQ: ::std::os::raw::c_uint = 0; -pub const KVM_ARM_IRQ_CPU_FIQ: ::std::os::raw::c_uint = 1; -pub const KVM_ARM_IRQ_GIC_MAX: ::std::os::raw::c_uint = 127; -pub const KVM_NR_IRQCHIPS: ::std::os::raw::c_uint = 1; -pub const KVM_PSCI_FN_BASE: ::std::os::raw::c_uint = 2512501342; -pub const KVM_PSCI_RET_SUCCESS: ::std::os::raw::c_uint = 0; -pub const KVM_PSCI_RET_NI: ::std::os::raw::c_int = -1; -pub const KVM_PSCI_RET_INVAL: ::std::os::raw::c_int = -2; -pub const KVM_PSCI_RET_DENIED: ::std::os::raw::c_int = -3; -pub const KVM_API_VERSION: ::std::os::raw::c_uint = 12; -pub const KVM_TRC_SHIFT: ::std::os::raw::c_uint = 16; -pub const KVM_TRC_ENTRYEXIT: ::std::os::raw::c_uint = 65536; -pub const KVM_TRC_HANDLER: ::std::os::raw::c_uint = 131072; -pub const KVM_TRC_VMENTRY: ::std::os::raw::c_uint = 65537; -pub const KVM_TRC_VMEXIT: ::std::os::raw::c_uint = 65538; -pub const KVM_TRC_PAGE_FAULT: ::std::os::raw::c_uint = 131073; -pub const KVM_TRC_HEAD_SIZE: ::std::os::raw::c_uint = 12; -pub const KVM_TRC_CYCLE_SIZE: ::std::os::raw::c_uint = 8; -pub const KVM_TRC_EXTRA_MAX: ::std::os::raw::c_uint = 7; -pub const KVM_TRC_INJ_VIRQ: ::std::os::raw::c_uint = 131074; -pub const KVM_TRC_REDELIVER_EVT: ::std::os::raw::c_uint = 131075; -pub const KVM_TRC_PEND_INTR: ::std::os::raw::c_uint = 131076; -pub const KVM_TRC_IO_READ: ::std::os::raw::c_uint = 131077; -pub const KVM_TRC_IO_WRITE: ::std::os::raw::c_uint = 131078; -pub const KVM_TRC_CR_READ: ::std::os::raw::c_uint = 131079; -pub const KVM_TRC_CR_WRITE: ::std::os::raw::c_uint = 131080; -pub const KVM_TRC_DR_READ: ::std::os::raw::c_uint = 131081; -pub const KVM_TRC_DR_WRITE: ::std::os::raw::c_uint = 131082; -pub const KVM_TRC_MSR_READ: ::std::os::raw::c_uint = 131083; -pub const KVM_TRC_MSR_WRITE: ::std::os::raw::c_uint = 131084; -pub const KVM_TRC_CPUID: ::std::os::raw::c_uint = 131085; -pub const KVM_TRC_INTR: ::std::os::raw::c_uint = 131086; -pub const KVM_TRC_NMI: ::std::os::raw::c_uint = 131087; -pub const KVM_TRC_VMMCALL: ::std::os::raw::c_uint = 131088; -pub const KVM_TRC_HLT: ::std::os::raw::c_uint = 131089; -pub const KVM_TRC_CLTS: ::std::os::raw::c_uint = 131090; -pub const KVM_TRC_LMSW: ::std::os::raw::c_uint = 131091; -pub const KVM_TRC_APIC_ACCESS: ::std::os::raw::c_uint = 131092; -pub const KVM_TRC_TDP_FAULT: ::std::os::raw::c_uint = 131093; -pub const KVM_TRC_GTLB_WRITE: ::std::os::raw::c_uint = 131094; -pub const KVM_TRC_STLB_WRITE: ::std::os::raw::c_uint = 131095; -pub const KVM_TRC_STLB_INVAL: ::std::os::raw::c_uint = 131096; -pub const KVM_TRC_PPC_INSTR: ::std::os::raw::c_uint = 131097; -pub const KVM_MEM_LOG_DIRTY_PAGES: ::std::os::raw::c_uint = 1; -pub const KVM_MEM_READONLY: ::std::os::raw::c_uint = 2; -pub const KVM_PIT_SPEAKER_DUMMY: ::std::os::raw::c_uint = 1; -pub const KVM_S390_GET_SKEYS_NONE: ::std::os::raw::c_uint = 1; -pub const KVM_S390_SKEYS_MAX: ::std::os::raw::c_uint = 1048576; -pub const KVM_EXIT_UNKNOWN: ::std::os::raw::c_uint = 0; -pub const KVM_EXIT_EXCEPTION: ::std::os::raw::c_uint = 1; -pub const KVM_EXIT_IO: ::std::os::raw::c_uint = 2; -pub const KVM_EXIT_HYPERCALL: ::std::os::raw::c_uint = 3; -pub const KVM_EXIT_DEBUG: ::std::os::raw::c_uint = 4; -pub const KVM_EXIT_HLT: ::std::os::raw::c_uint = 5; -pub const KVM_EXIT_MMIO: ::std::os::raw::c_uint = 6; -pub const KVM_EXIT_IRQ_WINDOW_OPEN: ::std::os::raw::c_uint = 7; -pub const KVM_EXIT_SHUTDOWN: ::std::os::raw::c_uint = 8; -pub const KVM_EXIT_FAIL_ENTRY: ::std::os::raw::c_uint = 9; -pub const KVM_EXIT_INTR: ::std::os::raw::c_uint = 10; -pub const KVM_EXIT_SET_TPR: ::std::os::raw::c_uint = 11; -pub const KVM_EXIT_TPR_ACCESS: ::std::os::raw::c_uint = 12; -pub const KVM_EXIT_S390_SIEIC: ::std::os::raw::c_uint = 13; -pub const KVM_EXIT_S390_RESET: ::std::os::raw::c_uint = 14; -pub const KVM_EXIT_DCR: ::std::os::raw::c_uint = 15; -pub const KVM_EXIT_NMI: ::std::os::raw::c_uint = 16; -pub const KVM_EXIT_INTERNAL_ERROR: ::std::os::raw::c_uint = 17; -pub const KVM_EXIT_OSI: ::std::os::raw::c_uint = 18; -pub const KVM_EXIT_PAPR_HCALL: ::std::os::raw::c_uint = 19; -pub const KVM_EXIT_S390_UCONTROL: ::std::os::raw::c_uint = 20; -pub const KVM_EXIT_WATCHDOG: ::std::os::raw::c_uint = 21; -pub const KVM_EXIT_S390_TSCH: ::std::os::raw::c_uint = 22; -pub const KVM_EXIT_EPR: ::std::os::raw::c_uint = 23; -pub const KVM_EXIT_SYSTEM_EVENT: ::std::os::raw::c_uint = 24; -pub const KVM_EXIT_S390_STSI: ::std::os::raw::c_uint = 25; -pub const KVM_EXIT_IOAPIC_EOI: ::std::os::raw::c_uint = 26; -pub const KVM_INTERNAL_ERROR_EMULATION: ::std::os::raw::c_uint = 1; -pub const KVM_INTERNAL_ERROR_SIMUL_EX: ::std::os::raw::c_uint = 2; -pub const KVM_INTERNAL_ERROR_DELIVERY_EV: ::std::os::raw::c_uint = 3; -pub const KVM_EXIT_IO_IN: ::std::os::raw::c_uint = 0; -pub const KVM_EXIT_IO_OUT: ::std::os::raw::c_uint = 1; -pub const KVM_S390_RESET_POR: ::std::os::raw::c_uint = 1; -pub const KVM_S390_RESET_CLEAR: ::std::os::raw::c_uint = 2; -pub const KVM_S390_RESET_SUBSYSTEM: ::std::os::raw::c_uint = 4; -pub const KVM_S390_RESET_CPU_INIT: ::std::os::raw::c_uint = 8; -pub const KVM_S390_RESET_IPL: ::std::os::raw::c_uint = 16; -pub const KVM_SYSTEM_EVENT_SHUTDOWN: ::std::os::raw::c_uint = 1; -pub const KVM_SYSTEM_EVENT_RESET: ::std::os::raw::c_uint = 2; -pub const KVM_SYSTEM_EVENT_CRASH: ::std::os::raw::c_uint = 3; -pub const KVM_S390_MEMOP_LOGICAL_READ: ::std::os::raw::c_uint = 0; -pub const KVM_S390_MEMOP_LOGICAL_WRITE: ::std::os::raw::c_uint = 1; -pub const KVM_S390_MEMOP_F_CHECK_ONLY: ::std::os::raw::c_uint = 1; -pub const KVM_S390_MEMOP_F_INJECT_EXCEPTION: ::std::os::raw::c_uint = 2; -pub const KVM_MP_STATE_RUNNABLE: ::std::os::raw::c_uint = 0; -pub const KVM_MP_STATE_UNINITIALIZED: ::std::os::raw::c_uint = 1; -pub const KVM_MP_STATE_INIT_RECEIVED: ::std::os::raw::c_uint = 2; -pub const KVM_MP_STATE_HALTED: ::std::os::raw::c_uint = 3; -pub const KVM_MP_STATE_SIPI_RECEIVED: ::std::os::raw::c_uint = 4; -pub const KVM_MP_STATE_STOPPED: ::std::os::raw::c_uint = 5; -pub const KVM_MP_STATE_CHECK_STOP: ::std::os::raw::c_uint = 6; -pub const KVM_MP_STATE_OPERATING: ::std::os::raw::c_uint = 7; -pub const KVM_MP_STATE_LOAD: ::std::os::raw::c_uint = 8; -pub const KVM_S390_SIGP_STOP: ::std::os::raw::c_uint = 4294836224; -pub const KVM_S390_PROGRAM_INT: ::std::os::raw::c_uint = 4294836225; -pub const KVM_S390_SIGP_SET_PREFIX: ::std::os::raw::c_uint = 4294836226; -pub const KVM_S390_RESTART: ::std::os::raw::c_uint = 4294836227; -pub const KVM_S390_INT_PFAULT_INIT: ::std::os::raw::c_uint = 4294836228; -pub const KVM_S390_INT_PFAULT_DONE: ::std::os::raw::c_uint = 4294836229; -pub const KVM_S390_MCHK: ::std::os::raw::c_uint = 4294840320; -pub const KVM_S390_INT_CLOCK_COMP: ::std::os::raw::c_uint = 4294905860; -pub const KVM_S390_INT_CPU_TIMER: ::std::os::raw::c_uint = 4294905861; -pub const KVM_S390_INT_VIRTIO: ::std::os::raw::c_uint = 4294911491; -pub const KVM_S390_INT_SERVICE: ::std::os::raw::c_uint = 4294910977; -pub const KVM_S390_INT_EMERGENCY: ::std::os::raw::c_uint = 4294906369; -pub const KVM_S390_INT_EXTERNAL_CALL: ::std::os::raw::c_uint = 4294906370; -pub const KVM_S390_INT_IO_MIN: ::std::os::raw::c_uint = 0; -pub const KVM_S390_INT_IO_MAX: ::std::os::raw::c_uint = 4294836223; -pub const KVM_S390_INT_IO_AI_MASK: ::std::os::raw::c_uint = 67108864; -pub const KVM_S390_STOP_FLAG_STORE_STATUS: ::std::os::raw::c_uint = 1; -pub const KVM_GUESTDBG_ENABLE: ::std::os::raw::c_uint = 1; -pub const KVM_GUESTDBG_SINGLESTEP: ::std::os::raw::c_uint = 2; -pub const KVM_PPC_PAGE_SIZES_MAX_SZ: ::std::os::raw::c_uint = 8; -pub const KVM_PPC_PAGE_SIZES_REAL: ::std::os::raw::c_uint = 1; -pub const KVM_PPC_1T_SEGMENTS: ::std::os::raw::c_uint = 2; -pub const KVM_PPC_PVINFO_FLAGS_EV_IDLE: ::std::os::raw::c_uint = 1; -pub const KVMIO: ::std::os::raw::c_uint = 174; -pub const KVM_VM_S390_UCONTROL: ::std::os::raw::c_uint = 1; -pub const KVM_VM_PPC_HV: ::std::os::raw::c_uint = 1; -pub const KVM_VM_PPC_PR: ::std::os::raw::c_uint = 2; -pub const KVM_S390_SIE_PAGE_OFFSET: ::std::os::raw::c_uint = 1; -pub const KVM_CAP_IRQCHIP: ::std::os::raw::c_uint = 0; -pub const KVM_CAP_HLT: ::std::os::raw::c_uint = 1; -pub const KVM_CAP_MMU_SHADOW_CACHE_CONTROL: ::std::os::raw::c_uint = 2; -pub const KVM_CAP_USER_MEMORY: ::std::os::raw::c_uint = 3; -pub const KVM_CAP_SET_TSS_ADDR: ::std::os::raw::c_uint = 4; -pub const KVM_CAP_VAPIC: ::std::os::raw::c_uint = 6; -pub const KVM_CAP_EXT_CPUID: ::std::os::raw::c_uint = 7; -pub const KVM_CAP_CLOCKSOURCE: ::std::os::raw::c_uint = 8; -pub const KVM_CAP_NR_VCPUS: ::std::os::raw::c_uint = 9; -pub const KVM_CAP_NR_MEMSLOTS: ::std::os::raw::c_uint = 10; -pub const KVM_CAP_PIT: ::std::os::raw::c_uint = 11; -pub const KVM_CAP_NOP_IO_DELAY: ::std::os::raw::c_uint = 12; -pub const KVM_CAP_PV_MMU: ::std::os::raw::c_uint = 13; -pub const KVM_CAP_MP_STATE: ::std::os::raw::c_uint = 14; -pub const KVM_CAP_COALESCED_MMIO: ::std::os::raw::c_uint = 15; -pub const KVM_CAP_SYNC_MMU: ::std::os::raw::c_uint = 16; -pub const KVM_CAP_IOMMU: ::std::os::raw::c_uint = 18; -pub const KVM_CAP_DESTROY_MEMORY_REGION_WORKS: ::std::os::raw::c_uint = 21; -pub const KVM_CAP_USER_NMI: ::std::os::raw::c_uint = 22; -pub const KVM_CAP_SET_GUEST_DEBUG: ::std::os::raw::c_uint = 23; -pub const KVM_CAP_IRQ_ROUTING: ::std::os::raw::c_uint = 25; -pub const KVM_CAP_IRQ_INJECT_STATUS: ::std::os::raw::c_uint = 26; -pub const KVM_CAP_ASSIGN_DEV_IRQ: ::std::os::raw::c_uint = 29; -pub const KVM_CAP_JOIN_MEMORY_REGIONS_WORKS: ::std::os::raw::c_uint = 30; -pub const KVM_CAP_IRQFD: ::std::os::raw::c_uint = 32; -pub const KVM_CAP_SET_BOOT_CPU_ID: ::std::os::raw::c_uint = 34; -pub const KVM_CAP_IOEVENTFD: ::std::os::raw::c_uint = 36; -pub const KVM_CAP_SET_IDENTITY_MAP_ADDR: ::std::os::raw::c_uint = 37; -pub const KVM_CAP_ADJUST_CLOCK: ::std::os::raw::c_uint = 39; -pub const KVM_CAP_INTERNAL_ERROR_DATA: ::std::os::raw::c_uint = 40; -pub const KVM_CAP_S390_PSW: ::std::os::raw::c_uint = 42; -pub const KVM_CAP_PPC_SEGSTATE: ::std::os::raw::c_uint = 43; -pub const KVM_CAP_HYPERV: ::std::os::raw::c_uint = 44; -pub const KVM_CAP_HYPERV_VAPIC: ::std::os::raw::c_uint = 45; -pub const KVM_CAP_HYPERV_SPIN: ::std::os::raw::c_uint = 46; -pub const KVM_CAP_PCI_SEGMENT: ::std::os::raw::c_uint = 47; -pub const KVM_CAP_PPC_PAIRED_SINGLES: ::std::os::raw::c_uint = 48; -pub const KVM_CAP_INTR_SHADOW: ::std::os::raw::c_uint = 49; -pub const KVM_CAP_X86_ROBUST_SINGLESTEP: ::std::os::raw::c_uint = 51; -pub const KVM_CAP_PPC_OSI: ::std::os::raw::c_uint = 52; -pub const KVM_CAP_PPC_UNSET_IRQ: ::std::os::raw::c_uint = 53; -pub const KVM_CAP_ENABLE_CAP: ::std::os::raw::c_uint = 54; -pub const KVM_CAP_PPC_GET_PVINFO: ::std::os::raw::c_uint = 57; -pub const KVM_CAP_PPC_IRQ_LEVEL: ::std::os::raw::c_uint = 58; -pub const KVM_CAP_ASYNC_PF: ::std::os::raw::c_uint = 59; -pub const KVM_CAP_TSC_CONTROL: ::std::os::raw::c_uint = 60; -pub const KVM_CAP_GET_TSC_KHZ: ::std::os::raw::c_uint = 61; -pub const KVM_CAP_PPC_BOOKE_SREGS: ::std::os::raw::c_uint = 62; -pub const KVM_CAP_SPAPR_TCE: ::std::os::raw::c_uint = 63; -pub const KVM_CAP_PPC_SMT: ::std::os::raw::c_uint = 64; -pub const KVM_CAP_PPC_RMA: ::std::os::raw::c_uint = 65; -pub const KVM_CAP_MAX_VCPUS: ::std::os::raw::c_uint = 66; -pub const KVM_CAP_PPC_HIOR: ::std::os::raw::c_uint = 67; -pub const KVM_CAP_PPC_PAPR: ::std::os::raw::c_uint = 68; -pub const KVM_CAP_SW_TLB: ::std::os::raw::c_uint = 69; -pub const KVM_CAP_ONE_REG: ::std::os::raw::c_uint = 70; -pub const KVM_CAP_S390_GMAP: ::std::os::raw::c_uint = 71; -pub const KVM_CAP_TSC_DEADLINE_TIMER: ::std::os::raw::c_uint = 72; -pub const KVM_CAP_S390_UCONTROL: ::std::os::raw::c_uint = 73; -pub const KVM_CAP_SYNC_REGS: ::std::os::raw::c_uint = 74; -pub const KVM_CAP_PCI_2_3: ::std::os::raw::c_uint = 75; -pub const KVM_CAP_KVMCLOCK_CTRL: ::std::os::raw::c_uint = 76; -pub const KVM_CAP_SIGNAL_MSI: ::std::os::raw::c_uint = 77; -pub const KVM_CAP_PPC_GET_SMMU_INFO: ::std::os::raw::c_uint = 78; -pub const KVM_CAP_S390_COW: ::std::os::raw::c_uint = 79; -pub const KVM_CAP_PPC_ALLOC_HTAB: ::std::os::raw::c_uint = 80; -pub const KVM_CAP_READONLY_MEM: ::std::os::raw::c_uint = 81; -pub const KVM_CAP_IRQFD_RESAMPLE: ::std::os::raw::c_uint = 82; -pub const KVM_CAP_PPC_BOOKE_WATCHDOG: ::std::os::raw::c_uint = 83; -pub const KVM_CAP_PPC_HTAB_FD: ::std::os::raw::c_uint = 84; -pub const KVM_CAP_S390_CSS_SUPPORT: ::std::os::raw::c_uint = 85; -pub const KVM_CAP_PPC_EPR: ::std::os::raw::c_uint = 86; -pub const KVM_CAP_ARM_PSCI: ::std::os::raw::c_uint = 87; -pub const KVM_CAP_ARM_SET_DEVICE_ADDR: ::std::os::raw::c_uint = 88; -pub const KVM_CAP_DEVICE_CTRL: ::std::os::raw::c_uint = 89; -pub const KVM_CAP_IRQ_MPIC: ::std::os::raw::c_uint = 90; -pub const KVM_CAP_PPC_RTAS: ::std::os::raw::c_uint = 91; -pub const KVM_CAP_IRQ_XICS: ::std::os::raw::c_uint = 92; -pub const KVM_CAP_ARM_EL1_32BIT: ::std::os::raw::c_uint = 93; -pub const KVM_CAP_SPAPR_MULTITCE: ::std::os::raw::c_uint = 94; -pub const KVM_CAP_EXT_EMUL_CPUID: ::std::os::raw::c_uint = 95; -pub const KVM_CAP_HYPERV_TIME: ::std::os::raw::c_uint = 96; -pub const KVM_CAP_IOAPIC_POLARITY_IGNORED: ::std::os::raw::c_uint = 97; -pub const KVM_CAP_ENABLE_CAP_VM: ::std::os::raw::c_uint = 98; -pub const KVM_CAP_S390_IRQCHIP: ::std::os::raw::c_uint = 99; -pub const KVM_CAP_IOEVENTFD_NO_LENGTH: ::std::os::raw::c_uint = 100; -pub const KVM_CAP_VM_ATTRIBUTES: ::std::os::raw::c_uint = 101; -pub const KVM_CAP_ARM_PSCI_0_2: ::std::os::raw::c_uint = 102; -pub const KVM_CAP_PPC_FIXUP_HCALL: ::std::os::raw::c_uint = 103; -pub const KVM_CAP_PPC_ENABLE_HCALL: ::std::os::raw::c_uint = 104; -pub const KVM_CAP_CHECK_EXTENSION_VM: ::std::os::raw::c_uint = 105; -pub const KVM_CAP_S390_USER_SIGP: ::std::os::raw::c_uint = 106; -pub const KVM_CAP_S390_VECTOR_REGISTERS: ::std::os::raw::c_uint = 107; -pub const KVM_CAP_S390_MEM_OP: ::std::os::raw::c_uint = 108; -pub const KVM_CAP_S390_USER_STSI: ::std::os::raw::c_uint = 109; -pub const KVM_CAP_S390_SKEYS: ::std::os::raw::c_uint = 110; -pub const KVM_CAP_MIPS_FPU: ::std::os::raw::c_uint = 111; -pub const KVM_CAP_MIPS_MSA: ::std::os::raw::c_uint = 112; -pub const KVM_CAP_S390_INJECT_IRQ: ::std::os::raw::c_uint = 113; -pub const KVM_CAP_S390_IRQ_STATE: ::std::os::raw::c_uint = 114; -pub const KVM_CAP_PPC_HWRNG: ::std::os::raw::c_uint = 115; -pub const KVM_CAP_DISABLE_QUIRKS: ::std::os::raw::c_uint = 116; -pub const KVM_CAP_X86_SMM: ::std::os::raw::c_uint = 117; -pub const KVM_CAP_MULTI_ADDRESS_SPACE: ::std::os::raw::c_uint = 118; -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_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; -pub const KVM_IRQFD_FLAG_DEASSIGN: ::std::os::raw::c_uint = 1; -pub const KVM_IRQFD_FLAG_RESAMPLE: ::std::os::raw::c_uint = 2; -pub const KVM_MMU_FSL_BOOKE_NOHV: ::std::os::raw::c_uint = 0; -pub const KVM_MMU_FSL_BOOKE_HV: ::std::os::raw::c_uint = 1; -pub const KVM_REG_ARCH_MASK: ::std::os::raw::c_longlong = -72057594037927936; -pub const KVM_REG_GENERIC: ::std::os::raw::c_uint = 0; -pub const KVM_REG_PPC: ::std::os::raw::c_ulonglong = 1152921504606846976; -pub const KVM_REG_X86: ::std::os::raw::c_ulonglong = 2305843009213693952; -pub const KVM_REG_IA64: ::std::os::raw::c_ulonglong = 3458764513820540928; -pub const KVM_REG_ARM: ::std::os::raw::c_ulonglong = 4611686018427387904; -pub const KVM_REG_S390: ::std::os::raw::c_ulonglong = 5764607523034234880; -pub const KVM_REG_ARM64: ::std::os::raw::c_ulonglong = 6917529027641081856; -pub const KVM_REG_MIPS: ::std::os::raw::c_ulonglong = 8070450532247928832; -pub const KVM_REG_SIZE_SHIFT: ::std::os::raw::c_uint = 52; -pub const KVM_REG_SIZE_MASK: ::std::os::raw::c_ulonglong = 67553994410557440; -pub const KVM_REG_SIZE_U8: ::std::os::raw::c_uint = 0; -pub const KVM_REG_SIZE_U16: ::std::os::raw::c_ulonglong = 4503599627370496; -pub const KVM_REG_SIZE_U32: ::std::os::raw::c_ulonglong = 9007199254740992; -pub const KVM_REG_SIZE_U64: ::std::os::raw::c_ulonglong = 13510798882111488; -pub const KVM_REG_SIZE_U128: ::std::os::raw::c_ulonglong = 18014398509481984; -pub const KVM_REG_SIZE_U256: ::std::os::raw::c_ulonglong = 22517998136852480; -pub const KVM_REG_SIZE_U512: ::std::os::raw::c_ulonglong = 27021597764222976; -pub const KVM_REG_SIZE_U1024: ::std::os::raw::c_ulonglong = 31525197391593472; -pub const KVM_CREATE_DEVICE_TEST: ::std::os::raw::c_uint = 1; -pub const KVM_DEV_VFIO_GROUP: ::std::os::raw::c_uint = 1; -pub const KVM_DEV_VFIO_GROUP_ADD: ::std::os::raw::c_uint = 1; -pub const KVM_DEV_VFIO_GROUP_DEL: ::std::os::raw::c_uint = 2; -pub const KVM_S390_STORE_STATUS_NOADDR: ::std::os::raw::c_int = -1; -pub const KVM_S390_STORE_STATUS_PREFIXED: ::std::os::raw::c_int = -2; -pub const KVM_DEV_ASSIGN_ENABLE_IOMMU: ::std::os::raw::c_uint = 1; -pub const KVM_DEV_ASSIGN_PCI_2_3: ::std::os::raw::c_uint = 2; -pub const KVM_DEV_ASSIGN_MASK_INTX: ::std::os::raw::c_uint = 4; -pub const KVM_DEV_IRQ_HOST_INTX: ::std::os::raw::c_uint = 1; -pub const KVM_DEV_IRQ_HOST_MSI: ::std::os::raw::c_uint = 2; -pub const KVM_DEV_IRQ_HOST_MSIX: ::std::os::raw::c_uint = 4; -pub const KVM_DEV_IRQ_GUEST_INTX: ::std::os::raw::c_uint = 256; -pub const KVM_DEV_IRQ_GUEST_MSI: ::std::os::raw::c_uint = 512; -pub const KVM_DEV_IRQ_GUEST_MSIX: ::std::os::raw::c_uint = 1024; -pub const KVM_DEV_IRQ_HOST_MASK: ::std::os::raw::c_uint = 255; -pub const KVM_DEV_IRQ_GUEST_MASK: ::std::os::raw::c_uint = 65280; -pub const KVM_MAX_MSIX_PER_DEV: ::std::os::raw::c_uint = 256; -pub type __s8 = ::std::os::raw::c_schar; -pub type __u8 = ::std::os::raw::c_uchar; -pub type __s16 = ::std::os::raw::c_short; -pub type __u16 = ::std::os::raw::c_ushort; -pub type __s32 = ::std::os::raw::c_int; -pub type __u32 = ::std::os::raw::c_uint; -pub type __s64 = ::std::os::raw::c_longlong; -pub type __u64 = ::std::os::raw::c_ulonglong; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct __kernel_fd_set { - pub fds_bits: [::std::os::raw::c_ulong; 16usize], -} -#[test] -fn bindgen_test_layout___kernel_fd_set() { - assert_eq!( - ::std::mem::size_of::<__kernel_fd_set>(), - 128usize, - concat!("Size of: ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fd_set>(), - 8usize, - concat!("Alignment of ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fd_set>())).fds_bits as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fd_set), - "::", - stringify!(fds_bits) - ) - ); -} -pub type __kernel_sighandler_t = - ::std::option::Option<unsafe extern "C" fn(arg1: ::std::os::raw::c_int)>; -pub type __kernel_key_t = ::std::os::raw::c_int; -pub type __kernel_mqd_t = ::std::os::raw::c_int; -pub type __kernel_mode_t = ::std::os::raw::c_ushort; -pub type __kernel_ipc_pid_t = ::std::os::raw::c_ushort; -pub type __kernel_uid_t = ::std::os::raw::c_ushort; -pub type __kernel_gid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_dev_t = ::std::os::raw::c_ushort; -pub type __kernel_long_t = ::std::os::raw::c_long; -pub type __kernel_ulong_t = ::std::os::raw::c_ulong; -pub type __kernel_ino_t = __kernel_ulong_t; -pub type __kernel_pid_t = ::std::os::raw::c_int; -pub type __kernel_suseconds_t = __kernel_long_t; -pub type __kernel_daddr_t = ::std::os::raw::c_int; -pub type __kernel_uid32_t = ::std::os::raw::c_uint; -pub type __kernel_gid32_t = ::std::os::raw::c_uint; -pub type __kernel_old_uid_t = __kernel_uid_t; -pub type __kernel_old_gid_t = __kernel_gid_t; -pub type __kernel_size_t = ::std::os::raw::c_uint; -pub type __kernel_ssize_t = ::std::os::raw::c_int; -pub type __kernel_ptrdiff_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct __kernel_fsid_t { - pub val: [::std::os::raw::c_int; 2usize], -} -#[test] -fn bindgen_test_layout___kernel_fsid_t() { - assert_eq!( - ::std::mem::size_of::<__kernel_fsid_t>(), - 8usize, - concat!("Size of: ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fsid_t>(), - 4usize, - concat!("Alignment of ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fsid_t>())).val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fsid_t), - "::", - stringify!(val) - ) - ); -} -pub type __kernel_off_t = __kernel_long_t; -pub type __kernel_loff_t = ::std::os::raw::c_longlong; -pub type __kernel_time_t = __kernel_long_t; -pub type __kernel_clock_t = __kernel_long_t; -pub type __kernel_timer_t = ::std::os::raw::c_int; -pub type __kernel_clockid_t = ::std::os::raw::c_int; -pub type __kernel_caddr_t = *mut ::std::os::raw::c_char; -pub type __kernel_uid16_t = ::std::os::raw::c_ushort; -pub type __kernel_gid16_t = ::std::os::raw::c_ushort; -pub type __le16 = __u16; -pub type __be16 = __u16; -pub type __le32 = __u32; -pub type __be32 = __u32; -pub type __le64 = __u64; -pub type __be64 = __u64; -pub type __sum16 = __u16; -pub type __wsum = __u32; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct pt_regs { - pub uregs: [::std::os::raw::c_long; 18usize], -} -#[test] -fn bindgen_test_layout_pt_regs() { - assert_eq!( - ::std::mem::size_of::<pt_regs>(), - 144usize, - concat!("Size of: ", stringify!(pt_regs)) - ); - assert_eq!( - ::std::mem::align_of::<pt_regs>(), - 8usize, - concat!("Alignment of ", stringify!(pt_regs)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<pt_regs>())).uregs as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(pt_regs), - "::", - stringify!(uregs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_regs { - pub usr_regs: pt_regs, - pub svc_regs: [::std::os::raw::c_ulong; 3usize], - pub abt_regs: [::std::os::raw::c_ulong; 3usize], - pub und_regs: [::std::os::raw::c_ulong; 3usize], - pub irq_regs: [::std::os::raw::c_ulong; 3usize], - pub fiq_regs: [::std::os::raw::c_ulong; 8usize], -} -#[test] -fn bindgen_test_layout_kvm_regs() { - assert_eq!( - ::std::mem::size_of::<kvm_regs>(), - 304usize, - concat!("Size of: ", stringify!(kvm_regs)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_regs>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_regs)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_regs>())).usr_regs as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_regs), - "::", - stringify!(usr_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_regs>())).svc_regs as *const _ as usize }, - 144usize, - concat!( - "Offset of field: ", - stringify!(kvm_regs), - "::", - stringify!(svc_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_regs>())).abt_regs as *const _ as usize }, - 168usize, - concat!( - "Offset of field: ", - stringify!(kvm_regs), - "::", - stringify!(abt_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_regs>())).und_regs as *const _ as usize }, - 192usize, - concat!( - "Offset of field: ", - stringify!(kvm_regs), - "::", - stringify!(und_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_regs>())).irq_regs as *const _ as usize }, - 216usize, - concat!( - "Offset of field: ", - stringify!(kvm_regs), - "::", - stringify!(irq_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_regs>())).fiq_regs as *const _ as usize }, - 240usize, - concat!( - "Offset of field: ", - stringify!(kvm_regs), - "::", - stringify!(fiq_regs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_vcpu_init { - pub target: __u32, - pub features: [__u32; 7usize], -} -#[test] -fn bindgen_test_layout_kvm_vcpu_init() { - assert_eq!( - ::std::mem::size_of::<kvm_vcpu_init>(), - 32usize, - concat!("Size of: ", stringify!(kvm_vcpu_init)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_vcpu_init>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_vcpu_init)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_vcpu_init>())).target as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_vcpu_init), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_vcpu_init>())).features as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_vcpu_init), - "::", - stringify!(features) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_sregs {} -#[test] -fn bindgen_test_layout_kvm_sregs() { - assert_eq!( - ::std::mem::size_of::<kvm_sregs>(), - 0usize, - concat!("Size of: ", stringify!(kvm_sregs)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_sregs>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_sregs)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_fpu {} -#[test] -fn bindgen_test_layout_kvm_fpu() { - assert_eq!( - ::std::mem::size_of::<kvm_fpu>(), - 0usize, - concat!("Size of: ", stringify!(kvm_fpu)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_fpu>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_fpu)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_guest_debug_arch {} -#[test] -fn bindgen_test_layout_kvm_guest_debug_arch() { - assert_eq!( - ::std::mem::size_of::<kvm_guest_debug_arch>(), - 0usize, - concat!("Size of: ", stringify!(kvm_guest_debug_arch)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_guest_debug_arch>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_guest_debug_arch)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_debug_exit_arch {} -#[test] -fn bindgen_test_layout_kvm_debug_exit_arch() { - assert_eq!( - ::std::mem::size_of::<kvm_debug_exit_arch>(), - 0usize, - concat!("Size of: ", stringify!(kvm_debug_exit_arch)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_debug_exit_arch>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_debug_exit_arch)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_sync_regs {} -#[test] -fn bindgen_test_layout_kvm_sync_regs() { - assert_eq!( - ::std::mem::size_of::<kvm_sync_regs>(), - 0usize, - concat!("Size of: ", stringify!(kvm_sync_regs)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_sync_regs>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_sync_regs)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_arch_memory_slot {} -#[test] -fn bindgen_test_layout_kvm_arch_memory_slot() { - assert_eq!( - ::std::mem::size_of::<kvm_arch_memory_slot>(), - 0usize, - concat!("Size of: ", stringify!(kvm_arch_memory_slot)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_arch_memory_slot>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_arch_memory_slot)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_user_trace_setup { - pub buf_size: __u32, - pub buf_nr: __u32, -} -#[test] -fn bindgen_test_layout_kvm_user_trace_setup() { - assert_eq!( - ::std::mem::size_of::<kvm_user_trace_setup>(), - 8usize, - concat!("Size of: ", stringify!(kvm_user_trace_setup)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_user_trace_setup>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_user_trace_setup)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_user_trace_setup>())).buf_size as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_user_trace_setup), - "::", - stringify!(buf_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_user_trace_setup>())).buf_nr as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_user_trace_setup), - "::", - stringify!(buf_nr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_breakpoint { - pub enabled: __u32, - pub padding: __u32, - pub address: __u64, -} -#[test] -fn bindgen_test_layout_kvm_breakpoint() { - assert_eq!( - ::std::mem::size_of::<kvm_breakpoint>(), - 16usize, - concat!("Size of: ", stringify!(kvm_breakpoint)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_breakpoint>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_breakpoint)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_breakpoint>())).enabled as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_breakpoint), - "::", - stringify!(enabled) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_breakpoint>())).padding as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_breakpoint), - "::", - stringify!(padding) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_breakpoint>())).address as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_breakpoint), - "::", - stringify!(address) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_debug_guest { - pub enabled: __u32, - pub pad: __u32, - pub breakpoints: [kvm_breakpoint; 4usize], - pub singlestep: __u32, -} -#[test] -fn bindgen_test_layout_kvm_debug_guest() { - assert_eq!( - ::std::mem::size_of::<kvm_debug_guest>(), - 80usize, - concat!("Size of: ", stringify!(kvm_debug_guest)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_debug_guest>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_debug_guest)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_debug_guest>())).enabled as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_debug_guest), - "::", - stringify!(enabled) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_debug_guest>())).pad as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_debug_guest), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_debug_guest>())).breakpoints as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_debug_guest), - "::", - stringify!(breakpoints) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_debug_guest>())).singlestep as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(kvm_debug_guest), - "::", - stringify!(singlestep) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_memory_region { - pub slot: __u32, - pub flags: __u32, - pub guest_phys_addr: __u64, - pub memory_size: __u64, -} -#[test] -fn bindgen_test_layout_kvm_memory_region() { - assert_eq!( - ::std::mem::size_of::<kvm_memory_region>(), - 24usize, - concat!("Size of: ", stringify!(kvm_memory_region)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_memory_region>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_memory_region)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_memory_region>())).slot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_memory_region), - "::", - stringify!(slot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_memory_region>())).flags as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_memory_region), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_memory_region>())).guest_phys_addr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_memory_region), - "::", - stringify!(guest_phys_addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_memory_region>())).memory_size as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_memory_region), - "::", - stringify!(memory_size) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_userspace_memory_region { - pub slot: __u32, - pub flags: __u32, - pub guest_phys_addr: __u64, - pub memory_size: __u64, - pub userspace_addr: __u64, -} -#[test] -fn bindgen_test_layout_kvm_userspace_memory_region() { - assert_eq!( - ::std::mem::size_of::<kvm_userspace_memory_region>(), - 32usize, - concat!("Size of: ", stringify!(kvm_userspace_memory_region)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_userspace_memory_region>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_userspace_memory_region)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_userspace_memory_region>())).slot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_userspace_memory_region), - "::", - stringify!(slot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_userspace_memory_region>())).flags as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_userspace_memory_region), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_userspace_memory_region>())).guest_phys_addr as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_userspace_memory_region), - "::", - stringify!(guest_phys_addr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_userspace_memory_region>())).memory_size as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_userspace_memory_region), - "::", - stringify!(memory_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_userspace_memory_region>())).userspace_addr as *const _ as - usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_userspace_memory_region), - "::", - stringify!(userspace_addr) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_irq_level { - pub __bindgen_anon_1: kvm_irq_level__bindgen_ty_1, - pub level: __u32, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_irq_level__bindgen_ty_1 { - pub irq: __u32, - pub status: __s32, - _bindgen_union_align: u32, -} -#[test] -fn bindgen_test_layout_kvm_irq_level__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_level__bindgen_ty_1>(), - 4usize, - concat!("Size of: ", stringify!(kvm_irq_level__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_level__bindgen_ty_1>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_irq_level__bindgen_ty_1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_level__bindgen_ty_1>())).irq as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_level__bindgen_ty_1), - "::", - stringify!(irq) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_level__bindgen_ty_1>())).status as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_level__bindgen_ty_1), - "::", - stringify!(status) - ) - ); -} -impl Default for kvm_irq_level__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_irq_level() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_level>(), - 8usize, - concat!("Size of: ", stringify!(kvm_irq_level)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_level>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_irq_level)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_level>())).level as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_level), - "::", - stringify!(level) - ) - ); -} -impl Default for kvm_irq_level { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_irqchip { - pub chip_id: __u32, - pub pad: __u32, - pub chip: kvm_irqchip__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_irqchip__bindgen_ty_1 { - pub dummy: [::std::os::raw::c_char; 512usize], - _bindgen_union_align: [u8 ; 512usize], -} -#[test] -fn bindgen_test_layout_kvm_irqchip__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_irqchip__bindgen_ty_1>(), - 512usize, - concat!("Size of: ", stringify!(kvm_irqchip__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irqchip__bindgen_ty_1>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_irqchip__bindgen_ty_1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqchip__bindgen_ty_1>())).dummy as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqchip__bindgen_ty_1), - "::", - stringify!(dummy) - ) - ); -} -impl Default for kvm_irqchip__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_irqchip() { - assert_eq!( - ::std::mem::size_of::<kvm_irqchip>(), - 520usize, - concat!("Size of: ", stringify!(kvm_irqchip)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irqchip>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_irqchip)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqchip>())).chip_id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqchip), - "::", - stringify!(chip_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqchip>())).pad as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqchip), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqchip>())).chip as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqchip), - "::", - stringify!(chip) - ) - ); -} -impl Default for kvm_irqchip { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_pit_config { - pub flags: __u32, - pub pad: [__u32; 15usize], -} -#[test] -fn bindgen_test_layout_kvm_pit_config() { - assert_eq!( - ::std::mem::size_of::<kvm_pit_config>(), - 64usize, - concat!("Size of: ", stringify!(kvm_pit_config)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_pit_config>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_pit_config)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_pit_config>())).flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_pit_config), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_pit_config>())).pad as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_pit_config), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_skeys { - pub start_gfn: __u64, - pub count: __u64, - pub skeydata_addr: __u64, - pub flags: __u32, - pub reserved: [__u32; 9usize], -} -#[test] -fn bindgen_test_layout_kvm_s390_skeys() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_skeys>(), - 64usize, - concat!("Size of: ", stringify!(kvm_s390_skeys)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_skeys>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_skeys)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_skeys>())).start_gfn as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_skeys), - "::", - stringify!(start_gfn) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_skeys>())).count as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_skeys), - "::", - stringify!(count) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_skeys>())).skeydata_addr as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_skeys), - "::", - stringify!(skeydata_addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_skeys>())).flags as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_skeys), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_skeys>())).reserved as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_skeys), - "::", - stringify!(reserved) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_run { - pub request_interrupt_window: __u8, - pub padding1: [__u8; 7usize], - pub exit_reason: __u32, - pub ready_for_interrupt_injection: __u8, - pub if_flag: __u8, - pub flags: __u16, - pub cr8: __u64, - pub apic_base: __u64, - pub __bindgen_anon_1: kvm_run__bindgen_ty_1, - pub kvm_valid_regs: __u64, - pub kvm_dirty_regs: __u64, - pub s: kvm_run__bindgen_ty_2, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_run__bindgen_ty_1 { - pub hw: kvm_run__bindgen_ty_1__bindgen_ty_1, - pub fail_entry: kvm_run__bindgen_ty_1__bindgen_ty_2, - pub ex: kvm_run__bindgen_ty_1__bindgen_ty_3, - pub io: kvm_run__bindgen_ty_1__bindgen_ty_4, - pub debug: kvm_run__bindgen_ty_1__bindgen_ty_5, - pub mmio: kvm_run__bindgen_ty_1__bindgen_ty_6, - pub hypercall: kvm_run__bindgen_ty_1__bindgen_ty_7, - pub tpr_access: kvm_run__bindgen_ty_1__bindgen_ty_8, - pub s390_sieic: kvm_run__bindgen_ty_1__bindgen_ty_9, - pub s390_reset_flags: __u64, - pub s390_ucontrol: kvm_run__bindgen_ty_1__bindgen_ty_10, - pub dcr: kvm_run__bindgen_ty_1__bindgen_ty_11, - pub internal: kvm_run__bindgen_ty_1__bindgen_ty_12, - pub osi: kvm_run__bindgen_ty_1__bindgen_ty_13, - pub papr_hcall: kvm_run__bindgen_ty_1__bindgen_ty_14, - pub s390_tsch: kvm_run__bindgen_ty_1__bindgen_ty_15, - pub epr: kvm_run__bindgen_ty_1__bindgen_ty_16, - pub system_event: kvm_run__bindgen_ty_1__bindgen_ty_17, - pub s390_stsi: kvm_run__bindgen_ty_1__bindgen_ty_18, - pub eoi: kvm_run__bindgen_ty_1__bindgen_ty_19, - pub padding: [::std::os::raw::c_char; 256usize], - _bindgen_union_align: [u64; 32usize], -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_1 { - pub hardware_exit_reason: __u64, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_1>(), - 8usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_1>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_1>())) - .hardware_exit_reason as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_1), - "::", - stringify!(hardware_exit_reason) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_2 { - pub hardware_entry_failure_reason: __u64, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_2() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_2>(), - 8usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_2)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_2>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_2>())) - .hardware_entry_failure_reason as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_2), - "::", - stringify!(hardware_entry_failure_reason) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_3 { - pub exception: __u32, - pub error_code: __u32, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_3() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_3>(), - 8usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_3)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_3>(), - 4usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_3>())).exception as - *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_3), - "::", - stringify!(exception) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_3>())).error_code as - *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_3), - "::", - stringify!(error_code) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_4 { - pub direction: __u8, - pub size: __u8, - pub port: __u16, - pub count: __u32, - pub data_offset: __u64, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_4() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_4>(), - 16usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_4>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_4>())).direction as - *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4), - "::", - stringify!(direction) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_4>())).size as *const _ as - usize - }, - 1usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4), - "::", - stringify!(size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_4>())).port as *const _ as - usize - }, - 2usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4), - "::", - stringify!(port) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_4>())).count as *const _ as - usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4), - "::", - stringify!(count) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_4>())).data_offset as - *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_4), - "::", - stringify!(data_offset) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_5 { - pub arch: kvm_debug_exit_arch, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_5() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_5>(), - 0usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_5)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_5>(), - 1usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_5>())).arch as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_5), - "::", - stringify!(arch) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_6 { - pub phys_addr: __u64, - pub data: [__u8; 8usize], - pub len: __u32, - pub is_write: __u8, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_6() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_6>(), - 24usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_6)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_6>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_6>())).phys_addr as - *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_6), - "::", - stringify!(phys_addr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_6>())).data as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_6), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_6>())).len as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_6), - "::", - stringify!(len) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_6>())).is_write as *const _ as - usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_6), - "::", - stringify!(is_write) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_7 { - pub nr: __u64, - pub args: [__u64; 6usize], - pub ret: __u64, - pub longmode: __u32, - pub pad: __u32, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_7() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_7>(), - 72usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_7>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_7>())).nr as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7), - "::", - stringify!(nr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_7>())).args as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7), - "::", - stringify!(args) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_7>())).ret as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7), - "::", - stringify!(ret) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_7>())).longmode as *const _ as - usize - }, - 64usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7), - "::", - stringify!(longmode) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_7>())).pad as *const _ as usize - }, - 68usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_7), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_8 { - pub rip: __u64, - pub is_write: __u32, - pub pad: __u32, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_8() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_8>(), - 16usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_8)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_8>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_8>())).rip as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_8), - "::", - stringify!(rip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_8>())).is_write as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_8), - "::", - stringify!(is_write) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_8>())).pad as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_8), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_9 { - pub icptcode: __u8, - pub ipa: __u16, - pub ipb: __u32, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_9() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_9>(), - 8usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1__bindgen_ty_9)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_9>(), - 4usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_9>())).icptcode as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_9), - "::", - stringify!(icptcode) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_9>())).ipa as *const _ as usize - }, - 2usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_9), - "::", - stringify!(ipa) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_9>())).ipb as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_9), - "::", - stringify!(ipb) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_10 { - pub trans_exc_code: __u64, - pub pgm_code: __u32, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_10() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_10>(), - 16usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_10) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_10>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_10>())).trans_exc_code as - *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_10), - "::", - stringify!(trans_exc_code) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_10>())).pgm_code as - *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_10), - "::", - stringify!(pgm_code) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_11 { - pub dcrn: __u32, - pub data: __u32, - pub is_write: __u8, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_11() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_11>(), - 12usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_11) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_11>(), - 4usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_11>())).dcrn as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_11), - "::", - stringify!(dcrn) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_11>())).data as *const _ as - usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_11), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_11>())).is_write as - *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_11), - "::", - stringify!(is_write) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_12 { - pub suberror: __u32, - pub ndata: __u32, - pub data: [__u64; 16usize], -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_12() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_12>(), - 136usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_12) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_12>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_12>())).suberror as - *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_12), - "::", - stringify!(suberror) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_12>())).ndata as *const _ as - usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_12), - "::", - stringify!(ndata) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_12>())).data as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_12), - "::", - stringify!(data) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_13 { - pub gprs: [__u64; 32usize], -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_13() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_13>(), - 256usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_13) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_13>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_13>())).gprs as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_13), - "::", - stringify!(gprs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_14 { - pub nr: __u64, - pub ret: __u64, - pub args: [__u64; 9usize], -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_14() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_14>(), - 88usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_14) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_14>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_14>())).nr as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_14), - "::", - stringify!(nr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_14>())).ret as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_14), - "::", - stringify!(ret) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_14>())).args as *const _ as - usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_14), - "::", - stringify!(args) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_15 { - pub subchannel_id: __u16, - pub subchannel_nr: __u16, - pub io_int_parm: __u32, - pub io_int_word: __u32, - pub ipb: __u32, - pub dequeued: __u8, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_15() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_15>(), - 20usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_15>(), - 4usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_15>())).subchannel_id as - *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15), - "::", - stringify!(subchannel_id) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_15>())).subchannel_nr as - *const _ as usize - }, - 2usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15), - "::", - stringify!(subchannel_nr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_15>())).io_int_parm as - *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15), - "::", - stringify!(io_int_parm) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_15>())).io_int_word as - *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15), - "::", - stringify!(io_int_word) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_15>())).ipb as *const _ as - usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15), - "::", - stringify!(ipb) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_15>())).dequeued as - *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_15), - "::", - stringify!(dequeued) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_16 { - pub epr: __u32, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_16() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_16>(), - 4usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_16) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_16>(), - 4usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_16) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_16>())).epr as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_16), - "::", - stringify!(epr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_17 { - pub type_: __u32, - pub flags: __u64, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_17() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_17>(), - 16usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_17) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_17>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_17) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_17>())).type_ as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_17), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_17>())).flags as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_17), - "::", - stringify!(flags) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_18 { - pub addr: __u64, - pub ar: __u8, - pub reserved: __u8, - pub fc: __u8, - pub sel1: __u8, - pub sel2: __u16, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_18() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_18>(), - 16usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_18>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_18>())).addr as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18), - "::", - stringify!(addr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_18>())).ar as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18), - "::", - stringify!(ar) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_18>())).reserved as - *const _ as usize - }, - 9usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18), - "::", - stringify!(reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_18>())).fc as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18), - "::", - stringify!(fc) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_18>())).sel1 as *const _ as - usize - }, - 11usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18), - "::", - stringify!(sel1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_18>())).sel2 as *const _ as - usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_18), - "::", - stringify!(sel2) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_run__bindgen_ty_1__bindgen_ty_19 { - pub vector: __u8, -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1__bindgen_ty_19() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1__bindgen_ty_19>(), - 1usize, - concat!( - "Size of: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_19) - ) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1__bindgen_ty_19>(), - 1usize, - concat!( - "Alignment of ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_19) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1__bindgen_ty_19>())).vector as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1__bindgen_ty_19), - "::", - stringify!(vector) - ) - ); -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_1>(), - 256usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_1>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_run__bindgen_ty_1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).hw as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(hw) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).fail_entry as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(fail_entry) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).ex as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(ex) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).io as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(io) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).debug as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(debug) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).mmio as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(mmio) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).hypercall as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(hypercall) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).tpr_access as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(tpr_access) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).s390_sieic as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(s390_sieic) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).s390_reset_flags as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(s390_reset_flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).s390_ucontrol as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(s390_ucontrol) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).dcr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(dcr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).internal as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(internal) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).osi as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(osi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).papr_hcall as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(papr_hcall) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).s390_tsch as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(s390_tsch) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).epr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(epr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).system_event as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(system_event) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).s390_stsi as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(s390_stsi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).eoi as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(eoi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_1>())).padding as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_1), - "::", - stringify!(padding) - ) - ); -} -impl Default for kvm_run__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_run__bindgen_ty_2 { - pub regs: kvm_sync_regs, - pub padding: [::std::os::raw::c_char; 2048usize], - _bindgen_union_align: [u8; 2048usize], -} -#[test] -fn bindgen_test_layout_kvm_run__bindgen_ty_2() { - assert_eq!( - ::std::mem::size_of::<kvm_run__bindgen_ty_2>(), - 2048usize, - concat!("Size of: ", stringify!(kvm_run__bindgen_ty_2)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run__bindgen_ty_2>(), - 1usize, - concat!("Alignment of ", stringify!(kvm_run__bindgen_ty_2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_2>())).regs as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_2), - "::", - stringify!(regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run__bindgen_ty_2>())).padding as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run__bindgen_ty_2), - "::", - stringify!(padding) - ) - ); -} -impl Default for kvm_run__bindgen_ty_2 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_run() { - assert_eq!( - ::std::mem::size_of::<kvm_run>(), - 2352usize, - concat!("Size of: ", stringify!(kvm_run)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_run>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_run)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).request_interrupt_window as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(request_interrupt_window) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).padding1 as *const _ as usize }, - 1usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(padding1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).exit_reason as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(exit_reason) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_run>())).ready_for_interrupt_injection as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(ready_for_interrupt_injection) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).if_flag as *const _ as usize }, - 13usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(if_flag) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).flags as *const _ as usize }, - 14usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).cr8 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(cr8) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).apic_base as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(apic_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).kvm_valid_regs as *const _ as usize }, - 288usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(kvm_valid_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).kvm_dirty_regs as *const _ as usize }, - 296usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(kvm_dirty_regs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_run>())).s as *const _ as usize }, - 304usize, - concat!( - "Offset of field: ", - stringify!(kvm_run), - "::", - stringify!(s) - ) - ); -} -impl Default for kvm_run { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_coalesced_mmio_zone { - pub addr: __u64, - pub size: __u32, - pub pad: __u32, -} -#[test] -fn bindgen_test_layout_kvm_coalesced_mmio_zone() { - assert_eq!( - ::std::mem::size_of::<kvm_coalesced_mmio_zone>(), - 16usize, - concat!("Size of: ", stringify!(kvm_coalesced_mmio_zone)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_coalesced_mmio_zone>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_coalesced_mmio_zone)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio_zone>())).addr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio_zone), - "::", - stringify!(addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio_zone>())).size as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio_zone), - "::", - stringify!(size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio_zone>())).pad as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio_zone), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_coalesced_mmio { - pub phys_addr: __u64, - pub len: __u32, - pub pad: __u32, - pub data: [__u8; 8usize], -} -#[test] -fn bindgen_test_layout_kvm_coalesced_mmio() { - assert_eq!( - ::std::mem::size_of::<kvm_coalesced_mmio>(), - 24usize, - concat!("Size of: ", stringify!(kvm_coalesced_mmio)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_coalesced_mmio>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_coalesced_mmio)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio>())).phys_addr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio), - "::", - stringify!(phys_addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio>())).len as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio), - "::", - stringify!(len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio>())).pad as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio>())).data as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio), - "::", - stringify!(data) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default)] -pub struct kvm_coalesced_mmio_ring { - pub first: __u32, - pub last: __u32, - pub coalesced_mmio: __IncompleteArrayField<kvm_coalesced_mmio>, - // Manually added to work around rust bindgen issue 684 - __force_alignment: [u64; 0], -} -#[test] -fn bindgen_test_layout_kvm_coalesced_mmio_ring() { - assert_eq!( - ::std::mem::size_of::<kvm_coalesced_mmio_ring>(), - 8usize, - concat!("Size of: ", stringify!(kvm_coalesced_mmio_ring)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_coalesced_mmio_ring>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_coalesced_mmio_ring)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio_ring>())).first as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio_ring), - "::", - stringify!(first) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_coalesced_mmio_ring>())).last as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio_ring), - "::", - stringify!(last) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_coalesced_mmio_ring>())).coalesced_mmio as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_coalesced_mmio_ring), - "::", - stringify!(coalesced_mmio) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_translation { - pub linear_address: __u64, - pub physical_address: __u64, - pub valid: __u8, - pub writeable: __u8, - pub usermode: __u8, - pub pad: [__u8; 5usize], -} -#[test] -fn bindgen_test_layout_kvm_translation() { - assert_eq!( - ::std::mem::size_of::<kvm_translation>(), - 24usize, - concat!("Size of: ", stringify!(kvm_translation)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_translation>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_translation)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_translation>())).linear_address as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_translation), - "::", - stringify!(linear_address) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_translation>())).physical_address as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_translation), - "::", - stringify!(physical_address) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_translation>())).valid as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_translation), - "::", - stringify!(valid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_translation>())).writeable as *const _ as usize }, - 17usize, - concat!( - "Offset of field: ", - stringify!(kvm_translation), - "::", - stringify!(writeable) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_translation>())).usermode as *const _ as usize }, - 18usize, - concat!( - "Offset of field: ", - stringify!(kvm_translation), - "::", - stringify!(usermode) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_translation>())).pad as *const _ as usize }, - 19usize, - concat!( - "Offset of field: ", - stringify!(kvm_translation), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_mem_op { - pub gaddr: __u64, - pub flags: __u64, - pub size: __u32, - pub op: __u32, - pub buf: __u64, - pub ar: __u8, - pub reserved: [__u8; 31usize], -} -#[test] -fn bindgen_test_layout_kvm_s390_mem_op() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_mem_op>(), - 64usize, - concat!("Size of: ", stringify!(kvm_s390_mem_op)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_mem_op>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_mem_op)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).gaddr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(gaddr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).flags as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).size as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).op as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(op) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).buf as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(buf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).ar as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(ar) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mem_op>())).reserved as *const _ as usize }, - 33usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mem_op), - "::", - stringify!(reserved) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_interrupt { - pub irq: __u32, -} -#[test] -fn bindgen_test_layout_kvm_interrupt() { - assert_eq!( - ::std::mem::size_of::<kvm_interrupt>(), - 4usize, - concat!("Size of: ", stringify!(kvm_interrupt)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_interrupt>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_interrupt)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_interrupt>())).irq as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_interrupt), - "::", - stringify!(irq) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_dirty_log { - pub slot: __u32, - pub padding1: __u32, - pub __bindgen_anon_1: kvm_dirty_log__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_dirty_log__bindgen_ty_1 { - pub dirty_bitmap: *mut::std::os::raw::c_void, - pub padding2: __u64, - _bindgen_union_align: u64, -} -#[test] -fn bindgen_test_layout_kvm_dirty_log__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_dirty_log__bindgen_ty_1>(), - 8usize, - concat!("Size of: ", stringify!(kvm_dirty_log__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_dirty_log__bindgen_ty_1>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_dirty_log__bindgen_ty_1)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_dirty_log__bindgen_ty_1>())).dirty_bitmap as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_dirty_log__bindgen_ty_1), - "::", - stringify!(dirty_bitmap) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_dirty_log__bindgen_ty_1>())).padding2 as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_dirty_log__bindgen_ty_1), - "::", - stringify!(padding2) - ) - ); -} -impl Default for kvm_dirty_log__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_dirty_log() { - assert_eq!( - ::std::mem::size_of::<kvm_dirty_log>(), - 16usize, - concat!("Size of: ", stringify!(kvm_dirty_log)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_dirty_log>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_dirty_log)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_dirty_log>())).slot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_dirty_log), - "::", - stringify!(slot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_dirty_log>())).padding1 as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_dirty_log), - "::", - stringify!(padding1) - ) - ); -} -impl Default for kvm_dirty_log { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default)] -pub struct kvm_signal_mask { - pub len: __u32, - pub sigset: __IncompleteArrayField<__u8>, -} -#[test] -fn bindgen_test_layout_kvm_signal_mask() { - assert_eq!( - ::std::mem::size_of::<kvm_signal_mask>(), - 4usize, - concat!("Size of: ", stringify!(kvm_signal_mask)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_signal_mask>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_signal_mask)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_signal_mask>())).len as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_signal_mask), - "::", - stringify!(len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_signal_mask>())).sigset as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_signal_mask), - "::", - stringify!(sigset) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_tpr_access_ctl { - pub enabled: __u32, - pub flags: __u32, - pub reserved: [__u32; 8usize], -} -#[test] -fn bindgen_test_layout_kvm_tpr_access_ctl() { - assert_eq!( - ::std::mem::size_of::<kvm_tpr_access_ctl>(), - 40usize, - concat!("Size of: ", stringify!(kvm_tpr_access_ctl)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_tpr_access_ctl>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_tpr_access_ctl)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_tpr_access_ctl>())).enabled as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_tpr_access_ctl), - "::", - stringify!(enabled) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_tpr_access_ctl>())).flags as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_tpr_access_ctl), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_tpr_access_ctl>())).reserved as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_tpr_access_ctl), - "::", - stringify!(reserved) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_vapic_addr { - pub vapic_addr: __u64, -} -#[test] -fn bindgen_test_layout_kvm_vapic_addr() { - assert_eq!( - ::std::mem::size_of::<kvm_vapic_addr>(), - 8usize, - concat!("Size of: ", stringify!(kvm_vapic_addr)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_vapic_addr>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_vapic_addr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_vapic_addr>())).vapic_addr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_vapic_addr), - "::", - stringify!(vapic_addr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_mp_state { - pub mp_state: __u32, -} -#[test] -fn bindgen_test_layout_kvm_mp_state() { - assert_eq!( - ::std::mem::size_of::<kvm_mp_state>(), - 4usize, - concat!("Size of: ", stringify!(kvm_mp_state)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_mp_state>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_mp_state)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_mp_state>())).mp_state as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_mp_state), - "::", - stringify!(mp_state) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_psw { - pub mask: __u64, - pub addr: __u64, -} -#[test] -fn bindgen_test_layout_kvm_s390_psw() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_psw>(), - 16usize, - concat!("Size of: ", stringify!(kvm_s390_psw)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_psw>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_psw)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_psw>())).mask as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_psw), - "::", - stringify!(mask) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_psw>())).addr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_psw), - "::", - stringify!(addr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_interrupt { - pub type_: __u32, - pub parm: __u32, - pub parm64: __u64, -} -#[test] -fn bindgen_test_layout_kvm_s390_interrupt() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_interrupt>(), - 16usize, - concat!("Size of: ", stringify!(kvm_s390_interrupt)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_interrupt>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_interrupt)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_interrupt>())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_interrupt), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_interrupt>())).parm as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_interrupt), - "::", - stringify!(parm) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_interrupt>())).parm64 as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_interrupt), - "::", - stringify!(parm64) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_io_info { - pub subchannel_id: __u16, - pub subchannel_nr: __u16, - pub io_int_parm: __u32, - pub io_int_word: __u32, -} -#[test] -fn bindgen_test_layout_kvm_s390_io_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_io_info>(), - 12usize, - concat!("Size of: ", stringify!(kvm_s390_io_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_io_info>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_s390_io_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_io_info>())).subchannel_id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_io_info), - "::", - stringify!(subchannel_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_io_info>())).subchannel_nr as *const _ as usize }, - 2usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_io_info), - "::", - stringify!(subchannel_nr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_io_info>())).io_int_parm as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_io_info), - "::", - stringify!(io_int_parm) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_io_info>())).io_int_word as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_io_info), - "::", - stringify!(io_int_word) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_ext_info { - pub ext_params: __u32, - pub pad: __u32, - pub ext_params2: __u64, -} -#[test] -fn bindgen_test_layout_kvm_s390_ext_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_ext_info>(), - 16usize, - concat!("Size of: ", stringify!(kvm_s390_ext_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_ext_info>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_ext_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_ext_info>())).ext_params as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_ext_info), - "::", - stringify!(ext_params) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_ext_info>())).pad as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_ext_info), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_ext_info>())).ext_params2 as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_ext_info), - "::", - stringify!(ext_params2) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_pgm_info { - pub trans_exc_code: __u64, - pub mon_code: __u64, - pub per_address: __u64, - pub data_exc_code: __u32, - pub code: __u16, - pub mon_class_nr: __u16, - pub per_code: __u8, - pub per_atmid: __u8, - pub exc_access_id: __u8, - pub per_access_id: __u8, - pub op_access_id: __u8, - pub pad: [__u8; 3usize], -} -#[test] -fn bindgen_test_layout_kvm_s390_pgm_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_pgm_info>(), - 40usize, - concat!("Size of: ", stringify!(kvm_s390_pgm_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_pgm_info>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_pgm_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).trans_exc_code as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(trans_exc_code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).mon_code as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(mon_code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).per_address as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(per_address) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).data_exc_code as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(data_exc_code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).code as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).mon_class_nr as *const _ as usize }, - 30usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(mon_class_nr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).per_code as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(per_code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).per_atmid as *const _ as usize }, - 33usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(per_atmid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).exc_access_id as *const _ as usize }, - 34usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(exc_access_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).per_access_id as *const _ as usize }, - 35usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(per_access_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).op_access_id as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(op_access_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_pgm_info>())).pad as *const _ as usize }, - 37usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_pgm_info), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_prefix_info { - pub address: __u32, -} -#[test] -fn bindgen_test_layout_kvm_s390_prefix_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_prefix_info>(), - 4usize, - concat!("Size of: ", stringify!(kvm_s390_prefix_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_prefix_info>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_s390_prefix_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_prefix_info>())).address as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_prefix_info), - "::", - stringify!(address) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_extcall_info { - pub code: __u16, -} -#[test] -fn bindgen_test_layout_kvm_s390_extcall_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_extcall_info>(), - 2usize, - concat!("Size of: ", stringify!(kvm_s390_extcall_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_extcall_info>(), - 2usize, - concat!("Alignment of ", stringify!(kvm_s390_extcall_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_extcall_info>())).code as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_extcall_info), - "::", - stringify!(code) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_emerg_info { - pub code: __u16, -} -#[test] -fn bindgen_test_layout_kvm_s390_emerg_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_emerg_info>(), - 2usize, - concat!("Size of: ", stringify!(kvm_s390_emerg_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_emerg_info>(), - 2usize, - concat!("Alignment of ", stringify!(kvm_s390_emerg_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_emerg_info>())).code as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_emerg_info), - "::", - stringify!(code) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_stop_info { - pub flags: __u32, -} -#[test] -fn bindgen_test_layout_kvm_s390_stop_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_stop_info>(), - 4usize, - concat!("Size of: ", stringify!(kvm_s390_stop_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_stop_info>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_s390_stop_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_stop_info>())).flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_stop_info), - "::", - stringify!(flags) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_mchk_info { - pub cr14: __u64, - pub mcic: __u64, - pub failing_storage_address: __u64, - pub ext_damage_code: __u32, - pub pad: __u32, - pub fixed_logout: [__u8; 16usize], -} -#[test] -fn bindgen_test_layout_kvm_s390_mchk_info() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_mchk_info>(), - 48usize, - concat!("Size of: ", stringify!(kvm_s390_mchk_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_mchk_info>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_mchk_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mchk_info>())).cr14 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mchk_info), - "::", - stringify!(cr14) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mchk_info>())).mcic as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mchk_info), - "::", - stringify!(mcic) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_s390_mchk_info>())).failing_storage_address as *const _ as - usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mchk_info), - "::", - stringify!(failing_storage_address) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mchk_info>())).ext_damage_code as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mchk_info), - "::", - stringify!(ext_damage_code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mchk_info>())).pad as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mchk_info), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_mchk_info>())).fixed_logout as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_mchk_info), - "::", - stringify!(fixed_logout) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_s390_irq { - pub type_: __u64, - pub u: kvm_s390_irq__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_s390_irq__bindgen_ty_1 { - pub io: kvm_s390_io_info, - pub ext: kvm_s390_ext_info, - pub pgm: kvm_s390_pgm_info, - pub emerg: kvm_s390_emerg_info, - pub extcall: kvm_s390_extcall_info, - pub prefix: kvm_s390_prefix_info, - pub stop: kvm_s390_stop_info, - pub mchk: kvm_s390_mchk_info, - pub reserved: [::std::os::raw::c_char; 64usize], - _bindgen_union_align: [u64; 8usize], -} -#[test] -fn bindgen_test_layout_kvm_s390_irq__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_irq__bindgen_ty_1>(), - 64usize, - concat!("Size of: ", stringify!(kvm_s390_irq__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_irq__bindgen_ty_1>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_irq__bindgen_ty_1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).io as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(io) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).ext as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(ext) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).pgm as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(pgm) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).emerg as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(emerg) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).extcall as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(extcall) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).prefix as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(prefix) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).stop as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(stop) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).mchk as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(mchk) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq__bindgen_ty_1>())).reserved as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq__bindgen_ty_1), - "::", - stringify!(reserved) - ) - ); -} -impl Default for kvm_s390_irq__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_s390_irq() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_irq>(), - 72usize, - concat!("Size of: ", stringify!(kvm_s390_irq)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_irq>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_irq)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq>())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq>())).u as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq), - "::", - stringify!(u) - ) - ); -} -impl Default for kvm_s390_irq { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_irq_state { - pub buf: __u64, - pub flags: __u32, - pub len: __u32, - pub reserved: [__u32; 4usize], -} -#[test] -fn bindgen_test_layout_kvm_s390_irq_state() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_irq_state>(), - 32usize, - concat!("Size of: ", stringify!(kvm_s390_irq_state)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_irq_state>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_irq_state)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq_state>())).buf as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq_state), - "::", - stringify!(buf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq_state>())).flags as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq_state), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq_state>())).len as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq_state), - "::", - stringify!(len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_irq_state>())).reserved as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_irq_state), - "::", - stringify!(reserved) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_guest_debug { - pub control: __u32, - pub pad: __u32, - pub arch: kvm_guest_debug_arch, -} -#[test] -fn bindgen_test_layout_kvm_guest_debug() { - assert_eq!( - ::std::mem::size_of::<kvm_guest_debug>(), - 8usize, - concat!("Size of: ", stringify!(kvm_guest_debug)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_guest_debug>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_guest_debug)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_guest_debug>())).control as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_guest_debug), - "::", - stringify!(control) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_guest_debug>())).pad as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_guest_debug), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_guest_debug>())).arch as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_guest_debug), - "::", - stringify!(arch) - ) - ); -} -pub const kvm_ioeventfd_flag_nr_datamatch: _bindgen_ty_1 = 0; -pub const kvm_ioeventfd_flag_nr_pio: _bindgen_ty_1 = 1; -pub const kvm_ioeventfd_flag_nr_deassign: _bindgen_ty_1 = 2; -pub const kvm_ioeventfd_flag_nr_virtio_ccw_notify: _bindgen_ty_1 = 3; -pub const kvm_ioeventfd_flag_nr_fast_mmio: _bindgen_ty_1 = 4; -pub const kvm_ioeventfd_flag_nr_max: _bindgen_ty_1 = 5; -pub type _bindgen_ty_1 = ::std::os::raw::c_uint; -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_ioeventfd { - pub datamatch: __u64, - pub addr: __u64, - pub len: __u32, - pub fd: __s32, - pub flags: __u32, - pub pad: [__u8; 36usize], -} -#[test] -fn bindgen_test_layout_kvm_ioeventfd() { - assert_eq!( - ::std::mem::size_of::<kvm_ioeventfd>(), - 64usize, - concat!("Size of: ", stringify!(kvm_ioeventfd)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_ioeventfd>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_ioeventfd)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ioeventfd>())).datamatch as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_ioeventfd), - "::", - stringify!(datamatch) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ioeventfd>())).addr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_ioeventfd), - "::", - stringify!(addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ioeventfd>())).len as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_ioeventfd), - "::", - stringify!(len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ioeventfd>())).fd as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(kvm_ioeventfd), - "::", - stringify!(fd) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ioeventfd>())).flags as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_ioeventfd), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ioeventfd>())).pad as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(kvm_ioeventfd), - "::", - stringify!(pad) - ) - ); -} -impl Default for kvm_ioeventfd { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_enable_cap { - pub cap: __u32, - pub flags: __u32, - pub args: [__u64; 4usize], - pub pad: [__u8; 64usize], -} -#[test] -fn bindgen_test_layout_kvm_enable_cap() { - assert_eq!( - ::std::mem::size_of::<kvm_enable_cap>(), - 104usize, - concat!("Size of: ", stringify!(kvm_enable_cap)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_enable_cap>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_enable_cap)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_enable_cap>())).cap as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_enable_cap), - "::", - stringify!(cap) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_enable_cap>())).flags as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_enable_cap), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_enable_cap>())).args as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_enable_cap), - "::", - stringify!(args) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_enable_cap>())).pad as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(kvm_enable_cap), - "::", - stringify!(pad) - ) - ); -} -impl Default for kvm_enable_cap { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_ppc_pvinfo { - pub flags: __u32, - pub hcall: [__u32; 4usize], - pub pad: [__u8; 108usize], -} -#[test] -fn bindgen_test_layout_kvm_ppc_pvinfo() { - assert_eq!( - ::std::mem::size_of::<kvm_ppc_pvinfo>(), - 128usize, - concat!("Size of: ", stringify!(kvm_ppc_pvinfo)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_ppc_pvinfo>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_ppc_pvinfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_pvinfo>())).flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_pvinfo), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_pvinfo>())).hcall as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_pvinfo), - "::", - stringify!(hcall) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_pvinfo>())).pad as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_pvinfo), - "::", - stringify!(pad) - ) - ); -} -impl Default for kvm_ppc_pvinfo { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_ppc_one_page_size { - pub page_shift: __u32, - pub pte_enc: __u32, -} -#[test] -fn bindgen_test_layout_kvm_ppc_one_page_size() { - assert_eq!( - ::std::mem::size_of::<kvm_ppc_one_page_size>(), - 8usize, - concat!("Size of: ", stringify!(kvm_ppc_one_page_size)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_ppc_one_page_size>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_ppc_one_page_size)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_one_page_size>())).page_shift as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_one_page_size), - "::", - stringify!(page_shift) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_one_page_size>())).pte_enc as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_one_page_size), - "::", - stringify!(pte_enc) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_ppc_one_seg_page_size { - pub page_shift: __u32, - pub slb_enc: __u32, - pub enc: [kvm_ppc_one_page_size; 8usize], -} -#[test] -fn bindgen_test_layout_kvm_ppc_one_seg_page_size() { - assert_eq!( - ::std::mem::size_of::<kvm_ppc_one_seg_page_size>(), - 72usize, - concat!("Size of: ", stringify!(kvm_ppc_one_seg_page_size)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_ppc_one_seg_page_size>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_ppc_one_seg_page_size)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_ppc_one_seg_page_size>())).page_shift as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_one_seg_page_size), - "::", - stringify!(page_shift) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_one_seg_page_size>())).slb_enc as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_one_seg_page_size), - "::", - stringify!(slb_enc) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_one_seg_page_size>())).enc as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_one_seg_page_size), - "::", - stringify!(enc) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_ppc_smmu_info { - pub flags: __u64, - pub slb_size: __u32, - pub pad: __u32, - pub sps: [kvm_ppc_one_seg_page_size; 8usize], -} -#[test] -fn bindgen_test_layout_kvm_ppc_smmu_info() { - assert_eq!( - ::std::mem::size_of::<kvm_ppc_smmu_info>(), - 592usize, - concat!("Size of: ", stringify!(kvm_ppc_smmu_info)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_ppc_smmu_info>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_ppc_smmu_info)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_smmu_info>())).flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_smmu_info), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_smmu_info>())).slb_size as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_smmu_info), - "::", - stringify!(slb_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_smmu_info>())).pad as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_smmu_info), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_ppc_smmu_info>())).sps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_ppc_smmu_info), - "::", - stringify!(sps) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_irq_routing_irqchip { - pub irqchip: __u32, - pub pin: __u32, -} -#[test] -fn bindgen_test_layout_kvm_irq_routing_irqchip() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_routing_irqchip>(), - 8usize, - concat!("Size of: ", stringify!(kvm_irq_routing_irqchip)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_routing_irqchip>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_irq_routing_irqchip)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_irqchip>())).irqchip as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_irqchip), - "::", - stringify!(irqchip) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_irqchip>())).pin as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_irqchip), - "::", - stringify!(pin) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_irq_routing_msi { - pub address_lo: __u32, - pub address_hi: __u32, - pub data: __u32, - pub pad: __u32, -} -#[test] -fn bindgen_test_layout_kvm_irq_routing_msi() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_routing_msi>(), - 16usize, - concat!("Size of: ", stringify!(kvm_irq_routing_msi)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_routing_msi>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_irq_routing_msi)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_msi>())).address_lo as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_msi), - "::", - stringify!(address_lo) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_msi>())).address_hi as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_msi), - "::", - stringify!(address_hi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_msi>())).data as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_msi), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_msi>())).pad as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_msi), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_irq_routing_s390_adapter { - pub ind_addr: __u64, - pub summary_addr: __u64, - pub ind_offset: __u64, - pub summary_offset: __u32, - pub adapter_id: __u32, -} -#[test] -fn bindgen_test_layout_kvm_irq_routing_s390_adapter() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_routing_s390_adapter>(), - 32usize, - concat!("Size of: ", stringify!(kvm_irq_routing_s390_adapter)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_routing_s390_adapter>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_irq_routing_s390_adapter)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_s390_adapter>())).ind_addr as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_s390_adapter), - "::", - stringify!(ind_addr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_s390_adapter>())).summary_addr as *const _ as - usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_s390_adapter), - "::", - stringify!(summary_addr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_s390_adapter>())).ind_offset as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_s390_adapter), - "::", - stringify!(ind_offset) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_s390_adapter>())).summary_offset as *const _ as - usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_s390_adapter), - "::", - stringify!(summary_offset) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_s390_adapter>())).adapter_id as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_s390_adapter), - "::", - stringify!(adapter_id) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_irq_routing_entry { - pub gsi: __u32, - pub type_: __u32, - pub flags: __u32, - pub pad: __u32, - pub u: kvm_irq_routing_entry__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_irq_routing_entry__bindgen_ty_1 { - pub irqchip: kvm_irq_routing_irqchip, - pub msi: kvm_irq_routing_msi, - pub adapter: kvm_irq_routing_s390_adapter, - pub pad: [__u32; 8usize], - _bindgen_union_align: [u64; 4usize], -} -#[test] -fn bindgen_test_layout_kvm_irq_routing_entry__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_routing_entry__bindgen_ty_1>(), - 32usize, - concat!("Size of: ", stringify!(kvm_irq_routing_entry__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_routing_entry__bindgen_ty_1>(), - 8usize, - concat!( - "Alignment of ", - stringify!(kvm_irq_routing_entry__bindgen_ty_1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_entry__bindgen_ty_1>())).irqchip as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry__bindgen_ty_1), - "::", - stringify!(irqchip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_entry__bindgen_ty_1>())).msi as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry__bindgen_ty_1), - "::", - stringify!(msi) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_entry__bindgen_ty_1>())).adapter as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry__bindgen_ty_1), - "::", - stringify!(adapter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_irq_routing_entry__bindgen_ty_1>())).pad as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry__bindgen_ty_1), - "::", - stringify!(pad) - ) - ); -} -impl Default for kvm_irq_routing_entry__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_irq_routing_entry() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_routing_entry>(), - 48usize, - concat!("Size of: ", stringify!(kvm_irq_routing_entry)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_routing_entry>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_irq_routing_entry)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_entry>())).gsi as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry), - "::", - stringify!(gsi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_entry>())).type_ as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_entry>())).flags as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_entry>())).pad as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry), - "::", - stringify!(pad) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing_entry>())).u as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing_entry), - "::", - stringify!(u) - ) - ); -} -impl Default for kvm_irq_routing_entry { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -pub struct kvm_irq_routing { - pub nr: __u32, - pub flags: __u32, - pub entries: __IncompleteArrayField<kvm_irq_routing_entry>, - // Manually added to work around rust bindgen issue 684 - __force_alignment: [u64; 0], -} -#[test] -fn bindgen_test_layout_kvm_irq_routing() { - assert_eq!( - ::std::mem::size_of::<kvm_irq_routing>(), - 8usize, - concat!("Size of: ", stringify!(kvm_irq_routing)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irq_routing>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_irq_routing)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing>())).nr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing), - "::", - stringify!(nr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing>())).flags as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irq_routing>())).entries as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_irq_routing), - "::", - stringify!(entries) - ) - ); -} -impl Default for kvm_irq_routing { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_irqfd { - pub fd: __u32, - pub gsi: __u32, - pub flags: __u32, - pub resamplefd: __u32, - pub pad: [__u8; 16usize], -} -#[test] -fn bindgen_test_layout_kvm_irqfd() { - assert_eq!( - ::std::mem::size_of::<kvm_irqfd>(), - 32usize, - concat!("Size of: ", stringify!(kvm_irqfd)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_irqfd>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_irqfd)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqfd>())).fd as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqfd), - "::", - stringify!(fd) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqfd>())).gsi as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqfd), - "::", - stringify!(gsi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqfd>())).flags as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqfd), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqfd>())).resamplefd as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqfd), - "::", - stringify!(resamplefd) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_irqfd>())).pad as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_irqfd), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_clock_data { - pub clock: __u64, - pub flags: __u32, - pub pad: [__u32; 9usize], -} -#[test] -fn bindgen_test_layout_kvm_clock_data() { - assert_eq!( - ::std::mem::size_of::<kvm_clock_data>(), - 48usize, - concat!("Size of: ", stringify!(kvm_clock_data)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_clock_data>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_clock_data)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_clock_data>())).clock as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_clock_data), - "::", - stringify!(clock) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_clock_data>())).flags as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_clock_data), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_clock_data>())).pad as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_clock_data), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_config_tlb { - pub params: __u64, - pub array: __u64, - pub mmu_type: __u32, - pub array_len: __u32, -} -#[test] -fn bindgen_test_layout_kvm_config_tlb() { - assert_eq!( - ::std::mem::size_of::<kvm_config_tlb>(), - 24usize, - concat!("Size of: ", stringify!(kvm_config_tlb)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_config_tlb>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_config_tlb)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_config_tlb>())).params as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_config_tlb), - "::", - stringify!(params) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_config_tlb>())).array as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_config_tlb), - "::", - stringify!(array) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_config_tlb>())).mmu_type as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_config_tlb), - "::", - stringify!(mmu_type) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_config_tlb>())).array_len as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(kvm_config_tlb), - "::", - stringify!(array_len) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_dirty_tlb { - pub bitmap: __u64, - pub num_dirty: __u32, -} -#[test] -fn bindgen_test_layout_kvm_dirty_tlb() { - assert_eq!( - ::std::mem::size_of::<kvm_dirty_tlb>(), - 16usize, - concat!("Size of: ", stringify!(kvm_dirty_tlb)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_dirty_tlb>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_dirty_tlb)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_dirty_tlb>())).bitmap as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_dirty_tlb), - "::", - stringify!(bitmap) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_dirty_tlb>())).num_dirty as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_dirty_tlb), - "::", - stringify!(num_dirty) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default)] -pub struct kvm_reg_list { - pub n: __u64, - pub reg: __IncompleteArrayField<__u64>, -} -#[test] -fn bindgen_test_layout_kvm_reg_list() { - assert_eq!( - ::std::mem::size_of::<kvm_reg_list>(), - 8usize, - concat!("Size of: ", stringify!(kvm_reg_list)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_reg_list>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_reg_list)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_reg_list>())).n as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_reg_list), - "::", - stringify!(n) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_reg_list>())).reg as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_reg_list), - "::", - stringify!(reg) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_one_reg { - pub id: __u64, - pub addr: __u64, -} -#[test] -fn bindgen_test_layout_kvm_one_reg() { - assert_eq!( - ::std::mem::size_of::<kvm_one_reg>(), - 16usize, - concat!("Size of: ", stringify!(kvm_one_reg)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_one_reg>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_one_reg)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_one_reg>())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_one_reg), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_one_reg>())).addr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_one_reg), - "::", - stringify!(addr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_msi { - pub address_lo: __u32, - pub address_hi: __u32, - pub data: __u32, - pub flags: __u32, - pub pad: [__u8; 16usize], -} -#[test] -fn bindgen_test_layout_kvm_msi() { - assert_eq!( - ::std::mem::size_of::<kvm_msi>(), - 32usize, - concat!("Size of: ", stringify!(kvm_msi)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_msi>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_msi)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_msi>())).address_lo as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_msi), - "::", - stringify!(address_lo) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_msi>())).address_hi as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_msi), - "::", - stringify!(address_hi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_msi>())).data as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_msi), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_msi>())).flags as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_msi), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_msi>())).pad as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_msi), - "::", - stringify!(pad) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_arm_device_addr { - pub id: __u64, - pub addr: __u64, -} -#[test] -fn bindgen_test_layout_kvm_arm_device_addr() { - assert_eq!( - ::std::mem::size_of::<kvm_arm_device_addr>(), - 16usize, - concat!("Size of: ", stringify!(kvm_arm_device_addr)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_arm_device_addr>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_arm_device_addr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_arm_device_addr>())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_arm_device_addr), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_arm_device_addr>())).addr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_arm_device_addr), - "::", - stringify!(addr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_create_device { - pub type_: __u32, - pub fd: __u32, - pub flags: __u32, -} -#[test] -fn bindgen_test_layout_kvm_create_device() { - assert_eq!( - ::std::mem::size_of::<kvm_create_device>(), - 12usize, - concat!("Size of: ", stringify!(kvm_create_device)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_create_device>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_create_device)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_create_device>())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_create_device), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_create_device>())).fd as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_create_device), - "::", - stringify!(fd) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_create_device>())).flags as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_create_device), - "::", - stringify!(flags) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_device_attr { - pub flags: __u32, - pub group: __u32, - pub attr: __u64, - pub addr: __u64, -} -#[test] -fn bindgen_test_layout_kvm_device_attr() { - assert_eq!( - ::std::mem::size_of::<kvm_device_attr>(), - 24usize, - concat!("Size of: ", stringify!(kvm_device_attr)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_device_attr>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_device_attr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_device_attr>())).flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_device_attr), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_device_attr>())).group as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_device_attr), - "::", - stringify!(group) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_device_attr>())).attr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_device_attr), - "::", - stringify!(attr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_device_attr>())).addr as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_device_attr), - "::", - stringify!(addr) - ) - ); -} -pub const kvm_device_type_KVM_DEV_TYPE_FSL_MPIC_20: kvm_device_type = 1; -pub const kvm_device_type_KVM_DEV_TYPE_FSL_MPIC_42: kvm_device_type = 2; -pub const kvm_device_type_KVM_DEV_TYPE_XICS: kvm_device_type = 3; -pub const kvm_device_type_KVM_DEV_TYPE_VFIO: kvm_device_type = 4; -pub const kvm_device_type_KVM_DEV_TYPE_ARM_VGIC_V2: kvm_device_type = 5; -pub const kvm_device_type_KVM_DEV_TYPE_FLIC: kvm_device_type = 6; -pub const kvm_device_type_KVM_DEV_TYPE_ARM_VGIC_V3: kvm_device_type = 7; -pub const kvm_device_type_KVM_DEV_TYPE_MAX: kvm_device_type = 8; -pub type kvm_device_type = ::std::os::raw::c_uint; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_s390_ucas_mapping { - pub user_addr: __u64, - pub vcpu_addr: __u64, - pub length: __u64, -} -#[test] -fn bindgen_test_layout_kvm_s390_ucas_mapping() { - assert_eq!( - ::std::mem::size_of::<kvm_s390_ucas_mapping>(), - 24usize, - concat!("Size of: ", stringify!(kvm_s390_ucas_mapping)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_s390_ucas_mapping>(), - 8usize, - concat!("Alignment of ", stringify!(kvm_s390_ucas_mapping)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_ucas_mapping>())).user_addr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_ucas_mapping), - "::", - stringify!(user_addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_ucas_mapping>())).vcpu_addr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_ucas_mapping), - "::", - stringify!(vcpu_addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_s390_ucas_mapping>())).length as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_s390_ucas_mapping), - "::", - stringify!(length) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_assigned_pci_dev { - pub assigned_dev_id: __u32, - pub busnr: __u32, - pub devfn: __u32, - pub flags: __u32, - pub segnr: __u32, - pub __bindgen_anon_1: kvm_assigned_pci_dev__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_assigned_pci_dev__bindgen_ty_1 { - pub reserved: [__u32; 11usize], - _bindgen_union_align: [u32; 11usize], -} -#[test] -fn bindgen_test_layout_kvm_assigned_pci_dev__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_assigned_pci_dev__bindgen_ty_1>(), - 44usize, - concat!("Size of: ", stringify!(kvm_assigned_pci_dev__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_assigned_pci_dev__bindgen_ty_1>(), - 4usize, - concat!( - "Alignment of ", - stringify!(kvm_assigned_pci_dev__bindgen_ty_1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_assigned_pci_dev__bindgen_ty_1>())).reserved as *const _ as - usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_pci_dev__bindgen_ty_1), - "::", - stringify!(reserved) - ) - ); -} -impl Default for kvm_assigned_pci_dev__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_assigned_pci_dev() { - assert_eq!( - ::std::mem::size_of::<kvm_assigned_pci_dev>(), - 64usize, - concat!("Size of: ", stringify!(kvm_assigned_pci_dev)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_assigned_pci_dev>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_assigned_pci_dev)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_assigned_pci_dev>())).assigned_dev_id as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_pci_dev), - "::", - stringify!(assigned_dev_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_pci_dev>())).busnr as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_pci_dev), - "::", - stringify!(busnr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_pci_dev>())).devfn as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_pci_dev), - "::", - stringify!(devfn) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_pci_dev>())).flags as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_pci_dev), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_pci_dev>())).segnr as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_pci_dev), - "::", - stringify!(segnr) - ) - ); -} -impl Default for kvm_assigned_pci_dev { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct kvm_assigned_irq { - pub assigned_dev_id: __u32, - pub host_irq: __u32, - pub guest_irq: __u32, - pub flags: __u32, - pub __bindgen_anon_1: kvm_assigned_irq__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union kvm_assigned_irq__bindgen_ty_1 { - pub reserved: [__u32; 12usize], - _bindgen_union_align: [u32; 12usize], -} -#[test] -fn bindgen_test_layout_kvm_assigned_irq__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<kvm_assigned_irq__bindgen_ty_1>(), - 48usize, - concat!("Size of: ", stringify!(kvm_assigned_irq__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_assigned_irq__bindgen_ty_1>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_assigned_irq__bindgen_ty_1)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_assigned_irq__bindgen_ty_1>())).reserved as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_irq__bindgen_ty_1), - "::", - stringify!(reserved) - ) - ); -} -impl Default for kvm_assigned_irq__bindgen_ty_1 { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[test] -fn bindgen_test_layout_kvm_assigned_irq() { - assert_eq!( - ::std::mem::size_of::<kvm_assigned_irq>(), - 64usize, - concat!("Size of: ", stringify!(kvm_assigned_irq)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_assigned_irq>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_assigned_irq)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_irq>())).assigned_dev_id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_irq), - "::", - stringify!(assigned_dev_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_irq>())).host_irq as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_irq), - "::", - stringify!(host_irq) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_irq>())).guest_irq as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_irq), - "::", - stringify!(guest_irq) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_irq>())).flags as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_irq), - "::", - stringify!(flags) - ) - ); -} -impl Default for kvm_assigned_irq { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_assigned_msix_nr { - pub assigned_dev_id: __u32, - pub entry_nr: __u16, - pub padding: __u16, -} -#[test] -fn bindgen_test_layout_kvm_assigned_msix_nr() { - assert_eq!( - ::std::mem::size_of::<kvm_assigned_msix_nr>(), - 8usize, - concat!("Size of: ", stringify!(kvm_assigned_msix_nr)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_assigned_msix_nr>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_assigned_msix_nr)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_assigned_msix_nr>())).assigned_dev_id as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_nr), - "::", - stringify!(assigned_dev_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_msix_nr>())).entry_nr as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_nr), - "::", - stringify!(entry_nr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_msix_nr>())).padding as *const _ as usize }, - 6usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_nr), - "::", - stringify!(padding) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone)] -pub struct kvm_assigned_msix_entry { - pub assigned_dev_id: __u32, - pub gsi: __u32, - pub entry: __u16, - pub padding: [__u16; 3usize], -} -#[test] -fn bindgen_test_layout_kvm_assigned_msix_entry() { - assert_eq!( - ::std::mem::size_of::<kvm_assigned_msix_entry>(), - 16usize, - concat!("Size of: ", stringify!(kvm_assigned_msix_entry)) - ); - assert_eq!( - ::std::mem::align_of::<kvm_assigned_msix_entry>(), - 4usize, - concat!("Alignment of ", stringify!(kvm_assigned_msix_entry)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<kvm_assigned_msix_entry>())).assigned_dev_id as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_entry), - "::", - stringify!(assigned_dev_id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_msix_entry>())).gsi as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_entry), - "::", - stringify!(gsi) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_msix_entry>())).entry as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_entry), - "::", - stringify!(entry) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<kvm_assigned_msix_entry>())).padding as *const _ as usize }, - 10usize, - concat!( - "Offset of field: ", - stringify!(kvm_assigned_msix_entry), - "::", - stringify!(padding) - ) - ); -} diff --git a/kvm_sys/src/lib.rs b/kvm_sys/src/lib.rs index 0d6f849..c7bdf70 100644 --- a/kvm_sys/src/lib.rs +++ b/kvm_sys/src/lib.rs @@ -49,7 +49,7 @@ pub mod x86 { } #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] -pub mod arm { +pub mod aarch64 { // generated with bindgen <arm sysroot>/usr/include/linux/kvm.h --no-unstable-rust --constified-enum '*' --with-derive-default -- -I<arm sysroot>/usr/include pub mod bindings; pub use bindings::*; @@ -136,4 +136,4 @@ ioctl_io_nr!(KVM_SMI, KVMIO, 0xb7); pub use x86::*; #[cfg(any(target_arch = "arm", target_arch = "aarch64"))] -pub use arm::*; +pub use aarch64::*; diff --git a/seccomp/aarch64/balloon_device.policy b/seccomp/aarch64/balloon_device.policy new file mode 100644 index 0000000..8a07e4a --- /dev/null +++ b/seccomp/aarch64/balloon_device.policy @@ -0,0 +1,28 @@ +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +close: 1 +exit_group: 1 +futex: 1 +madvise: 1 +# Disallow mmap with PROT_EXEC set. The syntax here doesn't allow bit +# negation, thus the manually negated mask constant. +mmap2: arg2 in 0xfffffffb +mprotect: arg2 in 0xfffffffb +munmap: 1 +read: 1 +recv: 1 +sched_getaffinity: 1 +set_robust_list: 1 +sigaltstack: 1 +# Disallow clone's other than new threads. +clone: arg0 & 0x00010000 +write: 1 +eventfd2: 1 +dup: 1 +poll: 1 +ppoll: 1 +getpid: 1 +# Allow PR_SET_NAME only. +prctl: arg0 == 15 diff --git a/seccomp/aarch64/block_device.policy b/seccomp/aarch64/block_device.policy new file mode 100644 index 0000000..2d6fca6 --- /dev/null +++ b/seccomp/aarch64/block_device.policy @@ -0,0 +1,32 @@ +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +close: 1 +dup: 1 +dup2: 1 +exit_group: 1 +fstat64: 1 +ftruncate: 1 +futex: 1 +_llseek: 1 +# Disallow mmap with PROT_EXEC set. The syntax here doesn't allow bit +# negation, thus the manually negated mask constant. +mmap2: arg2 in 0xfffffffb +mprotect: arg2 in 0xfffffffb +munmap: 1 +read: 1 +recv: 1 +sched_getaffinity: 1 +set_robust_list: 1 +sigaltstack: 1 +# Disallow clone's other than new threads. +clone: arg0 & 0x00010000 +write: 1 +eventfd2: 1 +poll: 1 +ppoll: 1 +getpid: 1 +# Allow PR_SET_NAME only. +prctl: arg0 == 15 +restart_syscall: 1 diff --git a/seccomp/aarch64/net_device.policy b/seccomp/aarch64/net_device.policy new file mode 100644 index 0000000..7baae25 --- /dev/null +++ b/seccomp/aarch64/net_device.policy @@ -0,0 +1,29 @@ +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +close: 1 +dup: 1 +dup2: 1 +exit_group: 1 +futex: 1 +# Disallow mmap with PROT_EXEC set. The syntax here doesn't allow bit +# negation, thus the manually negated mask constant. +mmap2: arg2 in 0xfffffffb +mprotect: arg2 in 0xfffffffb +munmap: 1 +poll: 1 +ppoll: 1 +read: 1 +recv: 1 +sched_getaffinity: 1 +set_robust_list: 1 +sigaltstack: 1 +# Disallow clone's other than new threads. +# arg0 is flags. Because kernel. +clone: arg0 & 0x00010000 +write: 1 +getpid: 1 +# Allow PR_SET_NAME only. +prctl: arg0 == 15 +restart_syscall: 1 diff --git a/seccomp/aarch64/rng_device.policy b/seccomp/aarch64/rng_device.policy new file mode 100644 index 0000000..8d71612 --- /dev/null +++ b/seccomp/aarch64/rng_device.policy @@ -0,0 +1,29 @@ +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +close: 1 +dup: 1 +dup2: 1 +exit_group: 1 +futex: 1 +# Disallow mmap with PROT_EXEC set. The syntax here doesn't allow bit +# negation, thus the manually negated mask constant. +mmap2: arg2 in 0xfffffffb +mprotect: arg2 in 0xfffffffb +munmap: 1 +read: 1 +recv: 1 +sched_getaffinity: 1 +set_robust_list: 1 +sigaltstack: 1 +# Disallow clone's other than new threads. +clone: arg0 & 0x00010000 +write: 1 +eventfd2: 1 +poll: 1 +ppoll: 1 +getpid: 1 +# Allow PR_SET_NAME only. +prctl: arg0 == 15 +restart_syscall: 1 diff --git a/seccomp/aarch64/vhost_net_device.policy b/seccomp/aarch64/vhost_net_device.policy new file mode 100644 index 0000000..eb3bf3f --- /dev/null +++ b/seccomp/aarch64/vhost_net_device.policy @@ -0,0 +1,46 @@ +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +close: 1 +dup: 1 +dup2: 1 +exit_group: 1 +futex: 1 +# Whitelist vhost_net ioctls only. +# arg1 == VHOST_GET_FEATURES || +# arg1 == VHOST_SET_FEATURES || +# arg1 == VHOST_SET_OWNER || +# arg1 == VHOST_RESET_OWNER || +# arg1 == VHOST_SET_MEM_TABLE || +# arg1 == VHOST_SET_LOG_BASE || +# arg1 == VHOST_SET_LOG_FD || +# arg1 == VHOST_SET_VRING_NUM || +# arg1 == VHOST_SET_VRING_ADDR || +# arg1 == VHOST_SET_VRING_BASE || +# arg1 == VHOST_GET_VRING_BASE || +# arg1 == VHOST_SET_VRING_KICK || +# arg1 == VHOST_SET_VRING_CALL || +# arg1 == VHOST_SET_VRING_ERR || +# arg1 == VHOST_NET_SET_BACKEND +ioctl: arg1 == 0x8008af00 || arg1 == 0x4008af00 || arg1 == 0x0000af01 || arg1 == 0x0000af02 || arg1 == 0x4008af03 || arg1 == 0x4008af04 || arg1 == 0x4004af07 || arg1 == 0x4008af10 || arg1 == 0x4028af11 || arg1 == 0x4008af12 || arg1 == 0xc008af12 || arg1 == 0x4008af20 || arg1 == 0x4008af21 || arg1 == 0x4008af22 || arg1 == 0x4008af30 +# Disallow mmap with PROT_EXEC set. The syntax here doesn't allow bit +# negation, thus the manually negated mask constant. +mmap2: arg2 in 0xfffffffb +mprotect: arg2 in 0xfffffffb +munmap: 1 +poll: 1 +ppoll: 1 +read: 1 +recv: 1 +sched_getaffinity: 1 +set_robust_list: 1 +sigaltstack: 1 +# Disallow clone's other than new threads. +# arg0 is flags. Because kernel. +clone: arg0 & 0x00010000 +write: 1 +getpid: 1 +# Allow PR_SET_NAME only. +prctl: arg0 == 15 +restart_syscall: 1 diff --git a/seccomp/aarch64/vhost_vsock_device.policy b/seccomp/aarch64/vhost_vsock_device.policy new file mode 100644 index 0000000..b112723 --- /dev/null +++ b/seccomp/aarch64/vhost_vsock_device.policy @@ -0,0 +1,49 @@ +# Copyright 2018 The Chromium OS Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +close: 1 +dup: 1 +dup2: 1 +exit_group: 1 +futex: 1 +# Whitelist vhost_vsock ioctls only. +# arg1 == VHOST_GET_FEATURES || +# arg1 == VHOST_SET_FEATURES || +# arg1 == VHOST_SET_OWNER || +# arg1 == VHOST_RESET_OWNER || +# arg1 == VHOST_SET_MEM_TABLE || +# arg1 == VHOST_SET_LOG_BASE || +# arg1 == VHOST_SET_LOG_FD || +# arg1 == VHOST_SET_VRING_NUM || +# arg1 == VHOST_SET_VRING_ADDR || +# arg1 == VHOST_SET_VRING_BASE || +# arg1 == VHOST_GET_VRING_BASE || +# arg1 == VHOST_SET_VRING_KICK || +# arg1 == VHOST_SET_VRING_CALL || +# arg1 == VHOST_SET_VRING_ERR || +# arg1 == VHOST_VSOCK_SET_GUEST_CID || +# arg1 == VHOST_VSOCK_SET_RUNNING +ioctl: arg1 == 0x8008af00 || arg1 == 0x4008af00 || arg1 == 0x0000af01 || arg1 == 0x0000af02 || arg1 == 0x4008af03 || arg1 == 0x4008af04 || arg1 == 0x4004af07 || arg1 == 0x4008af10 || arg1 == 0x4028af11 || arg1 == 0x4008af12 || arg1 == 0xc008af12 || arg1 == 0x4008af20 || arg1 == 0x4008af21 || arg1 == 0x4008af22 || arg1 == 0x4008af60 || arg1 == 0x4004af61 +# Disallow mmap with PROT_EXEC set. The syntax here doesn't allow bit +# negation, thus the manually negated mask constant. +mmap2: arg2 in 0xfffffffb +mprotect: arg2 in 0xfffffffb +munmap: 1 +poll: 1 +ppoll: 1 +read: 1 +connect: 1 +sendto: 1 +recv: 1 +sched_getaffinity: 1 +set_robust_list: 1 +sigaltstack: 1 +# Disallow clone's other than new threads. +# arg0 is flags. Because kernel. +clone: arg0 & 0x00010000 +write: 1 +getpid: 1 +# Allow PR_SET_NAME only. +prctl: arg0 == 15 +restart_syscall: 1 diff --git a/src/linux.rs b/src/linux.rs index 0ea188b..f4cc5a6 100644 --- a/src/linux.rs +++ b/src/linux.rs @@ -8,8 +8,6 @@ use std::fmt; use std::error; use std::fs::{File, OpenOptions, remove_file}; use std::io::{self, stdin}; -#[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] -use std::io::stdout; use std::os::unix::net::UnixDatagram; use std::path::{Path, PathBuf}; use std::sync::atomic::{AtomicBool, Ordering}; @@ -34,11 +32,12 @@ use vm_control::VmRequest; use Config; use DiskType; -#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] use arch::LinuxArch; #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] use x86_64::X8664arch as Arch; +#[cfg(any(target_arch = "arm", target_arch = "aarch64"))] +use aarch64::AArch64 as Arch; pub enum Error { BalloonDeviceNew(devices::virtio::BalloonError), @@ -80,15 +79,10 @@ pub enum Error { VhostVsockDeviceNew(devices::virtio::vhost::Error), WaylandDeviceNew(sys_util::Error), WaylandTempDir(sys_util::Error), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] SetupSystemMemory(Box<error::Error>), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] ConfigureVcpu(Box<error::Error>), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] LoadKernel(Box<error::Error>), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] SetupIoBus(Box<error::Error>), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] SetupMMIOBus(Box<error::Error>), } @@ -156,15 +150,10 @@ impl fmt::Display for Error { &Error::WaylandTempDir(ref e) => { write!(f, "failed to create wayland device jail directroy: {:?}", e) } - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] &Error::SetupSystemMemory(ref e) => write!(f, "error setting up system memory: {}", e), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] &Error::ConfigureVcpu(ref e) => write!(f, "failed to configure vcpu: {}", e), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] &Error::LoadKernel(ref e) => write!(f, "failed to load kernel: {}", e), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] &Error::SetupIoBus(ref e) => write!(f, "failed to setup iobus: {}", e), - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] &Error::SetupMMIOBus(ref e) => write!(f, "failed to setup mmio bus: {}", e), } } @@ -226,13 +215,8 @@ fn setup_mmio_bus(cfg: &Config, balloon_device_socket: UnixDatagram) -> Result<devices::Bus> { static DEFAULT_PIVOT_ROOT: &'static str = "/var/empty"; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let mut device_manager = Arch::get_device_manager(vm, mem.clone()). map_err(|e| Error::SetupMMIOBus(e))?; - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let mut device_manager = device_manager::DeviceManager::new(vm, - mem.clone(), - 0, 0, 0); // An empty directory for jailed device's pivot root. let empty_root_path = Path::new(DEFAULT_PIVOT_ROOT); @@ -425,7 +409,6 @@ fn setup_vcpu(kvm: &Kvm, -> Result<Vcpu> { let vcpu = Vcpu::new(cpu_id as libc::c_ulong, &kvm, &vm) .map_err(Error::CreateVcpu)?; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] Arch::configure_vcpu(vm.get_memory(), &kvm, &vcpu, cpu_id as u64, vcpu_count as u64). map_err(Error::ConfigureVcpu)?; Ok(vcpu) @@ -650,17 +633,9 @@ pub fn run_config(cfg: Config) -> Result<()> { let exit_evt = EventFd::new().map_err(Error::CreateEventFd)?; let mem_size = cfg.memory.unwrap_or(256) << 20; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let mem = Arch::setup_memory(mem_size as u64).map_err(|e| Error::CreateGuestMemory(e))?; - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let mem = GuestMemory::new(&vec![(GuestAddress(0), mem_size as u64)]). - map_err(|e| Error::CreateGuestMemory(Box::new(e)))?; - let kvm = Kvm::new().map_err(Error::CreateKvm)?; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let mut vm = Arch::create_vm(&kvm, mem.clone()).map_err(|e| Error::CreateVm(e))?; - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let mut vm = Vm::new(&kvm, mem.clone()).map_err(|e| Error::CreateVm(Box::new(e)))?; let vcpu_count = cfg.vcpu_count.unwrap_or(1); let mut vcpu_handles = Vec::with_capacity(vcpu_count as usize); @@ -671,33 +646,13 @@ pub fn run_config(cfg: Config) -> Result<()> { vcpus.push(vcpu); } - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let irq_chip = Arch::create_irq_chip(&vm).map_err(|e| Error::CreateIrqChip(e))?; - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let irq_chip = None; - - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let mut cmdline = Arch::get_base_linux_cmdline(); - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let mut cmdline = kernel_cmdline::Cmdline::new(128); - - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let mut next_dev_pfn = Arch::get_base_dev_pfn(mem_size as u64); - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let mut next_dev_pfn = 0; - - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] let (io_bus, stdio_serial) = Arch::setup_io_bus(&mut vm, exit_evt.try_clone(). map_err(Error::CloneEventFd)?). map_err(|e| Error::SetupIoBus(e))?; - // The non x86 case is kind of bogus using the exit_evt as an fd for serial - // It's purpose is just to make the build happy since it doesn't actually run anyway - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] - let (io_bus, stdio_serial) = (devices::Bus::new(), - Arc::new(Mutex::new(devices::Serial::new_out( - exit_evt.try_clone().map_err(Error::CloneEventFd)?, - Box::new(stdout()))))); let (balloon_host_socket, balloon_device_socket) = UnixDatagram::pair() .map_err(Error::CreateSocket)?; @@ -717,9 +672,7 @@ pub fn run_config(cfg: Config) -> Result<()> { // separate out load_kernel from other setup to get a specific error for // kernel loading - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] Arch::load_kernel(&mem, &mut kernel_image).map_err(|e| Error::LoadKernel(e))?; - #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] Arch::setup_system_memory(&mem, mem_size as u64, vcpu_count, &CString::new(cmdline).unwrap()). map_err(|e| Error::SetupSystemMemory(e))?; diff --git a/src/main.rs b/src/main.rs index ea161cf..e175125 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,8 @@ //! Runs a virtual machine under KVM extern crate arch; +#[cfg(any(target_arch = "arm", target_arch = "aarch64"))] +extern crate aarch64; extern crate devices; extern crate device_manager; extern crate libc; |