📄 domctl.h
字号:
/****************************************************************************** * domctl.h * * Domain management operations. For use by node control stack. * * 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) 2002-2003, B Dragovic * Copyright (c) 2002-2006, K Fraser */#ifndef __XEN_PUBLIC_DOMCTL_H__#define __XEN_PUBLIC_DOMCTL_H__#if !defined(__XEN__) && !defined(__XEN_TOOLS__)#error "domctl operations are intended for use by node control tools only"#endif#include "xen.h"#define XEN_DOMCTL_INTERFACE_VERSION 0x00000005struct xenctl_cpumap { XEN_GUEST_HANDLE_64(uint8) bitmap; uint32_t nr_cpus;};/* * NB. xen_domctl.domain is an IN/OUT parameter for this operation. * If it is specified as zero, an id is auto-allocated and returned. */#define XEN_DOMCTL_createdomain 1struct xen_domctl_createdomain { /* IN parameters */ uint32_t ssidref; xen_domain_handle_t handle; /* Is this an HVM guest (as opposed to a PV guest)? */#define _XEN_DOMCTL_CDF_hvm_guest 0#define XEN_DOMCTL_CDF_hvm_guest (1U<<_XEN_DOMCTL_CDF_hvm_guest) uint32_t flags;};typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t);#define XEN_DOMCTL_destroydomain 2#define XEN_DOMCTL_pausedomain 3#define XEN_DOMCTL_unpausedomain 4#define XEN_DOMCTL_resumedomain 27#define XEN_DOMCTL_getdomaininfo 5struct xen_domctl_getdomaininfo { /* OUT variables. */ domid_t domain; /* Also echoed in domctl.domain */ /* Domain is scheduled to die. */#define _XEN_DOMINF_dying 0#define XEN_DOMINF_dying (1U<<_XEN_DOMINF_dying) /* Domain is an HVM guest (as opposed to a PV guest). */#define _XEN_DOMINF_hvm_guest 1#define XEN_DOMINF_hvm_guest (1U<<_XEN_DOMINF_hvm_guest) /* The guest OS has shut down. */#define _XEN_DOMINF_shutdown 2#define XEN_DOMINF_shutdown (1U<<_XEN_DOMINF_shutdown) /* Currently paused by control software. */#define _XEN_DOMINF_paused 3#define XEN_DOMINF_paused (1U<<_XEN_DOMINF_paused) /* Currently blocked pending an event. */#define _XEN_DOMINF_blocked 4#define XEN_DOMINF_blocked (1U<<_XEN_DOMINF_blocked) /* Domain is currently running. */#define _XEN_DOMINF_running 5#define XEN_DOMINF_running (1U<<_XEN_DOMINF_running) /* Being debugged. */#define _XEN_DOMINF_debugged 6#define XEN_DOMINF_debugged (1U<<_XEN_DOMINF_debugged) /* CPU to which this domain is bound. */#define XEN_DOMINF_cpumask 255#define XEN_DOMINF_cpushift 8 /* XEN_DOMINF_shutdown guest-supplied code. */#define XEN_DOMINF_shutdownmask 255#define XEN_DOMINF_shutdownshift 16 uint32_t flags; /* XEN_DOMINF_* */ uint64_aligned_t tot_pages; uint64_aligned_t max_pages; uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */ uint64_aligned_t cpu_time; uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */ uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */ uint32_t ssidref; xen_domain_handle_t handle;};typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);#define XEN_DOMCTL_getmemlist 6struct xen_domctl_getmemlist { /* IN variables. */ /* Max entries to write to output buffer. */ uint64_aligned_t max_pfns; /* Start index in guest's page list. */ uint64_aligned_t start_pfn; XEN_GUEST_HANDLE_64(uint64) buffer; /* OUT variables. */ uint64_aligned_t num_pfns;};typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t);#define XEN_DOMCTL_getpageframeinfo 7#define XEN_DOMCTL_PFINFO_LTAB_SHIFT 28#define XEN_DOMCTL_PFINFO_NOTAB (0x0U<<28)#define XEN_DOMCTL_PFINFO_L1TAB (0x1U<<28)#define XEN_DOMCTL_PFINFO_L2TAB (0x2U<<28)#define XEN_DOMCTL_PFINFO_L3TAB (0x3U<<28)#define XEN_DOMCTL_PFINFO_L4TAB (0x4U<<28)#define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28)#define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31)#define XEN_DOMCTL_PFINFO_XTAB (0xfU<<28) /* invalid page */#define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28)struct xen_domctl_getpageframeinfo { /* IN variables. */ uint64_aligned_t gmfn; /* GMFN to query */ /* OUT variables. */ /* Is the page PINNED to a type? */ uint32_t type; /* see above type defs */};typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t);#define XEN_DOMCTL_getpageframeinfo2 8struct xen_domctl_getpageframeinfo2 { /* IN variables. */ uint64_aligned_t num; /* IN/OUT variables. */ XEN_GUEST_HANDLE_64(uint32) array;};typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t);/* * Control shadow pagetables operation */#define XEN_DOMCTL_shadow_op 10/* Disable shadow mode. */#define XEN_DOMCTL_SHADOW_OP_OFF 0/* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */#define XEN_DOMCTL_SHADOW_OP_ENABLE 32/* Log-dirty bitmap operations. */ /* Return the bitmap and clean internal copy for next round. */#define XEN_DOMCTL_SHADOW_OP_CLEAN 11 /* Return the bitmap but do not modify internal copy. */#define XEN_DOMCTL_SHADOW_OP_PEEK 12/* Memory allocation accessors. */#define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30#define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31/* Legacy enable operations. */ /* Equiv. to ENABLE with no mode flags. */#define XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1 /* Equiv. to ENABLE with mode flag ENABLE_LOG_DIRTY. */#define XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2 /* Equiv. to ENABLE with mode flags ENABLE_REFCOUNT and ENABLE_TRANSLATE. */#define XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3/* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */ /* * Shadow pagetables are refcounted: guest does not use explicit mmu * operations nor write-protect its pagetables. */#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1) /* * Log pages in a bitmap as they are dirtied. * Used for live relocation to determine which pages must be re-sent. */#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2) /* * Automatically translate GPFNs into MFNs. */#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3) /* * Xen does not steal virtual address space from the guest. * Requires HVM support. */#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)struct xen_domctl_shadow_op_stats { uint32_t fault_count; uint32_t dirty_count;};typedef struct xen_domctl_shadow_op_stats xen_domctl_shadow_op_stats_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_stats_t);struct xen_domctl_shadow_op { /* IN variables. */ uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */ /* OP_ENABLE */ uint32_t mode; /* XEN_DOMCTL_SHADOW_ENABLE_* */ /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */ uint32_t mb; /* Shadow memory allocation in MB */ /* OP_PEEK / OP_CLEAN */ XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */ struct xen_domctl_shadow_op_stats stats;};typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t);#define XEN_DOMCTL_max_mem 11struct xen_domctl_max_mem { /* IN variables. */ uint64_aligned_t max_memkb;};typedef struct xen_domctl_max_mem xen_domctl_max_mem_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t);#define XEN_DOMCTL_setvcpucontext 12#define XEN_DOMCTL_getvcpucontext 13struct xen_domctl_vcpucontext { uint32_t vcpu; /* IN */ XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */};typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t);#define XEN_DOMCTL_getvcpuinfo 14struct xen_domctl_getvcpuinfo { /* IN variables. */ uint32_t vcpu; /* OUT variables. */ uint8_t online; /* currently online (not hotplugged)? */ uint8_t blocked; /* blocked waiting for an event? */ uint8_t running; /* currently scheduled on its CPU? */ uint64_aligned_t cpu_time; /* total cpu time consumed (ns) */ uint32_t cpu; /* current mapping */};typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t);/* Get/set which physical cpus a vcpu can execute on. */#define XEN_DOMCTL_setvcpuaffinity 9#define XEN_DOMCTL_getvcpuaffinity 25struct xen_domctl_vcpuaffinity { uint32_t vcpu; /* IN */ struct xenctl_cpumap cpumap; /* IN/OUT */};typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t);#define XEN_DOMCTL_max_vcpus 15struct xen_domctl_max_vcpus { uint32_t max; /* maximum number of vcpus */};typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t;DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t);#define XEN_DOMCTL_scheduler_op 16/* Scheduler types. */#define XEN_SCHEDULER_SEDF 4#define XEN_SCHEDULER_CREDIT 5/* Set or get info? */#define XEN_DOMCTL_SCHEDOP_putinfo 0#define XEN_DOMCTL_SCHEDOP_getinfo 1struct xen_domctl_scheduler_op { uint32_t sched_id; /* XEN_SCHEDULER_* */ uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */ union { struct xen_domctl_sched_sedf { uint64_aligned_t period; uint64_aligned_t slice; uint64_aligned_t latency; uint32_t extratime;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -