[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] sync Xen public headers to 4.8.0 level
# HG changeset patch # User Jan Beulich # Date 1483959657 -3600 # Mon Jan 09 12:00:57 2017 +0100 # Node ID 99ae48f6bfa800f17050ffea0983b4da24790fcc # Parent 85a408a07bccb3419e9bf8a46db3566bdf11af3e sync Xen public headers to 4.8.0 level --- diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/arch-arm.h --- a/include/xen/interface/arch-arm.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/arch-arm.h Mon Jan 09 12:00:57 2017 +0100 @@ -391,38 +391,42 @@ typedef uint64_t xen_callback_t; */ /* vGIC v2 mappings */ -#define GUEST_GICD_BASE 0x03001000ULL -#define GUEST_GICD_SIZE 0x00001000ULL -#define GUEST_GICC_BASE 0x03002000ULL -#define GUEST_GICC_SIZE 0x00002000ULL +#define GUEST_GICD_BASE xen_mk_ullong(0x03001000) +#define GUEST_GICD_SIZE xen_mk_ullong(0x00001000) +#define GUEST_GICC_BASE xen_mk_ullong(0x03002000) +#define GUEST_GICC_SIZE xen_mk_ullong(0x00002000) /* vGIC v3 mappings */ -#define GUEST_GICV3_GICD_BASE 0x03001000ULL -#define GUEST_GICV3_GICD_SIZE 0x00010000ULL +#define GUEST_GICV3_GICD_BASE xen_mk_ullong(0x03001000) +#define GUEST_GICV3_GICD_SIZE xen_mk_ullong(0x00010000) -#define GUEST_GICV3_RDIST_STRIDE 0x20000ULL +#define GUEST_GICV3_RDIST_STRIDE xen_mk_ullong(0x00020000) #define GUEST_GICV3_RDIST_REGIONS 1 -#define GUEST_GICV3_GICR0_BASE 0x03020000ULL /* vCPU0 - vCPU127 */ -#define GUEST_GICV3_GICR0_SIZE 0x01000000ULL +#define GUEST_GICV3_GICR0_BASE xen_mk_ullong(0x03020000) /* vCPU0..127 */ +#define GUEST_GICV3_GICR0_SIZE xen_mk_ullong(0x01000000) + +/* ACPI tables physical address */ +#define GUEST_ACPI_BASE 0x20000000ULL +#define GUEST_ACPI_SIZE 0x02000000ULL /* * 16MB == 4096 pages reserved for guest to use as a region to map its * grant table in. */ -#define GUEST_GNTTAB_BASE 0x38000000ULL -#define GUEST_GNTTAB_SIZE 0x01000000ULL +#define GUEST_GNTTAB_BASE xen_mk_ullong(0x38000000) +#define GUEST_GNTTAB_SIZE xen_mk_ullong(0x01000000) -#define GUEST_MAGIC_BASE 0x39000000ULL -#define GUEST_MAGIC_SIZE 0x01000000ULL +#define GUEST_MAGIC_BASE xen_mk_ullong(0x39000000) +#define GUEST_MAGIC_SIZE xen_mk_ullong(0x01000000) #define GUEST_RAM_BANKS 2 -#define GUEST_RAM0_BASE 0x40000000ULL /* 3GB of low RAM @ 1GB */ -#define GUEST_RAM0_SIZE 0xc0000000ULL +#define GUEST_RAM0_BASE xen_mk_ullong(0x40000000) /* 3GB of low RAM @ 1GB */ +#define GUEST_RAM0_SIZE xen_mk_ullong(0xc0000000) -#define GUEST_RAM1_BASE 0x0200000000ULL /* 1016GB of RAM @ 8GB */ -#define GUEST_RAM1_SIZE 0xfe00000000ULL +#define GUEST_RAM1_BASE xen_mk_ullong(0x0200000000) /* 1016GB of RAM @ 8GB */ +#define GUEST_RAM1_SIZE xen_mk_ullong(0xfe00000000) #define GUEST_RAM_BASE GUEST_RAM0_BASE /* Lowest RAM address */ /* Largest amount of actual RAM, not including holes */ @@ -431,6 +435,9 @@ typedef uint64_t xen_callback_t; #define GUEST_RAM_BANK_BASES { GUEST_RAM0_BASE, GUEST_RAM1_BASE } #define GUEST_RAM_BANK_SIZES { GUEST_RAM0_SIZE, GUEST_RAM1_SIZE } +/* Current supported guest VCPUs */ +#define GUEST_MAX_VCPUS 128 + /* Interrupts */ #define GUEST_TIMER_VIRT_PPI 27 #define GUEST_TIMER_PHYS_S_PPI 29 diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/arch-x86/cpufeatureset.h --- a/include/xen/interface/arch-x86/cpufeatureset.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/arch-x86/cpufeatureset.h Mon Jan 09 12:00:57 2017 +0100 @@ -206,15 +206,24 @@ XEN_CPUFEATURE(PQM, 5*32+12) / XEN_CPUFEATURE(NO_FPU_SEL, 5*32+13) /*! FPU CS/DS stored as zero */ XEN_CPUFEATURE(MPX, 5*32+14) /*S Memory Protection Extensions */ XEN_CPUFEATURE(PQE, 5*32+15) /* Platform QoS Enforcement */ +XEN_CPUFEATURE(AVX512F, 5*32+16) /*A AVX-512 Foundation Instructions */ +XEN_CPUFEATURE(AVX512DQ, 5*32+17) /*A AVX-512 Doubleword & Quadword Instrs */ XEN_CPUFEATURE(RDSEED, 5*32+18) /*A RDSEED instruction */ XEN_CPUFEATURE(ADX, 5*32+19) /*A ADCX, ADOX instructions */ XEN_CPUFEATURE(SMAP, 5*32+20) /*S Supervisor Mode Access Prevention */ +XEN_CPUFEATURE(AVX512IFMA, 5*32+21) /*A AVX-512 Integer Fused Multiply Add */ XEN_CPUFEATURE(CLFLUSHOPT, 5*32+23) /*A CLFLUSHOPT instruction */ XEN_CPUFEATURE(CLWB, 5*32+24) /*A CLWB instruction */ +XEN_CPUFEATURE(AVX512PF, 5*32+26) /*A AVX-512 Prefetch Instructions */ +XEN_CPUFEATURE(AVX512ER, 5*32+27) /*A AVX-512 Exponent & Reciprocal Instrs */ +XEN_CPUFEATURE(AVX512CD, 5*32+28) /*A AVX-512 Conflict Detection Instrs */ XEN_CPUFEATURE(SHA, 5*32+29) /*A SHA1 & SHA256 instructions */ +XEN_CPUFEATURE(AVX512BW, 5*32+30) /*A AVX-512 Byte and Word Instructions */ +XEN_CPUFEATURE(AVX512VL, 5*32+31) /*A AVX-512 Vector Length Extensions */ /* Intel-defined CPU features, CPUID level 0x00000007:0.ecx, word 6 */ XEN_CPUFEATURE(PREFETCHWT1, 6*32+ 0) /*A PREFETCHWT1 instruction */ +XEN_CPUFEATURE(AVX512VBMI, 6*32+ 1) /*A AVX-512 Vector Byte Manipulation Instrs */ XEN_CPUFEATURE(PKU, 6*32+ 3) /*H Protection Keys for Userspace */ XEN_CPUFEATURE(OSPKE, 6*32+ 4) /*! OS Protection Keys Enable */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/arch-x86/hvm/start_info.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/include/xen/interface/arch-x86/hvm/start_info.h Mon Jan 09 12:00:57 2017 +0100 @@ -0,0 +1,98 @@ +/* + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Copyright (c) 2016, Citrix Systems, Inc. + */ + +#ifndef __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ +#define __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ + +/* + * Start of day structure passed to PVH guests and to HVM guests in %ebx. + * + * NOTE: nothing will be loaded at physical address 0, so a 0 value in any + * of the address fields should be treated as not present. + * + * 0 +----------------+ + * | magic | Contains the magic value XEN_HVM_START_MAGIC_VALUE + * | | ("xEn3" with the 0x80 bit of the "E" set). + * 4 +----------------+ + * | version | Version of this structure. Current version is 0. New + * | | versions are guaranteed to be backwards-compatible. + * 8 +----------------+ + * | flags | SIF_xxx flags. + * 12 +----------------+ + * | nr_modules | Number of modules passed to the kernel. + * 16 +----------------+ + * | modlist_paddr | Physical address of an array of modules + * | | (layout of the structure below). + * 24 +----------------+ + * | cmdline_paddr | Physical address of the command line, + * | | a zero-terminated ASCII string. + * 32 +----------------+ + * | rsdp_paddr | Physical address of the RSDP ACPI data structure. + * 40 +----------------+ + * + * The layout of each entry in the module structure is the following: + * + * 0 +----------------+ + * | paddr | Physical address of the module. + * 8 +----------------+ + * | size | Size of the module in bytes. + * 16 +----------------+ + * | cmdline_paddr | Physical address of the command line, + * | | a zero-terminated ASCII string. + * 24 +----------------+ + * | reserved | + * 32 +----------------+ + * + * The address and sizes are always a 64bit little endian unsigned integer. + * + * NB: Xen on x86 will always try to place all the data below the 4GiB + * boundary. + */ +#define XEN_HVM_START_MAGIC_VALUE 0x336ec578 + +/* + * C representation of the x86/HVM start info layout. + * + * The canonical definition of this layout is above, this is just a way to + * represent the layout described there using C types. + */ +struct hvm_start_info { + uint32_t magic; /* Contains the magic value 0x336ec578 */ + /* ("xEn3" with the 0x80 bit of the "E" set).*/ + uint32_t version; /* Version of this structure. */ + uint32_t flags; /* SIF_xxx flags. */ + uint32_t nr_modules; /* Number of modules passed to the kernel. */ + uint64_t modlist_paddr; /* Physical address of an array of */ + /* hvm_modlist_entry. */ + uint64_t cmdline_paddr; /* Physical address of the command line. */ + uint64_t rsdp_paddr; /* Physical address of the RSDP ACPI data */ + /* structure. */ +}; + +struct hvm_modlist_entry { + uint64_t paddr; /* Physical address of the module. */ + uint64_t size; /* Size of the module in bytes. */ + uint64_t cmdline_paddr; /* Physical address of the command line. */ + uint64_t reserved; +}; + +#endif /* __XEN_PUBLIC_ARCH_X86_HVM_START_INFO_H__ */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/domctl.h --- a/include/xen/interface/domctl.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/domctl.h Mon Jan 09 12:00:57 2017 +0100 @@ -37,7 +37,7 @@ #include "hvm/save.h" #include "memory.h" -#define XEN_DOMCTL_INTERFACE_VERSION 0x0000000b +#define XEN_DOMCTL_INTERFACE_VERSION 0x0000000c /* * NB. xen_domctl.domain is an IN/OUT parameter for this operation. @@ -103,6 +103,9 @@ struct xen_domctl_getdomaininfo { /* domain is a xenstore domain */ #define _XEN_DOMINF_xs_domain 8 #define XEN_DOMINF_xs_domain (1U<<_XEN_DOMINF_xs_domain) +/* domain has hardware assisted paging */ +#define _XEN_DOMINF_hap 9 +#define XEN_DOMINF_hap (1U<<_XEN_DOMINF_hap) /* XEN_DOMINF_shutdown guest-supplied code. */ #define XEN_DOMINF_shutdownmask 255 #define XEN_DOMINF_shutdownshift 16 @@ -1123,6 +1126,9 @@ DEFINE_XEN_GUEST_HANDLE(xen_domctl_psr_c #define XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP 2 #define XEN_DOMCTL_MONITOR_EVENT_SOFTWARE_BREAKPOINT 3 #define XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST 4 +#define XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION 5 +#define XEN_DOMCTL_MONITOR_EVENT_CPUID 6 +#define XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL 7 struct xen_domctl_monitor_op { uint32_t op; /* XEN_DOMCTL_MONITOR_OP_* */ @@ -1150,14 +1156,18 @@ struct xen_domctl_monitor_op { } mov_to_cr; struct { - /* Enable the capture of an extended set of MSRs */ - uint8_t extended_capture; + uint32_t msr; } mov_to_msr; struct { /* Pause vCPU until response */ uint8_t sync; } guest_request; + + struct { + /* Pause vCPU until response */ + uint8_t sync; + } debug_exception; } u; }; typedef struct xen_domctl_monitor_op xen_domctl_monitor_op_t; @@ -1262,9 +1272,6 @@ struct xen_domctl { domid_t domain; union { struct xen_domctl_createdomain createdomain; -#if defined(__arm__) || defined(__aarch64__) - struct xen_domctl_arm_configuredomain configuredomain; -#endif struct xen_domctl_getdomaininfo getdomaininfo; struct xen_domctl_getmemlist getmemlist; struct xen_domctl_getpageframeinfo3 getpageframeinfo3; diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/errno.h --- a/include/xen/interface/errno.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/errno.h Mon Jan 09 12:00:57 2017 +0100 @@ -91,8 +91,8 @@ XEN_ERRNO(EDEADLK, 35) /* Resource deadl XEN_ERRNO(EDEADLOCK, 35) /* Resource deadlock would occur. Aliases EDEADLK */ XEN_ERRNO(ENAMETOOLONG, 36) /* File name too long */ XEN_ERRNO(ENOLCK, 37) /* No record locks available */ +XEN_ERRNO(ENOSYS, 38) /* Function not implemented */ XEN_ERRNO(ENOTEMPTY, 39) /* Directory not empty */ -XEN_ERRNO(ENOSYS, 38) /* Function not implemented */ XEN_ERRNO(ENODATA, 61) /* No data available */ XEN_ERRNO(ETIME, 62) /* Timer expired */ XEN_ERRNO(EBADMSG, 74) /* Not a data message */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/hvm/e820.h --- a/include/xen/interface/hvm/e820.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/hvm/e820.h Mon Jan 09 12:00:57 2017 +0100 @@ -23,6 +23,8 @@ #ifndef __XEN_PUBLIC_HVM_E820_H__ #define __XEN_PUBLIC_HVM_E820_H__ +#include "../xen.h" + /* E820 location in HVM virtual address space. */ #define HVM_E820_PAGE 0x00090000 #define HVM_E820_NR_OFFSET 0x000001E8 @@ -30,6 +32,7 @@ #define HVM_BELOW_4G_RAM_END 0xF0000000 #define HVM_BELOW_4G_MMIO_START HVM_BELOW_4G_RAM_END -#define HVM_BELOW_4G_MMIO_LENGTH ((1ULL << 32) - HVM_BELOW_4G_MMIO_START) +#define HVM_BELOW_4G_MMIO_LENGTH ((xen_mk_ullong(1) << 32) - \ + HVM_BELOW_4G_MMIO_START) #endif /* __XEN_PUBLIC_HVM_E820_H__ */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/hvm/hvm_info_table.h --- a/include/xen/interface/hvm/hvm_info_table.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/hvm/hvm_info_table.h Mon Jan 09 12:00:57 2017 +0100 @@ -34,6 +34,14 @@ /* Maximum we can support with current vLAPIC ID mapping. */ #define HVM_MAX_VCPUS 128 +/* + * In some cases SMP HVM guests may require knowledge of Xen's idea of vCPU ids + * for their vCPUs. For example, HYPERVISOR_vcpu_op and some EVTCHNOP_* + * hypercalls take vcpu id as a parameter. It is valid for HVM guests to assume + * that Xen's vCPU id always equals to ACPI (not APIC!) id in MADT table which + * is always present for SMP guests. + */ + struct hvm_info_table { char signature[8]; /* "HVM INFO" */ uint32_t length; diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/hvm/hvm_op.h --- a/include/xen/interface/hvm/hvm_op.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/hvm/hvm_op.h Mon Jan 09 12:00:57 2017 +0100 @@ -84,11 +84,12 @@ typedef enum { HVMMEM_ram_ro, /* Read-only; writes are discarded */ HVMMEM_mmio_dm, /* Reads and write go to the device model */ #if __XEN_INTERFACE_VERSION__ < 0x00040700 - HVMMEM_mmio_write_dm /* Read-only; writes go to the device model */ + HVMMEM_mmio_write_dm, /* Read-only; writes go to the device model */ #else - HVMMEM_unused /* Placeholder; setting memory to this type + HVMMEM_unused, /* Placeholder; setting memory to this type will fail for code after 4.7.0 */ #endif + HVMMEM_ioreq_server } hvmmem_type_t; /* Following tools-only interfaces may change in future. */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/hvm/params.h --- a/include/xen/interface/hvm/params.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/hvm/params.h Mon Jan 09 12:00:57 2017 +0100 @@ -30,6 +30,7 @@ */ #define HVM_PARAM_CALLBACK_IRQ 0 +#define HVM_PARAM_CALLBACK_IRQ_TYPE_MASK xen_mk_ullong(0xFF00000000000000) /* * How should CPU0 event-channel notifications be delivered? * @@ -66,6 +67,8 @@ * This is only used by ARM/ARM64 and masking/eoi the interrupt associated to * the notification is handled by the interrupt controller. */ +#define HVM_PARAM_CALLBACK_TYPE_PPI_FLAG_MASK 0xFF00 +#define HVM_PARAM_CALLBACK_TYPE_PPI_FLAG_LOW_LEVEL 2 #endif /* diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/hvm/pvdrivers.h --- a/include/xen/interface/hvm/pvdrivers.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/hvm/pvdrivers.h Mon Jan 09 12:00:57 2017 +0100 @@ -28,7 +28,7 @@ * This is the master registry of product numbers for * PV drivers. * If you need a new product number allocating, please - * post to xen-devel@xxxxxxxxxxxxxxxxxxx. You should NOT use + * post to xen-devel@xxxxxxxxxxxxxxxxxxxx. You should NOT use * a product number without allocating one. * If you maintain a separate versioning and distribution path * for PV drivers you should have a separate product number so diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/io/blkif.h --- a/include/xen/interface/io/blkif.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/io/blkif.h Mon Jan 09 12:00:57 2017 +0100 @@ -216,10 +216,9 @@ * Default Value: 1 * * This optional property, set by the toolstack, instructs the backend - * to offer discard to the frontend. If the property is missing the - * backend should offer discard if the backing storage actually supports - * it. This optional property, set by the toolstack, requests that the - * backend offer, or not offer, discard to the frontend. + * to offer (or not to offer) discard to the frontend. If the property + * is missing the backend should offer discard if the backing storage + * actually supports it. * * discard-alignment * Values: <uint32_t> @@ -451,54 +450,6 @@ */ /* - * Multiple hardware queues/rings: - * If supported, the backend will write the key "multi-queue-max-queues" to - * the directory for that vbd, and set its value to the maximum supported - * number of queues. - * Frontends that are aware of this feature and wish to use it can write the - * key "multi-queue-num-queues" with the number they wish to use, which must be - * greater than zero, and no more than the value reported by the backend in - * "multi-queue-max-queues". - * - * For frontends requesting just one queue, the usual event-channel and - * ring-ref keys are written as before, simplifying the backend processing - * to avoid distinguishing between a frontend that doesn't understand the - * multi-queue feature, and one that does, but requested only one queue. - * - * Frontends requesting two or more queues must not write the toplevel - * event-channel and ring-ref keys, instead writing those keys under sub-keys - * having the name "queue-N" where N is the integer ID of the queue/ring for - * which those keys belong. Queues are indexed from zero. - * For example, a frontend with two queues must write the following set of - * queue-related keys: - * - * /local/domain/1/device/vbd/0/multi-queue-num-queues = "2" - * /local/domain/1/device/vbd/0/queue-0 = "" - * /local/domain/1/device/vbd/0/queue-0/ring-ref = "<ring-ref#0>" - * /local/domain/1/device/vbd/0/queue-0/event-channel = "<evtchn#0>" - * /local/domain/1/device/vbd/0/queue-1 = "" - * /local/domain/1/device/vbd/0/queue-1/ring-ref = "<ring-ref#1>" - * /local/domain/1/device/vbd/0/queue-1/event-channel = "<evtchn#1>" - * - * It is also possible to use multiple queues/rings together with - * feature multi-page ring buffer. - * For example, a frontend requests two queues/rings and the size of each ring - * buffer is two pages must write the following set of related keys: - * - * /local/domain/1/device/vbd/0/multi-queue-num-queues = "2" - * /local/domain/1/device/vbd/0/ring-page-order = "1" - * /local/domain/1/device/vbd/0/queue-0 = "" - * /local/domain/1/device/vbd/0/queue-0/ring-ref0 = "<ring-ref#0>" - * /local/domain/1/device/vbd/0/queue-0/ring-ref1 = "<ring-ref#1>" - * /local/domain/1/device/vbd/0/queue-0/event-channel = "<evtchn#0>" - * /local/domain/1/device/vbd/0/queue-1 = "" - * /local/domain/1/device/vbd/0/queue-1/ring-ref0 = "<ring-ref#2>" - * /local/domain/1/device/vbd/0/queue-1/ring-ref1 = "<ring-ref#3>" - * /local/domain/1/device/vbd/0/queue-1/event-channel = "<evtchn#1>" - * - */ - -/* * STATE DIAGRAMS * ***************************************************************************** diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/io/usbif.h --- a/include/xen/interface/io/usbif.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/io/usbif.h Mon Jan 09 12:00:57 2017 +0100 @@ -170,6 +170,7 @@ enum usb_spec_version { #define USBIF_MAX_SEGMENTS_PER_REQUEST (16) #define USBIF_MAX_PORTNR 31 +#define USBIF_RING_SIZE 4096 /* * RING for transferring urbs. @@ -226,7 +227,7 @@ struct usbif_urb_response { typedef struct usbif_urb_response usbif_urb_response_t; DEFINE_RING_TYPES(usbif_urb, struct usbif_urb_request, struct usbif_urb_response); -#define USB_URB_RING_SIZE __CONST_RING_SIZE(usbif_urb, PAGE_SIZE) +#define USB_URB_RING_SIZE __CONST_RING_SIZE(usbif_urb, USBIF_RING_SIZE) /* * RING for notifying connect/disconnect events to frontend @@ -248,6 +249,6 @@ struct usbif_conn_response { typedef struct usbif_conn_response usbif_conn_response_t; DEFINE_RING_TYPES(usbif_conn, struct usbif_conn_request, struct usbif_conn_response); -#define USB_CONN_RING_SIZE __CONST_RING_SIZE(usbif_conn, PAGE_SIZE) +#define USB_CONN_RING_SIZE __CONST_RING_SIZE(usbif_conn, USBIF_RING_SIZE) #endif /* __XEN_PUBLIC_IO_USBIF_H__ */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/io/vscsiif.h --- a/include/xen/interface/io/vscsiif.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/io/vscsiif.h Mon Jan 09 12:00:57 2017 +0100 @@ -248,6 +248,7 @@ */ #define VSCSIIF_MAX_COMMAND_SIZE 16 #define VSCSIIF_SENSE_BUFFERSIZE 96 +#define VSCSIIF_PAGE_SIZE 4096 struct scsiif_request_segment { grant_ref_t gref; @@ -256,7 +257,7 @@ struct scsiif_request_segment { }; typedef struct scsiif_request_segment vscsiif_segment_t; -#define VSCSIIF_SG_PER_PAGE (PAGE_SIZE / sizeof(struct scsiif_request_segment)) +#define VSCSIIF_SG_PER_PAGE (VSCSIIF_PAGE_SIZE / sizeof(struct scsiif_request_segment)) /* Size of one request is 252 bytes */ struct vscsiif_request { diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/memory.h --- a/include/xen/interface/memory.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/memory.h Mon Jan 09 12:00:57 2017 +0100 @@ -410,6 +410,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_paging_o * #define XENMEM_access_op_enable_emulate 2 * #define XENMEM_access_op_disable_emulate 3 */ +#define XENMEM_access_op_set_access_multi 4 typedef enum { XENMEM_access_n, @@ -442,7 +443,8 @@ struct xen_mem_access_op { uint8_t access; domid_t domid; /* - * Number of pages for set op + * Number of pages for set op (or size of pfn_list for + * XENMEM_access_op_set_access_multi) * Ignored on setting default access and other ops */ uint32_t nr; @@ -452,6 +454,16 @@ struct xen_mem_access_op { * ~0ull is used to set and get the default access for pages */ uint64_aligned_t pfn; + /* + * List of pfns to set access for + * Used only with XENMEM_access_op_set_access_multi + */ + XEN_GUEST_HANDLE(const_uint64) pfn_list; + /* + * Corresponding list of access settings for pfn_list + * Used only with XENMEM_access_op_set_access_multi + */ + XEN_GUEST_HANDLE(const_uint8) access_list; }; typedef struct xen_mem_access_op xen_mem_access_op_t; DEFINE_XEN_GUEST_HANDLE(xen_mem_access_op_t); @@ -465,6 +477,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_access_o #define XENMEM_sharing_op_debug_gref 5 #define XENMEM_sharing_op_add_physmap 6 #define XENMEM_sharing_op_audit 7 +#define XENMEM_sharing_op_range_share 8 #define XENMEM_SHARING_OP_S_HANDLE_INVALID (-10) #define XENMEM_SHARING_OP_C_HANDLE_INVALID (-9) @@ -473,7 +486,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_mem_access_o * for sharing utilities sitting as "filters" in IO backends * (e.g. memshr + blktap(2)). The IO backend is only exposed * to grant references, and this allows sharing of the grefs */ -#define XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG (1ULL << 62) +#define XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG (xen_mk_ullong(1) << 62) #define XENMEM_SHARING_OP_FIELD_MAKE_GREF(field, val) \ (field) = (XENMEM_SHARING_OP_FIELD_IS_GREF_FLAG | val) @@ -500,7 +513,14 @@ struct xen_mem_sharing_op { uint64_aligned_t client_gfn; /* IN: the client gfn */ uint64_aligned_t client_handle; /* IN: handle to the client page */ domid_t client_domain; /* IN: the client domain id */ - } share; + } share; + struct mem_sharing_op_range { /* OP_RANGE_SHARE */ + uint64_aligned_t first_gfn; /* IN: the first gfn */ + uint64_aligned_t last_gfn; /* IN: the last gfn */ + uint64_aligned_t opaque; /* Must be set to 0 */ + domid_t client_domain; /* IN: the client domain id */ + uint16_t _pad[3]; /* Must be set to 0 */ + } range; struct mem_sharing_op_debug { /* OP_DEBUG_xxx */ union { uint64_aligned_t gfn; /* IN: gfn to debug */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/sysctl.h --- a/include/xen/interface/sysctl.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/sysctl.h Mon Jan 09 12:00:57 2017 +0100 @@ -36,7 +36,7 @@ #include "physdev.h" #include "tmem.h" -#define XEN_SYSCTL_INTERFACE_VERSION 0x0000000D +#define XEN_SYSCTL_INTERFACE_VERSION 0x0000000E /* * Read console content from Xen buffer ring. @@ -623,19 +623,29 @@ struct xen_sysctl_arinc653_schedule { typedef struct xen_sysctl_arinc653_schedule xen_sysctl_arinc653_schedule_t; DEFINE_XEN_GUEST_HANDLE(xen_sysctl_arinc653_schedule_t); +/* + * Valid range for context switch rate limit (in microseconds). + * Applicable to Credit and Credit2 schedulers. + */ +#define XEN_SYSCTL_SCHED_RATELIMIT_MAX 500000 +#define XEN_SYSCTL_SCHED_RATELIMIT_MIN 100 + struct xen_sysctl_credit_schedule { /* Length of timeslice in milliseconds */ #define XEN_SYSCTL_CSCHED_TSLICE_MAX 1000 #define XEN_SYSCTL_CSCHED_TSLICE_MIN 1 unsigned tslice_ms; - /* Rate limit (minimum timeslice) in microseconds */ -#define XEN_SYSCTL_SCHED_RATELIMIT_MAX 500000 -#define XEN_SYSCTL_SCHED_RATELIMIT_MIN 100 unsigned ratelimit_us; }; typedef struct xen_sysctl_credit_schedule xen_sysctl_credit_schedule_t; DEFINE_XEN_GUEST_HANDLE(xen_sysctl_credit_schedule_t); +struct xen_sysctl_credit2_schedule { + unsigned ratelimit_us; +}; +typedef struct xen_sysctl_credit2_schedule xen_sysctl_credit2_schedule_t; +DEFINE_XEN_GUEST_HANDLE(xen_sysctl_credit2_schedule_t); + /* XEN_SYSCTL_scheduler_op */ /* Set or get info? */ #define XEN_SYSCTL_SCHEDOP_putinfo 0 @@ -649,6 +659,7 @@ struct xen_sysctl_scheduler_op { XEN_GUEST_HANDLE_64(xen_sysctl_arinc653_schedule_t) schedule; } sched_arinc653; struct xen_sysctl_credit_schedule sched_credit; + struct xen_sysctl_credit2_schedule sched_credit2; } u; }; typedef struct xen_sysctl_scheduler_op xen_sysctl_scheduler_op_t; @@ -756,19 +767,11 @@ DEFINE_XEN_GUEST_HANDLE(xen_sysctl_psr_c #define XEN_SYSCTL_TMEM_OP_FLUSH 2 #define XEN_SYSCTL_TMEM_OP_DESTROY 3 #define XEN_SYSCTL_TMEM_OP_LIST 4 -#define XEN_SYSCTL_TMEM_OP_SET_WEIGHT 5 -#define XEN_SYSCTL_TMEM_OP_SET_CAP 6 -#define XEN_SYSCTL_TMEM_OP_SET_COMPRESS 7 +#define XEN_SYSCTL_TMEM_OP_GET_CLIENT_INFO 5 +#define XEN_SYSCTL_TMEM_OP_SET_CLIENT_INFO 6 +#define XEN_SYSCTL_TMEM_OP_GET_POOLS 7 #define XEN_SYSCTL_TMEM_OP_QUERY_FREEABLE_MB 8 #define XEN_SYSCTL_TMEM_OP_SAVE_BEGIN 10 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_VERSION 11 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_MAXPOOLS 12 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_CLIENT_WEIGHT 13 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_CLIENT_CAP 14 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_CLIENT_FLAGS 15 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_POOL_FLAGS 16 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_POOL_NPAGES 17 -#define XEN_SYSCTL_TMEM_OP_SAVE_GET_POOL_UUID 18 #define XEN_SYSCTL_TMEM_OP_SAVE_GET_NEXT_PAGE 19 #define XEN_SYSCTL_TMEM_OP_SAVE_GET_NEXT_INV 20 #define XEN_SYSCTL_TMEM_OP_SAVE_END 21 @@ -787,17 +790,71 @@ struct tmem_handle { xen_tmem_oid_t oid; }; +/* + * XEN_SYSCTL_TMEM_OP_[GET,SAVE]_CLIENT uses the 'client' in + * xen_tmem_op with this structure, which is mostly used during migration. + */ +struct xen_tmem_client { + uint32_t version; /* If mismatched we will get XEN_EOPNOTSUPP. */ + uint32_t maxpools; /* If greater than what hypervisor supports, will get + XEN_ERANGE. */ + uint32_t nr_pools; /* Current amount of pools. Ignored on SET*/ + union { /* See TMEM_CLIENT_[COMPRESS,FROZEN] */ + uint32_t raw; + struct { + uint8_t frozen:1, + compress:1, + migrating:1; + } u; + } flags; + uint32_t weight; +}; +typedef struct xen_tmem_client xen_tmem_client_t; +DEFINE_XEN_GUEST_HANDLE(xen_tmem_client_t); + +/* + * XEN_SYSCTL_TMEM_OP_GET_POOLS uses the 'pool' array in + * xen_sysctl_tmem_op with this structure. The hypercall will + * return the number of entries in 'pool' or a negative value + * if an error was encountered. + */ +struct xen_tmem_pool_info { + union { + uint32_t raw; + struct { + uint32_t persist:1, /* See TMEM_POOL_PERSIST. */ + shared:1, /* See TMEM_POOL_SHARED. */ + rsv:2, + pagebits:8, /* TMEM_POOL_PAGESIZE_[SHIFT,MASK]. */ + rsv2:12, + version:8; /* TMEM_POOL_VERSION_[SHIFT,MASK]. */ + } u; + } flags; + uint32_t id; /* Less than tmem_client.maxpools. */ + uint64_t n_pages; + uint64_aligned_t uuid[2]; +}; +typedef struct xen_tmem_pool_info xen_tmem_pool_info_t; +DEFINE_XEN_GUEST_HANDLE(xen_tmem_pool_info_t); + struct xen_sysctl_tmem_op { uint32_t cmd; /* IN: XEN_SYSCTL_TMEM_OP_* . */ int32_t pool_id; /* IN: 0 by default unless _SAVE_*, RESTORE_* .*/ uint32_t cli_id; /* IN: client id, 0 for XEN_SYSCTL_TMEM_QUERY_FREEABLE_MB for all others can be the domain id or XEN_SYSCTL_TMEM_OP_ALL_CLIENTS for all. */ - uint32_t arg1; /* IN: If not applicable to command use 0. */ - uint32_t arg2; /* IN: If not applicable to command use 0. */ + uint32_t len; /* IN: length of 'buf'. If not applicable to use 0. */ + uint32_t arg; /* IN: If not applicable to command use 0. */ uint32_t pad; /* Padding so structure is the same under 32 and 64. */ xen_tmem_oid_t oid; /* IN: If not applicable to command use 0s. */ - XEN_GUEST_HANDLE_64(char) buf; /* IN/OUT: Buffer to save and restore ops. */ + union { + XEN_GUEST_HANDLE_64(char) buf; /* IN/OUT: Buffer to save/restore */ + XEN_GUEST_HANDLE_64(xen_tmem_client_t) client; /* IN/OUT for */ + /* XEN_SYSCTL_TMEM_OP_[GET,SAVE]_CLIENT. */ + XEN_GUEST_HANDLE_64(xen_tmem_pool_info_t) pool; /* OUT for */ + /* XEN_SYSCTL_TMEM_OP_GET_POOLS. Must have 'len' */ + /* of them. */ + } u; }; typedef struct xen_sysctl_tmem_op xen_sysctl_tmem_op_t; DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tmem_op_t); diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/vcpu.h --- a/include/xen/interface/vcpu.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/vcpu.h Mon Jan 09 12:00:57 2017 +0100 @@ -84,6 +84,12 @@ struct vcpu_runstate_info { /* When was current state entered (system time, ns)? */ uint64_t state_entry_time; /* + * Update indicator set in state_entry_time: + * When activated via VMASST_TYPE_runstate_update_flag, set during + * updates in guest memory mapped copy of vcpu_runstate_info. + */ +#define XEN_RUNSTATE_UPDATE (xen_mk_ullong(1) << 63) + /* * Time spent in each RUNSTATE_* (ns). The sum of these times is * guaranteed not to drift from system time. */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/vm_event.h --- a/include/xen/interface/vm_event.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/vm_event.h Mon Jan 09 12:00:57 2017 +0100 @@ -29,7 +29,7 @@ #include "xen.h" -#define VM_EVENT_INTERFACE_VERSION 0x00000001 +#define VM_EVENT_INTERFACE_VERSION 0x00000002 #if defined(__XEN__) || defined(__XEN_TOOLS__) @@ -74,19 +74,20 @@ * VM_EVENT_FLAG_SET_EMUL_READ_DATA are set, only the latter will be honored). */ #define VM_EVENT_FLAG_SET_EMUL_READ_DATA (1 << 5) - /* - * Deny completion of the operation that triggered the event. - * Currently only useful for MSR, CR0, CR3 and CR4 write events. - */ +/* + * Deny completion of the operation that triggered the event. + * Currently only useful for MSR and control-register write events. + * Requires the vCPU to be paused already (synchronous events only). + */ #define VM_EVENT_FLAG_DENY (1 << 6) /* * This flag can be set in a request or a response * - * On a request, indicates that the event occurred in the alternate p2m specified by - * the altp2m_idx request field. + * On a request, indicates that the event occurred in the alternate p2m + * specified by the altp2m_idx request field. * - * On a response, indicates that the VCPU should resume in the alternate p2m specified - * by the altp2m_idx response field if possible. + * On a response, indicates that the VCPU should resume in the alternate p2m + * specified by the altp2m_idx response field if possible. */ #define VM_EVENT_FLAG_ALTERNATE_P2M (1 << 7) /* @@ -96,6 +97,14 @@ * Requires the vCPU to be paused already (synchronous events only). */ #define VM_EVENT_FLAG_SET_REGISTERS (1 << 8) +/* + * Instruction cache is being sent back to the hypervisor in the event response + * to be used by the emulator. This flag is only useful when combined with + * VM_EVENT_FLAG_EMULATE and does not take presedence if combined with + * VM_EVENT_FLAG_EMULATE_NOWRITE or VM_EVENT_FLAG_SET_EMUL_READ_DATA, (i.e. + * if any of those flags are set, only those will be honored). + */ +#define VM_EVENT_FLAG_SET_EMUL_INSN_DATA (1 << 9) /* * Reasons for the vm event request @@ -119,6 +128,17 @@ #define VM_EVENT_REASON_SINGLESTEP 7 /* An event has been requested via HVMOP_guest_request_vm_event. */ #define VM_EVENT_REASON_GUEST_REQUEST 8 +/* A debug exception was caught */ +#define VM_EVENT_REASON_DEBUG_EXCEPTION 9 +/* CPUID executed */ +#define VM_EVENT_REASON_CPUID 10 +/* + * Privileged call executed (e.g. SMC). + * Note: event may be generated even if SMC condition check fails on some CPUs. + * As this behavior is CPU-specific, users are advised to not rely on it. + * These kinds of events will be filtered out in future versions. + */ +#define VM_EVENT_REASON_PRIVILEGED_CALL 11 /* Supported values for the vm_event_write_ctrlreg index. */ #define VM_EVENT_X86_CR0 0 @@ -127,8 +147,8 @@ #define VM_EVENT_X86_XCR0 3 /* - * Using a custom struct (not hvm_hw_cpu) so as to not fill - * the vm_event ring buffer too quickly. + * Using custom vCPU structs (i.e. not hvm_hw_cpu) for both x86 and ARM + * so as to not fill the vm_event ring buffer too quickly. */ struct vm_event_regs_x86 { uint64_t rax; @@ -167,6 +187,19 @@ struct vm_event_regs_x86 { }; /* + * Only the register 'pc' can be set on a vm_event response using the + * VM_EVENT_FLAG_SET_REGISTERS flag. + */ +struct vm_event_regs_arm { + uint64_t ttbr0; + uint64_t ttbr1; + uint64_t ttbcr; + uint64_t pc; + uint32_t cpsr; + uint32_t _pad; +}; + +/* * mem_access flag definitions * * These flags are set only as part of a mem_event request. @@ -177,16 +210,16 @@ struct vm_event_regs_x86 { * FAULT_WITH_GLA: If the violation was triggered by accessing gla * FAULT_IN_GPT: If the violation was triggered during translating gla */ -#define MEM_ACCESS_R (1 << 0) -#define MEM_ACCESS_W (1 << 1) -#define MEM_ACCESS_X (1 << 2) -#define MEM_ACCESS_RWX (MEM_ACCESS_R | MEM_ACCESS_W | MEM_ACCESS_X) -#define MEM_ACCESS_RW (MEM_ACCESS_R | MEM_ACCESS_W) -#define MEM_ACCESS_RX (MEM_ACCESS_R | MEM_ACCESS_X) -#define MEM_ACCESS_WX (MEM_ACCESS_W | MEM_ACCESS_X) -#define MEM_ACCESS_GLA_VALID (1 << 3) -#define MEM_ACCESS_FAULT_WITH_GLA (1 << 4) -#define MEM_ACCESS_FAULT_IN_GPT (1 << 5) +#define MEM_ACCESS_R (1 << 0) +#define MEM_ACCESS_W (1 << 1) +#define MEM_ACCESS_X (1 << 2) +#define MEM_ACCESS_RWX (MEM_ACCESS_R | MEM_ACCESS_W | MEM_ACCESS_X) +#define MEM_ACCESS_RW (MEM_ACCESS_R | MEM_ACCESS_W) +#define MEM_ACCESS_RX (MEM_ACCESS_R | MEM_ACCESS_X) +#define MEM_ACCESS_WX (MEM_ACCESS_W | MEM_ACCESS_X) +#define MEM_ACCESS_GLA_VALID (1 << 3) +#define MEM_ACCESS_FAULT_WITH_GLA (1 << 4) +#define MEM_ACCESS_FAULT_IN_GPT (1 << 5) struct vm_event_mem_access { uint64_t gfn; @@ -203,8 +236,15 @@ struct vm_event_write_ctrlreg { uint64_t old_value; }; +struct vm_event_singlestep { + uint64_t gfn; +}; + struct vm_event_debug { uint64_t gfn; + uint32_t insn_length; + uint8_t type; /* HVMOP_TRAP_* */ + uint8_t _pad[3]; }; struct vm_event_mov_to_msr { @@ -212,6 +252,13 @@ struct vm_event_mov_to_msr { uint64_t value; }; +struct vm_event_cpuid { + uint32_t insn_length; + uint32_t leaf; + uint32_t subleaf; + uint32_t _pad; +}; + #define MEM_PAGING_DROP_PAGE (1 << 0) #define MEM_PAGING_EVICT_FAIL (1 << 1) @@ -233,6 +280,10 @@ struct vm_event_emul_read_data { uint8_t data[sizeof(struct vm_event_regs_x86) - sizeof(uint32_t)]; }; +struct vm_event_emul_insn_data { + uint8_t data[16]; /* Has to be completely filled */ +}; + typedef struct vm_event_st { uint32_t version; /* VM_EVENT_INTERFACE_VERSION */ uint32_t flags; /* VM_EVENT_FLAG_* */ @@ -247,16 +298,22 @@ typedef struct vm_event_st { struct vm_event_mem_access mem_access; struct vm_event_write_ctrlreg write_ctrlreg; struct vm_event_mov_to_msr mov_to_msr; + struct vm_event_singlestep singlestep; struct vm_event_debug software_breakpoint; - struct vm_event_debug singlestep; + struct vm_event_debug debug_exception; + struct vm_event_cpuid cpuid; } u; union { union { struct vm_event_regs_x86 x86; + struct vm_event_regs_arm arm; } regs; - struct vm_event_emul_read_data emul_read_data; + union { + struct vm_event_emul_read_data read; + struct vm_event_emul_insn_data insn; + } emul; } data; } vm_event_request_t, vm_event_response_t; diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/xen-compat.h --- a/include/xen/interface/xen-compat.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/xen-compat.h Mon Jan 09 12:00:57 2017 +0100 @@ -27,7 +27,7 @@ #ifndef __XEN_PUBLIC_XEN_COMPAT_H__ #define __XEN_PUBLIC_XEN_COMPAT_H__ -#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040700 +#define __XEN_LATEST_INTERFACE_VERSION__ 0x00040800 #if defined(__XEN__) || defined(__XEN_TOOLS__) /* Xen is built with matching headers and implements the latest interface. */ diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/xen.h --- a/include/xen/interface/xen.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/xen.h Mon Jan 09 12:00:57 2017 +0100 @@ -55,17 +55,22 @@ DEFINE_XEN_GUEST_HANDLE(uint64_t); DEFINE_XEN_GUEST_HANDLE(xen_pfn_t); DEFINE_XEN_GUEST_HANDLE(xen_ulong_t); -/* Turn a plain number into a C unsigned (long) constant. */ +/* Turn a plain number into a C unsigned (long (long)) constant. */ #define __xen_mk_uint(x) x ## U #define __xen_mk_ulong(x) x ## UL +#ifndef __xen_mk_ullong +# define __xen_mk_ullong(x) x ## ULL +#endif #define xen_mk_uint(x) __xen_mk_uint(x) #define xen_mk_ulong(x) __xen_mk_ulong(x) +#define xen_mk_ullong(x) __xen_mk_ullong(x) #else /* In assembly code we cannot use C numeric constant suffixes. */ -#define xen_mk_uint(x) x -#define xen_mk_ulong(x) x +#define xen_mk_uint(x) x +#define xen_mk_ulong(x) x +#define xen_mk_ullong(x) x #endif @@ -512,6 +517,13 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t); #define VMASST_TYPE_architectural_iopl 4 /* + * All guests: activate update indicator in vcpu_runstate_info + * Enable setting the XEN_RUNSTATE_UPDATE flag in guest memory mapped + * vcpu_runstate_info during updates of the runstate information. + */ +#define VMASST_TYPE_runstate_update_flag 5 + +/* * x86/64 guests: strictly hide M2P from user mode. * This allows the guest to control respective hypervisor behavior: * - when not set, L4 tables get created with the respective slot blank, @@ -815,52 +827,6 @@ struct start_info { }; typedef struct start_info start_info_t; -/* - * Start of day structure passed to PVH guests in %ebx. - * - * NOTE: nothing will be loaded at physical address 0, so a 0 value in any - * of the address fields should be treated as not present. - * - * 0 +----------------+ - * | magic | Contains the magic value XEN_HVM_START_MAGIC_VALUE - * | | ("xEn3" with the 0x80 bit of the "E" set). - * 4 +----------------+ - * | version | Version of this structure. Current version is 0. New - * | | versions are guaranteed to be backwards-compatible. - * 8 +----------------+ - * | flags | SIF_xxx flags. - * 12 +----------------+ - * | nr_modules | Number of modules passed to the kernel. - * 16 +----------------+ - * | modlist_paddr | Physical address of an array of modules - * | | (layout of the structure below). - * 24 +----------------+ - * | cmdline_paddr | Physical address of the command line, - * | | a zero-terminated ASCII string. - * 32 +----------------+ - * | rsdp_paddr | Physical address of the RSDP ACPI data structure. - * 40 +----------------+ - * - * The layout of each entry in the module structure is the following: - * - * 0 +----------------+ - * | paddr | Physical address of the module. - * 8 +----------------+ - * | size | Size of the module in bytes. - * 16 +----------------+ - * | cmdline_paddr | Physical address of the command line, - * | | a zero-terminated ASCII string. - * 24 +----------------+ - * | reserved | - * 32 +----------------+ - * - * The address and sizes are always a 64bit little endian unsigned integer. - * - * NB: Xen on x86 will always try to place all the data below the 4GiB - * boundary. - */ -#define XEN_HVM_START_MAGIC_VALUE 0x336ec578 - /* New console union for dom0 introduced in 0x00030203. */ #if __XEN_INTERFACE_VERSION__ < 0x00030203 #define console_mfn console.domU.mfn diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/xenoprof.h --- a/include/xen/interface/xenoprof.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/xenoprof.h Mon Jan 09 12:00:57 2017 +0100 @@ -68,7 +68,7 @@ struct event_log { }; /* PC value that indicates a special code */ -#define XENOPROF_ESCAPE_CODE (~0ULL) +#define XENOPROF_ESCAPE_CODE (~xen_mk_ullong(0)) /* Transient events for the xenoprof->oprofile cpu buf */ #define XENOPROF_TRACE_BEGIN 1 diff -r 85a408a07bcc -r 99ae48f6bfa8 include/xen/interface/xsm/flask_op.h --- a/include/xen/interface/xsm/flask_op.h Mon Jan 09 11:56:00 2017 +0100 +++ b/include/xen/interface/xsm/flask_op.h Mon Jan 09 12:00:57 2017 +0100 @@ -70,6 +70,7 @@ struct xen_flask_transition { uint32_t newsid; }; +#if __XEN_INTERFACE_VERSION__ < 0x00040800 struct xen_flask_userlist { /* IN: starting SID for list */ uint32_t start_sid; @@ -83,6 +84,7 @@ struct xen_flask_userlist { XEN_GUEST_HANDLE(uint32) sids; } u; }; +#endif struct xen_flask_boolean { /* IN/OUT: numeric identifier for boolean [GET/SET] @@ -167,7 +169,7 @@ struct xen_flask_op { #define FLASK_ACCESS 6 #define FLASK_CREATE 7 #define FLASK_RELABEL 8 -#define FLASK_USER 9 +#define FLASK_USER 9 /* No longer implemented */ #define FLASK_POLICYVERS 10 #define FLASK_GETBOOL 11 #define FLASK_SETBOOL 12 @@ -193,7 +195,9 @@ struct xen_flask_op { struct xen_flask_access access; /* FLASK_CREATE, FLASK_RELABEL, FLASK_MEMBER */ struct xen_flask_transition transition; +#if __XEN_INTERFACE_VERSION__ < 0x00040800 struct xen_flask_userlist userlist; +#endif /* FLASK_GETBOOL, FLASK_SETBOOL */ struct xen_flask_boolean boolean; struct xen_flask_setavc_threshold setavc_threshold; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |