ia64/xen-unstable

changeset 2791:6c9e794798b9

bitkeeper revision 1.1159.143.1 (41851ce0SeaLauOV4DJoO_UxeSbw1Q)

more doc updates...
author smh22@tempest.cl.cam.ac.uk
date Sun Oct 31 17:12:00 2004 +0000 (2004-10-31)
parents b914ff7d73b5
children 021cfd38c6f9
files docs/src/interface.tex
line diff
     1.1 --- a/docs/src/interface.tex	Sun Oct 31 09:56:36 2004 +0000
     1.2 +++ b/docs/src/interface.tex	Sun Oct 31 17:12:00 2004 +0000
     1.3 @@ -111,12 +111,16 @@ direct access to CR3 and is not permitte
     1.4  EFLAGS. Guest OSes use \emph{hypercalls} to invoke operations in Xen; 
     1.5  these are analagous to system calls but occur from ring 1 to ring 0. 
     1.6  
     1.7 +A list of all hypercalls is given in Appendix~\ref{a:hypercalls}. 
     1.8 +
     1.9 +
    1.10  
    1.11  \section{Exceptions}
    1.12  
    1.13 -The IDT is virtualised by submitting to Xen a table of trap handlers.
    1.14 -Most trap handlers are identical to native x86 handlers, although the
    1.15 -page-fault handler is somewhat different.
    1.16 +A virtual IDT is provided --- a domain can submit a table of trap
    1.17 +handlers to Xen via the {\tt set\_trap\_table()} hypercall.  Most trap
    1.18 +handlers are identical to native x86 handlers, although the page-fault
    1.19 +handler is somewhat different.
    1.20  
    1.21  
    1.22  \section{Interrupts and events}
    1.23 @@ -186,7 +190,8 @@ currently executing domain every 10ms.  
    1.24  timer event whenever a domain is scheduled; this allows the guest OS
    1.25  to adjust for the time that has passed while it has been inactive.  In
    1.26  addition, Xen allows each domain to request that they receive a timer
    1.27 -event sent at a specified system time.  Guest OSes may use this timer to
    1.28 +event sent at a specified system time by using the {\tt
    1.29 +set\_timer\_op()} hypercall.  Guest OSes may use this timer to
    1.30  implement timeout values when they block.
    1.31  
    1.32  
    1.33 @@ -199,7 +204,8 @@ hardware.
    1.34  
    1.35  \section{Memory Allocation}
    1.36  
    1.37 -Xen resides within a small fixed portion of physical memory and
    1.38 +
    1.39 +Xen resides within a small fixed portion of physical memory; it also
    1.40  reserves the top 64MB of every virtual address space. The remaining
    1.41  physical memory is available for allocation to domains at a page
    1.42  granularity.  Xen tracks the ownership and use of each page, which
    1.43 @@ -210,6 +216,52 @@ A guest OS may run a `balloon driver' to
    1.44  current memory allocation up to its limit. 
    1.45  
    1.46  
    1.47 +%% XXX SMH: I use machine and physical in the next section (which 
    1.48 +%% is kinda required for consistency with code); wonder if this 
    1.49 +%% section should use same terms? 
    1.50 +%%
    1.51 +%% Probably. 
    1.52 +%%
    1.53 +%% Merging this and below section at some point prob makes sense. 
    1.54 +
    1.55 +\section{Pseudo-Physical Memory}
    1.56 +
    1.57 +Since physical memory is allocated and freed on a page granularity,
    1.58 +there is no gaurantee that a domain will receive a contiguous stretch
    1.59 +of physical memory. However most operating systems do not have good
    1.60 +support for operating in a fragmented physical address space. To aid
    1.61 +porting such operating systems to run on top of Xen, we make a
    1.62 +distinction between \emph{machine memory} and \emph{pseduo-physical
    1.63 +memory}.
    1.64 +
    1.65 +Put simply, machine memory refers to the entire amount of memory
    1.66 +installed in the machine, including that reserved by Xen, in use by
    1.67 +various domains, or currently unallocated. We consider machine memory
    1.68 +to comprise a set of 4K \emph{machine page frames} numbered
    1.69 +consecutively starting from 0. Machine frame numbers mean the same
    1.70 +within Xen or any domain.
    1.71 +
    1.72 +Pseudo-physical memory, on the other hand, is a per-domain
    1.73 +abstraction. It allows a guest operating system to consider its memory
    1.74 +allocation to consist of a contiguous range of physical page frames
    1.75 +starting at physical frame 0, despite the fact that the underlying
    1.76 +machine page frames may be sparsely allocated and in any order.
    1.77 +
    1.78 +To achieve this, Xen maintains a globally readable {\it
    1.79 +machine-to-physical} table which records the mapping from machine page
    1.80 +frames to pseudo-physical ones. In addition, each domain is supplied
    1.81 +with a {\it physical-to-machine} table which performs the inverse
    1.82 +mapping. Clearly the machine-to-physical table has size proportional
    1.83 +to the amount of RAM installed in the machine, while each
    1.84 +physical-to-machine table has size proportional to the memory
    1.85 +allocation of the given domain.
    1.86 +
    1.87 +Architecture dependent code in guest operating systems can then use
    1.88 +the two tables to provide the abstraction of pseudo-physical
    1.89 +memory. In general, only certain specialized parts of the operating
    1.90 +system (such as page table management) needs to understand the
    1.91 +difference between machine and pseudo-physical addresses.
    1.92 +
    1.93  \section{Page Table Updates}
    1.94  
    1.95  In the default mode of operation, Xen enforces read-only access to
    1.96 @@ -280,43 +332,21 @@ Note also that, after registering the GD
    1.97  may be overwritten by Xen.
    1.98  \end{quote}
    1.99  
   1.100 -
   1.101 -XXX SMH: HERE 
   1.102 +The LDT is updated via the generic MMU update mechanism (i.e., via 
   1.103 +the {\tt mmu\_update()} hypercall. 
   1.104  
   1.105 -
   1.106 -\section{Pseudo-Physical Memory}
   1.107 +\section{Start of Day} 
   1.108  
   1.109 -The usual problem of external fragmentation means that a domain is
   1.110 -unlikely to receive a contiguous stretch of physical memory.  However,
   1.111 -most guest operating systems do not have built-in support for
   1.112 -operating in a fragmented physical address space e.g. Linux has to
   1.113 -have a one-to-one mapping for its physical memory.  There a notion of
   1.114 -{\it pseudo physical memory} is introdouced.  Xen maintains a {\it
   1.115 -real physical} to {\it pseudo physical} mapping which can be consulted
   1.116 -by every domain.  Additionally, at its start of day, a domain is
   1.117 -supplied a {\it pseudo physical} to {\it real physical} mapping which
   1.118 -it needs to keep updated itself.  From that moment onwards {\it pseudo
   1.119 -physical} addresses are used instead of discontiguous {\it real
   1.120 -physical} addresses.  Thus, the rest of the guest OS code has an
   1.121 -impression of operating in a contiguous address space.  Guest OS page
   1.122 -tables contain real physical addresses.  Mapping {\it pseudo physical}
   1.123 -to {\it real physical} addresses is needed on page table updates and
   1.124 -also on remapping memory regions with the guest OS.
   1.125 +The start-of-day environment for guest operating systems is rather
   1.126 +different to that provided by the underlying hardware. In particular,
   1.127 +the processor is already executing in protected mode with paging
   1.128 +enabled.
   1.129  
   1.130 -\section{start of day xxx}
   1.131 -
   1.132 -
   1.133 -Start-of-day issues such as building initial page tables
   1.134 -for a domain, loading its kernel image and so on are done by the {\it
   1.135 -domain builder} running in user-space in {\it domain0}.  Paging to
   1.136 -disk and swapping is handled by the guest operating systems
   1.137 -themselves, if they need it.
   1.138 -
   1.139 -The amount of memory required by the domain is passed to the hypervisor
   1.140 -as one of the parameters for new domain initialization by the domain builder.
   1.141 -
   1.142 -
   1.143 -
   1.144 +{\it Domain-0} is created and booted by Xen itself. For all subsequent
   1.145 +donains, the analogue of the boot-loader is the {\it domain builder},
   1.146 +user-space software running in {\it domain-0}. The domain builder 
   1.147 +is responsible for building the initial page tables for a domain  
   1.148 +and loading its kernel image at the appropriate virtual address. 
   1.149  
   1.150  
   1.151  
   1.152 @@ -458,11 +488,265 @@ of the CPU for each domain.  Round-robin
   1.153  Xen's internal scheduler API.
   1.154  
   1.155  More information on the characteristics and use of these schedulers is
   1.156 -available in { \tt Sched-HOWTO.txt }.
   1.157 +available in {\tt Sched-HOWTO.txt}.
   1.158 +
   1.159 +
   1.160 +
   1.161 +
   1.162 +\appendix
   1.163 +
   1.164 +%\newcommand{\hypercall}[1]{\vspace{5mm}{\large\sf #1}}
   1.165 +
   1.166 +
   1.167 +
   1.168 +
   1.169 +
   1.170 +\newcommand{\hypercall}[1]{\vspace{2mm}{\sf #1}}
   1.171 +
   1.172 +
   1.173 +
   1.174 +\hypercall{physdev\_op(void *physdev\_op)}
   1.175 +
   1.176 +
   1.177 +\hypercall{vm\_assist(unsigned int cmd, unsigned int type)}
   1.178 +
   1.179 +
   1.180 +
   1.181 +
   1.182 +\chapter{Xen Hypercalls}
   1.183 +\label{a:hypercalls}
   1.184 +
   1.185 +Hypercalls represent the procedural interface to Xen; this appendix 
   1.186 +categorizes and describes the current set of hypercalls. 
   1.187 +
   1.188 +\section{Invoking Hypercalls} 
   1.189 +
   1.190 +\hypercall{multicall(void *call\_list, int nr\_calls)}
   1.191 +
   1.192 +Execute a series of hypervisor calls
   1.193 +
   1.194 +
   1.195 +
   1.196 +
   1.197 +\section{Virtual CPU Setup} 
   1.198 +
   1.199 +\hypercall{set\_callbacks(unsigned long event\_selector, unsigned long
   1.200 +  event\_address, unsigned long failsafe\_selector, unsigned long
   1.201 +  failsafe\_address) }
   1.202 +
   1.203 +Register OS event processing routine.  In
   1.204 +Linux both the event\_selector and failsafe\_selector are the
   1.205 +kernel's CS.  The value event\_address specifies the address for an
   1.206 +interrupt handler dispatch routine and failsafe\_address specifies a
   1.207 +handler for application faults.
   1.208 +
   1.209 +\hypercall{set\_trap\_table(trap\_info\_t *table)} 
   1.210 +
   1.211 +Install trap handler table.
   1.212 +
   1.213 +
   1.214 +\hypercall{set\_fast\_trap(int idx)}
   1.215 +
   1.216 + install traps to allow guest OS to bypass hypervisor
   1.217 +
   1.218 +
   1.219 +
   1.220 +
   1.221 +\section{Scheduling} 
   1.222 +
   1.223 +
   1.224 +\hypercall{stack\_switch(unsigned long ss, unsigned long esp)} 
   1.225 +
   1.226 +Request context switch from hypervisor.
   1.227 +
   1.228 +
   1.229 +\hypercall{fpu\_taskswitch(void)} 
   1.230 +
   1.231 +Notify hypervisor that fpu registers needed to be save on context switch.
   1.232 +
   1.233 +
   1.234 +\hypercall{sched\_op(unsigned long op)} 
   1.235 +
   1.236 +Request scheduling operation from hypervisor. The options are: {\it
   1.237 +yield}, {\it block}, and {\it shutdown}.  {\it yield} keeps the
   1.238 +calling domain run-able but may cause a reschedule if other domains
   1.239 +are run-able.  {\it block} removes the calling domain from the run
   1.240 +queue and the domains sleeps until an event is delivered to it.  {\it
   1.241 +shutdown} is used to end the domain's execution and allows to specify
   1.242 +whether the domain should reboot, halt or suspend..
   1.243 +
   1.244 +\hypercall{set\_timer\_op(uint64\_t timeout)} 
   1.245 +
   1.246 +Request a timer event to be sent at the specified system time.
   1.247 +
   1.248 +
   1.249 +\section{Page Table Management} 
   1.250 +
   1.251 +\hypercall{mmu\_update(mmu\_update\_t *req, int count, int *success\_count)} 
   1.252 +
   1.253 +Update the page table for the domain. Updates can be batched.
   1.254 +success\_count will be updated to report the number of successfull
   1.255 +updates.  The update types are:
   1.256 +
   1.257 +{\it MMU\_NORMAL\_PT\_UPDATE}:
   1.258 +
   1.259 +{\it MMU\_MACHPHYS\_UPDATE}:
   1.260 +
   1.261 +{\it MMU\_EXTENDED\_COMMAND}:
   1.262 +
   1.263 +
   1.264 +\hypercall{update\_va\_mapping(unsigned long page\_nr, unsigned long val, unsigned long flags)}
   1.265 +
   1.266 +
   1.267 +\hypercall{update\_va\_mapping\_otherdomain(unsigned long page\_nr,
   1.268 +unsigned long val, unsigned long flags, uint16\_t domid)}
   1.269 +
   1.270 +
   1.271 +\section{Segmentation Support}
   1.272 +
   1.273 +
   1.274 +\hypercall{set\_gdt(unsigned long *frame\_list, int entries)} 
   1.275 +
   1.276 +Set the global descriptor table - virtualization for lgdt.
   1.277 +
   1.278 +
   1.279 +
   1.280 +\hypercall{update\_descriptor(unsigned long ma, unsigned long word1, unsigned long word2)} 
   1.281 +
   1.282 +
   1.283 +
   1.284 +
   1.285 +\section{Inter-Domain Communication}
   1.286 +
   1.287 +
   1.288 +\hypercall{event\_channel\_op(void *op)} 
   1.289 +
   1.290 +Inter-domain event-channel management.
   1.291 +
   1.292 +
   1.293 +\hypercall{grant\_table\_op(unsigned int cmd, void *uop, unsigned int count)}
   1.294 +
   1.295 +
   1.296 +
   1.297 +\section{Physical Memory Management}
   1.298 +
   1.299 +\hypercall{dom\_mem\_op(unsigned int op, unsigned long *extent\_list,
   1.300 +unsigned long nr\_extents, unsigned int extent\_order)}
   1.301 +
   1.302 +Increase or decrease memory reservations for guest OS
   1.303 +
   1.304 +
   1.305 +
   1.306 +
   1.307 +
   1.308 +
   1.309 +\section{Administrative Operations}
   1.310 +
   1.311 +
   1.312 +\hypercall{dom0\_op(dom0\_op\_t *op)} 
   1.313 +
   1.314 +Administrative domain operations for domain management. The options are:
   1.315 +
   1.316 +{\it DOM0\_CREATEDOMAIN}: create new domain, specifying the name and memory usage
   1.317 +in kilobytes.
   1.318 +
   1.319 +{\it DOM0\_CREATEDOMAIN}: create domain
   1.320 +
   1.321 +{\it DOM0\_PAUSEDOMAIN}: mark domain as unschedulable
   1.322 +
   1.323 +{\it DOM0\_UNPAUSEDOMAIN}: mark domain as schedulable
   1.324 +
   1.325 +{\it DOM0\_DESTROYDOMAIN}: deallocate resources associated with the domain
   1.326 +
   1.327 +{\it DOM0\_GETMEMLIST}: get list of pages used by the domain
   1.328 +
   1.329 +{\it DOM0\_SCHEDCTL}:
   1.330 +
   1.331 +{\it DOM0\_ADJUSTDOM}: adjust scheduling priorities for domain
   1.332 +
   1.333 +{\it DOM0\_BUILDDOMAIN}: do final guest OS setup for domain
   1.334 +
   1.335 +{\it DOM0\_GETDOMAINFO}: get statistics about the domain
   1.336 +
   1.337 +{\it DOM0\_GETPAGEFRAMEINFO}:
   1.338 +
   1.339 +{\it DOM0\_IOPL}: set IO privilege level
   1.340 +
   1.341 +{\it DOM0\_MSR}:
   1.342 +
   1.343 +{\it DOM0\_DEBUG}: interactively call pervasive debugger
   1.344 +
   1.345 +{\it DOM0\_SETTIME}: set system time
   1.346 +
   1.347 +{\it DOM0\_READCONSOLE}: read console content from hypervisor buffer ring
   1.348 +
   1.349 +{\it DOM0\_PINCPUDOMAIN}: pin domain to a particular CPU
   1.350 +
   1.351 +{\it DOM0\_GETTBUFS}: get information about the size and location of
   1.352 +                      the trace buffers (only on trace-buffer enabled builds)
   1.353 +
   1.354 +{\it DOM0\_PHYSINFO}: get information about the host machine
   1.355 +
   1.356 +{\it DOM0\_PCIDEV\_ACCESS}: modify PCI device access permissions
   1.357 +
   1.358 +{\it DOM0\_SCHED\_ID}: get the ID of the current Xen scheduler
   1.359 +
   1.360 +{\it DOM0\_SHADOW\_CONTROL}:
   1.361 +
   1.362 +{\it DOM0\_SETDOMAINNAME}: set the name of a domain
   1.363 +
   1.364 +{\it DOM0\_SETDOMAININITIALMEM}: set initial memory allocation of a domain
   1.365 +
   1.366 +{\it DOM0\_SETDOMAINMAXMEM}: set maximum memory allocation of a domain
   1.367 +
   1.368 +{\it DOM0\_GETPAGEFRAMEINFO2}:
   1.369 +
   1.370 +{\it DOM0\_SETDOMAINVMASSIST}: set domain VM assist options
   1.371 +
   1.372 +
   1.373 +
   1.374 +
   1.375 +\section{Miscellaneous Hypercalls} 
   1.376 +
   1.377 +
   1.378 +\hypercall{console\_io(int cmd, int count, char *str)}
   1.379 +
   1.380 +Interact with the console, operations are:
   1.381 +
   1.382 +{\it CONSOLEIO\_write}: Output count characters from buffer str.
   1.383 +
   1.384 +{\it CONSOLEIO\_read}: Input at most count characters into buffer str.
   1.385 +
   1.386 +
   1.387 +
   1.388 +\hypercall{set\_debugreg(int reg, unsigned long value)}
   1.389 +
   1.390 +set debug register reg to value
   1.391 +
   1.392 +
   1.393 +\hypercall{get\_debugreg(int reg)}
   1.394 +
   1.395 + get the debug register reg
   1.396 +
   1.397 +
   1.398 +\hypercall{xen\_version(int cmd)}
   1.399 +
   1.400 +Request Xen version number.
   1.401 +
   1.402 +
   1.403 +
   1.404 +
   1.405 +
   1.406 +
   1.407 +%% 
   1.408 +%% XXX SMH: not really sure how useful below is -- if it's still 
   1.409 +%% actually true, might be useful for someone wanting to write a 
   1.410 +%% new scheduler... not clear how many of them there are...
   1.411 +%%
   1.412  
   1.413  \begin{comment}
   1.414  
   1.415 -\section{Scheduling API}
   1.416 +\chapter{Scheduling API}  
   1.417  
   1.418  The scheduling API is used by both the schedulers described above and should
   1.419  also be used by any new schedulers.  It provides a generic interface and also
   1.420 @@ -731,6 +1015,20 @@ This method should dump any private sett
   1.421  This function is called with interrupts disabled and the {\tt schedule\_lock}
   1.422  for the task's CPU held.
   1.423  
   1.424 +\end{comment} 
   1.425 +
   1.426 +
   1.427 +
   1.428 +
   1.429 +%%
   1.430 +%% XXX SMH: we probably should have something in here on debugging 
   1.431 +%% etc; this is a kinda developers manual and many devs seem to 
   1.432 +%% like debugging support :^) 
   1.433 +%% Possibly sanitize below, else wait until new xendbg stuff is in 
   1.434 +%% (and/or kip's stuff?) and write about that instead? 
   1.435 +%%
   1.436 +
   1.437 +\begin{comment} 
   1.438  
   1.439  \chapter{Debugging}
   1.440  
   1.441 @@ -795,196 +1093,9 @@ trace points, there is an example format
   1.442  For more information, see the manual pages for {\tt xentrace}, {\tt
   1.443  xentrace\_format} and {\tt xentrace\_cpusplit}.
   1.444  
   1.445 -
   1.446 -\appendix
   1.447 -
   1.448 -\newcommand{\hypercall}[1]{\vspace{5mm}{\large\sf #1}}
   1.449 -
   1.450 -\chapter{Xen Hypercalls}
   1.451 -
   1.452 -\hypercall{ set\_trap\_table(trap\_info\_t *table)} 
   1.453 -
   1.454 -Install trap handler table.
   1.455 -
   1.456 -
   1.457 -\hypercall{ mmu\_update(mmu\_update\_t *req, int count, int *success\_count)} 
   1.458 -
   1.459 -Update the page table for the domain. Updates can be batched.
   1.460 -success\_count will be updated to report the number of successfull
   1.461 -updates.  The update types are:
   1.462 -
   1.463 -{\it MMU\_NORMAL\_PT\_UPDATE}:
   1.464 -
   1.465 -{\it MMU\_MACHPHYS\_UPDATE}:
   1.466 -
   1.467 -{\it MMU\_EXTENDED\_COMMAND}:
   1.468 -
   1.469 -
   1.470 -\hypercall{ set\_gdt(unsigned long *frame\_list, int entries)} 
   1.471 -
   1.472 -Set the global descriptor table - virtualization for lgdt.
   1.473 -
   1.474 -
   1.475 -\hypercall{ stack\_switch(unsigned long ss, unsigned long esp)} 
   1.476 -
   1.477 -Request context switch from hypervisor.
   1.478 -
   1.479 -
   1.480 -\hypercall{ set\_callbacks(unsigned long event\_selector, unsigned long event\_address,
   1.481 -                        unsigned long failsafe\_selector, unsigned
   1.482 - long failsafe\_address) }
   1.483 -
   1.484 -Register OS event processing routine.  In
   1.485 -Linux both the event\_selector and failsafe\_selector are the
   1.486 -kernel's CS.  The value event\_address specifies the address for an
   1.487 -interrupt handler dispatch routine and failsafe\_address specifies a
   1.488 -handler for application faults.
   1.489 -
   1.490 -
   1.491 -\hypercall{ fpu\_taskswitch(void)} 
   1.492 -
   1.493 -Notify hypervisor that fpu registers needed to be save on context switch.
   1.494 -
   1.495 -
   1.496 -\hypercall{ sched\_op(unsigned long op)} 
   1.497 -
   1.498 -Request scheduling operation from hypervisor. The options are: {\it
   1.499 -yield}, {\it block}, and {\it shutdown}.  {\it yield} keeps the
   1.500 -calling domain run-able but may cause a reschedule if other domains
   1.501 -are run-able.  {\it block} removes the calling domain from the run
   1.502 -queue and the domains sleeps until an event is delivered to it.  {\it
   1.503 -shutdown} is used to end the domain's execution and allows to specify
   1.504 -whether the domain should reboot, halt or suspend..
   1.505 +\end{comment} 
   1.506  
   1.507  
   1.508 -\hypercall{ dom0\_op(dom0\_op\_t *op)} 
   1.509 -
   1.510 -Administrative domain operations for domain management. The options are:
   1.511 -
   1.512 -{\it DOM0\_CREATEDOMAIN}: create new domain, specifying the name and memory usage
   1.513 -in kilobytes.
   1.514 -
   1.515 -{\it DOM0\_CREATEDOMAIN}: create domain
   1.516 -
   1.517 -{\it DOM0\_PAUSEDOMAIN}: mark domain as unschedulable
   1.518 -
   1.519 -{\it DOM0\_UNPAUSEDOMAIN}: mark domain as schedulable
   1.520 -
   1.521 -{\it DOM0\_DESTROYDOMAIN}: deallocate resources associated with the domain
   1.522 -
   1.523 -{\it DOM0\_GETMEMLIST}: get list of pages used by the domain
   1.524 -
   1.525 -{\it DOM0\_SCHEDCTL}:
   1.526 -
   1.527 -{\it DOM0\_ADJUSTDOM}: adjust scheduling priorities for domain
   1.528 -
   1.529 -{\it DOM0\_BUILDDOMAIN}: do final guest OS setup for domain
   1.530 -
   1.531 -{\it DOM0\_GETDOMAINFO}: get statistics about the domain
   1.532 -
   1.533 -{\it DOM0\_GETPAGEFRAMEINFO}:
   1.534 -
   1.535 -{\it DOM0\_IOPL}: set IO privilege level
   1.536 -
   1.537 -{\it DOM0\_MSR}:
   1.538 -
   1.539 -{\it DOM0\_DEBUG}: interactively call pervasive debugger
   1.540 -
   1.541 -{\it DOM0\_SETTIME}: set system time
   1.542 -
   1.543 -{\it DOM0\_READCONSOLE}: read console content from hypervisor buffer ring
   1.544 -
   1.545 -{\it DOM0\_PINCPUDOMAIN}: pin domain to a particular CPU
   1.546 -
   1.547 -{\it DOM0\_GETTBUFS}: get information about the size and location of
   1.548 -                      the trace buffers (only on trace-buffer enabled builds)
   1.549 -
   1.550 -{\it DOM0\_PHYSINFO}: get information about the host machine
   1.551 -
   1.552 -{\it DOM0\_PCIDEV\_ACCESS}: modify PCI device access permissions
   1.553 -
   1.554 -{\it DOM0\_SCHED\_ID}: get the ID of the current Xen scheduler
   1.555 -
   1.556 -{\it DOM0\_SHADOW\_CONTROL}:
   1.557 -
   1.558 -{\it DOM0\_SETDOMAINNAME}: set the name of a domain
   1.559 -
   1.560 -{\it DOM0\_SETDOMAININITIALMEM}: set initial memory allocation of a domain
   1.561 -
   1.562 -{\it DOM0\_SETDOMAINMAXMEM}: set maximum memory allocation of a domain
   1.563 -
   1.564 -{\it DOM0\_GETPAGEFRAMEINFO2}:
   1.565 -
   1.566 -{\it DOM0\_SETDOMAINVMASSIST}: set domain VM assist options
   1.567 -
   1.568 -
   1.569 -\hypercall{ set\_debugreg(int reg, unsigned long value)}
   1.570 -
   1.571 -set debug register reg to value
   1.572  
   1.573  
   1.574 -\hypercall{ get\_debugreg(int reg)}
   1.575 -
   1.576 - get the debug register reg
   1.577 -
   1.578 -
   1.579 -\hypercall{ update\_descriptor(unsigned long ma, unsigned long word1, unsigned long word2)} 
   1.580 -
   1.581 -
   1.582 -\hypercall{ set\_fast\_trap(int idx)}
   1.583 -
   1.584 - install traps to allow guest OS to bypass hypervisor
   1.585 -
   1.586 -
   1.587 -\hypercall{ dom\_mem\_op(unsigned int op, unsigned long *extent\_list, unsigned long nr\_extents, unsigned int extent\_order)}
   1.588 -
   1.589 -Increase or decrease memory reservations for guest OS
   1.590 -
   1.591 -
   1.592 -\hypercall{ multicall(void *call\_list, int nr\_calls)}
   1.593 -
   1.594 -Execute a series of hypervisor calls
   1.595 -
   1.596 -
   1.597 -\hypercall{ update\_va\_mapping(unsigned long page\_nr, unsigned long val, unsigned long flags)}
   1.598 -
   1.599 -
   1.600 -\hypercall{ set\_timer\_op(uint64\_t timeout)} 
   1.601 -
   1.602 -Request a timer event to be sent at the specified system time.
   1.603 -
   1.604 -
   1.605 -\hypercall{ event\_channel\_op(void *op)} 
   1.606 -
   1.607 -Inter-domain event-channel management.
   1.608 -
   1.609 -
   1.610 -\hypercall{ xen\_version(int cmd)}
   1.611 -
   1.612 -Request Xen version number.
   1.613 -
   1.614 -
   1.615 -\hypercall{ console\_io(int cmd, int count, char *str)}
   1.616 -
   1.617 -Interact with the console, operations are:
   1.618 -
   1.619 -{\it CONSOLEIO\_write}: Output count characters from buffer str.
   1.620 -
   1.621 -{\it CONSOLEIO\_read}: Input at most count characters into buffer str.
   1.622 -
   1.623 -
   1.624 -\hypercall{ physdev\_op(void *physdev\_op)}
   1.625 -
   1.626 -
   1.627 -\hypercall{ grant\_table\_op(unsigned int cmd, void *uop, unsigned int count)}
   1.628 -
   1.629 -
   1.630 -\hypercall{ vm\_assist(unsigned int cmd, unsigned int type)}
   1.631 -
   1.632 -
   1.633 -\hypercall{ update\_va\_mapping\_otherdomain(unsigned long page\_nr, unsigned long val, unsigned long flags, uint16\_t domid)}
   1.634 -
   1.635 -
   1.636 -\end{comment}
   1.637 -
   1.638  \end{document}