WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [POWERPC] Merge with xen-unstable.hg.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [POWERPC] Merge with xen-unstable.hg.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 13 Dec 2006 17:34:59 +0000
Delivery-date: Wed, 13 Dec 2006 09:40:33 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Hollis Blanchard <hollisb@xxxxxxxxxx>
# Node ID 749c399d73dfe7a7cb5f659dcfed0df79df98e7d
# Parent  a510c94ceaa35e9dcb2c2a47e8e875ccde49b7d9
# Parent  37141c3a3d39956ad5faf2d4e2a91276eaca557b
[POWERPC] Merge with xen-unstable.hg.
Signed-off-by: Hollis Blanchard <hollisb@xxxxxxxxxx>
---
 patches/linux-2.6.16.32/blktap-aio-16_03_06.patch                              
          |  271 
 patches/linux-2.6.16.32/device_bind.patch                                      
          |   14 
 patches/linux-2.6.16.32/fix-hz-suspend.patch                                   
          |   25 
 patches/linux-2.6.16.32/fix-ide-cd-pio-mode.patch                              
          |   13 
 patches/linux-2.6.16.32/i386-mach-io-check-nmi.patch                           
          |   35 
 patches/linux-2.6.16.32/ipv6-no-autoconf.patch                                 
          |   18 
 patches/linux-2.6.16.32/kasprintf.patch                                        
          |   57 
 patches/linux-2.6.16.32/net-csum.patch                                         
          |   57 
 patches/linux-2.6.16.32/net-gso-0-base.patch                                   
          | 2501 ---
 patches/linux-2.6.16.32/net-gso-1-check-dodgy.patch                            
          |   22 
 patches/linux-2.6.16.32/net-gso-2-checksum-fix.patch                           
          |  400 
 patches/linux-2.6.16.32/net-gso-3-fix-errorcheck.patch                         
          |   13 
 patches/linux-2.6.16.32/net-gso-4-kill-warnon.patch                            
          |   16 
 patches/linux-2.6.16.32/net-gso-5-rcv-mss.patch                                
          |   11 
 patches/linux-2.6.16.32/pci-mmconfig-fix-from-2.6.17.patch                     
          |  252 
 patches/linux-2.6.16.32/pmd-shared.patch                                       
          |  100 
 patches/linux-2.6.16.32/rcu_needs_cpu.patch                                    
          |   33 
 patches/linux-2.6.16.32/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch     
          |   26 
 patches/linux-2.6.16.32/series                                                 
          |   27 
 patches/linux-2.6.16.32/smp-alts.patch                                         
          |  540 
 patches/linux-2.6.16.32/tpm_plugin_2.6.17.patch                                
          | 1380 -
 patches/linux-2.6.16.32/vsnprintf.patch                                        
          |  178 
 patches/linux-2.6.16.32/x86-elfnote-as-preprocessor-macro.patch                
          |   27 
 patches/linux-2.6.16.32/x86-increase-interrupt-vector-range.patch              
          |   73 
 
patches/linux-2.6.16.32/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
    |  138 
 
patches/linux-2.6.16.32/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
 |   72 
 patches/linux-2.6.16.32/xen-hotplug.patch                                      
          |   10 
 patches/linux-2.6.16.32/xenoprof-generic.patch                                 
          |  615 
 tools/firmware/hvmloader/acpi_ssdt_tpm.asl                                     
          |   29 
 tools/firmware/hvmloader/acpi_ssdt_tpm.h                                       
          |   25 
 tools/firmware/hvmloader/acpi_utils.c                                          
          |  318 
 tools/firmware/hvmloader/acpi_utils.h                                          
          |   36 
 xen/arch/x86/hvm/vmx/io.c                                                      
          |  202 
 xen/include/asm-ia64/linux/asm-generic/pgtable-nopud.h                         
          |   61 
 .hgignore                                                                      
          |    2 
 Config.mk                                                                      
          |    3 
 buildconfigs/linux-defconfig_xen0_x86_32                                       
          |    1 
 buildconfigs/linux-defconfig_xen0_x86_64                                       
          |    1 
 buildconfigs/linux-defconfig_xen_ia64                                          
          |    2 
 buildconfigs/linux-defconfig_xen_x86_32                                        
          |    4 
 buildconfigs/linux-defconfig_xen_x86_64                                        
          |    3 
 buildconfigs/mk.linux-2.6-xen                                                  
          |    2 
 docs/src/user.tex                                                              
          |    5 
 docs/xen-api/presentation.tex                                                  
          |    5 
 docs/xen-api/todo.tex                                                          
          |    2 
 docs/xen-api/wire-protocol.tex                                                 
          |   66 
 docs/xen-api/xenapi-datamodel-graph.dot                                        
          |    3 
 docs/xen-api/xenapi-datamodel.tex                                              
          | 2239 +-
 extras/mini-os/events.c                                                        
          |   27 
 extras/mini-os/include/events.h                                                
          |    1 
 linux-2.6-xen-sparse/arch/i386/Kconfig                                         
          |    2 
 linux-2.6-xen-sparse/arch/i386/kernel/crash.c                                  
          |  187 
 linux-2.6-xen-sparse/arch/i386/kernel/machine_kexec.c                          
          |  129 
 linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c                              
          |   27 
 linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c                                
          |   23 
 linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c                               
          |   30 
 linux-2.6-xen-sparse/arch/ia64/Kconfig                                         
          |    3 
 linux-2.6-xen-sparse/arch/ia64/kernel/entry.S                                  
          |    4 
 linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c                                
          |   10 
 linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c                               
          |   68 
 linux-2.6-xen-sparse/arch/ia64/kernel/perfmon.c                                
          | 6941 ++++++++
 linux-2.6-xen-sparse/arch/ia64/kernel/setup.c                                  
          |   10 
 linux-2.6-xen-sparse/arch/ia64/oprofile/Makefile                               
          |   14 
 linux-2.6-xen-sparse/arch/ia64/oprofile/init.c                                 
          |   52 
 linux-2.6-xen-sparse/arch/ia64/oprofile/oprofile_perfmon.h                     
          |   30 
 linux-2.6-xen-sparse/arch/ia64/oprofile/perfmon.c                              
          |  119 
 linux-2.6-xen-sparse/arch/ia64/oprofile/xenoprof.c                             
          |  142 
 linux-2.6-xen-sparse/arch/ia64/xen/Makefile                                    
          |    2 
 linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c                                
          |   64 
 linux-2.6-xen-sparse/arch/ia64/xen/mem.c                                       
          |   76 
 linux-2.6-xen-sparse/arch/ia64/xen/xcom_hcall.c                                
          |   62 
 linux-2.6-xen-sparse/arch/ia64/xen/xcom_mini.c                                 
          |   98 
 linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c                              
          |   13 
 linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S                                  
          |   41 
 linux-2.6-xen-sparse/arch/x86_64/Kconfig                                       
          |    2 
 linux-2.6-xen-sparse/arch/x86_64/kernel/crash.c                                
          |  190 
 linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c                             
          |    6 
 linux-2.6-xen-sparse/arch/x86_64/kernel/machine_kexec.c                        
          |  279 
 linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c                            
          |   23 
 linux-2.6-xen-sparse/drivers/xen/Kconfig                                       
          |   23 
 linux-2.6-xen-sparse/drivers/xen/Makefile                                      
          |    2 
 linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c                           
          |    3 
 linux-2.6-xen-sparse/drivers/xen/char/mem.c                                    
          |    4 
 linux-2.6-xen-sparse/drivers/xen/console/console.c                             
          |   92 
 linux-2.6-xen-sparse/drivers/xen/core/Makefile                                 
          |    1 
 linux-2.6-xen-sparse/drivers/xen/core/evtchn.c                                 
          |   62 
 linux-2.6-xen-sparse/drivers/xen/core/machine_kexec.c                          
          |  190 
 linux-2.6-xen-sparse/drivers/xen/core/smpboot.c                                
          |   72 
 linux-2.6-xen-sparse/drivers/xen/fbfront/Makefile                              
          |    2 
 linux-2.6-xen-sparse/drivers/xen/fbfront/xenfb.c                               
          |  682 
 linux-2.6-xen-sparse/drivers/xen/fbfront/xenkbd.c                              
          |  300 
 linux-2.6-xen-sparse/drivers/xen/netback/netback.c                             
          |   18 
 linux-2.6-xen-sparse/drivers/xen/xenbus/Makefile                               
          |   10 
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_client.c                        
          |    1 
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c                         
          |    2 
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h                         
          |    1 
 linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.h                         
          |    2 
 linux-2.6-xen-sparse/include/asm-i386/kexec.h                                  
          |  117 
 linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypercall.h                 
          |    8 
 linux-2.6-xen-sparse/include/asm-ia64/hypercall.h                              
          |   41 
 linux-2.6-xen-sparse/include/asm-ia64/io.h                                     
          |    7 
 linux-2.6-xen-sparse/include/asm-ia64/irq.h                                    
          |    4 
 linux-2.6-xen-sparse/include/asm-ia64/privop.h                                 
          |    1 
 linux-2.6-xen-sparse/include/asm-ia64/sal.h                                    
          |  904 +
 linux-2.6-xen-sparse/include/asm-ia64/uaccess.h                                
          |  421 
 linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h                             
          |    1 
 linux-2.6-xen-sparse/include/asm-ia64/xen/xcom_hcall.h                         
          |   10 
 linux-2.6-xen-sparse/include/asm-ia64/xenoprof.h                               
          |   48 
 linux-2.6-xen-sparse/include/asm-x86_64/kexec.h                                
          |  109 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/agp.h                     
          |   35 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hypercall.h               
          |    7 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/ptrace.h                  
          |    2 
 linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/xenoprof.h                
          |    1 
 linux-2.6-xen-sparse/include/linux/kexec.h                                     
          |  152 
 linux-2.6-xen-sparse/include/xen/xencons.h                                     
          |    2 
 linux-2.6-xen-sparse/kernel/kexec.c                                            
          | 1105 +
 linux-2.6-xen-sparse/mm/memory.c                                               
          |    1 
 patches/linux-2.6.16.33/blktap-aio-16_03_06.patch                              
          |  161 
 patches/linux-2.6.16.33/device_bind.patch                                      
          |    9 
 patches/linux-2.6.16.33/fix-hz-suspend.patch                                   
          |    9 
 patches/linux-2.6.16.33/fix-ide-cd-pio-mode.patch                              
          |   13 
 patches/linux-2.6.16.33/git-2a8a3d5b65e86ec1dfef7d268c64a909eab94af7.patch     
          |   50 
 patches/linux-2.6.16.33/git-2efe55a9cec8418f0e0cde3dc3787a42fddc4411.patch     
          |   75 
 patches/linux-2.6.16.33/git-3566561bfadffcb5dbc85d576be80c0dbf2cccc9.patch     
          |  197 
 patches/linux-2.6.16.33/git-4bfaaef01a1badb9e8ffb0c0a37cd2379008d21f.patch     
          |  156 
 patches/linux-2.6.16.33/git-dbaab49f92ff6ae6255762a948375e4036cbdbd2.patch     
          |   44 
 patches/linux-2.6.16.33/i386-mach-io-check-nmi.patch                           
          |   30 
 patches/linux-2.6.16.33/ipv6-no-autoconf.patch                                 
          |   16 
 patches/linux-2.6.16.33/kasprintf.patch                                        
          |   32 
 patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-move_segment_code-i386.patch    
          |  114 
 patches/linux-2.6.16.33/linux-2.6.19-rc1-kexec-move_segment_code-x86_64.patch  
          |  114 
 patches/linux-2.6.16.33/net-csum.patch                                         
          |   40 
 patches/linux-2.6.16.33/net-gso-0-base.patch                                   
          | 1970 ++
 patches/linux-2.6.16.33/net-gso-1-check-dodgy.patch                            
          |   16 
 patches/linux-2.6.16.33/net-gso-2-checksum-fix.patch                           
          |  311 
 patches/linux-2.6.16.33/net-gso-3-fix-errorcheck.patch                         
          |   13 
 patches/linux-2.6.16.33/net-gso-4-kill-warnon.patch                            
          |   26 
 patches/linux-2.6.16.33/net-gso-5-rcv-mss.patch                                
          |   11 
 patches/linux-2.6.16.33/pci-mmconfig-fix-from-2.6.17.patch                     
          |  143 
 patches/linux-2.6.16.33/pmd-shared.patch                                       
          |   57 
 patches/linux-2.6.16.33/rcu_needs_cpu.patch                                    
          |   18 
 patches/linux-2.6.16.33/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch     
          |   26 
 patches/linux-2.6.16.33/series                                                 
          |   34 
 patches/linux-2.6.16.33/smp-alts.patch                                         
          |  330 
 patches/linux-2.6.16.33/tpm_plugin_2.6.17.patch                                
          |  703 
 patches/linux-2.6.16.33/vsnprintf.patch                                        
          |  177 
 patches/linux-2.6.16.33/x86-elfnote-as-preprocessor-macro.patch                
          |   25 
 patches/linux-2.6.16.33/x86-increase-interrupt-vector-range.patch              
          |   73 
 
patches/linux-2.6.16.33/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
    |   39 
 
patches/linux-2.6.16.33/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch
 |   63 
 patches/linux-2.6.16.33/xen-hotplug.patch                                      
          |   10 
 patches/linux-2.6.16.33/xenoprof-generic.patch                                 
          |  294 
 tools/Makefile                                                                 
          |    2 
 tools/blktap/drivers/block-aio.c                                               
          |    8 
 tools/blktap/drivers/block-qcow.c                                              
          |    9 
 tools/blktap/drivers/tapdisk.c                                                 
          |    3 
 tools/check/Makefile                                                           
          |    6 
 tools/check/check_libvncserver                                                 
          |   27 
 tools/check/check_sdl                                                          
          |   27 
 tools/examples/init.d/xend                                                     
          |    5 
 tools/examples/init.d/xendomains                                               
          |    9 
 tools/examples/network-route                                                   
          |    8 
 tools/examples/xm-config.xml                                                   
          |   43 
 tools/firmware/hvmloader/Makefile                                              
          |   15 
 tools/firmware/hvmloader/acpi/Makefile                                         
          |   15 
 tools/firmware/hvmloader/acpi/acpi2_0.h                                        
          |   17 
 tools/firmware/hvmloader/acpi/build.c                                          
          |  121 
 tools/firmware/hvmloader/acpi/ssdt_tpm.asl                                     
          |   29 
 tools/firmware/hvmloader/acpi/ssdt_tpm.h                                       
          |   25 
 tools/firmware/hvmloader/hvmloader.c                                           
          |    9 
 tools/firmware/hvmloader/mp_tables.c                                           
          |    1 
 tools/firmware/hvmloader/util.h                                                
          |    3 
 tools/firmware/vmxassist/head.S                                                
          |    2 
 tools/firmware/vmxassist/setup.c                                               
          |   26 
 tools/firmware/vmxassist/trap.S                                                
          |   16 
 tools/firmware/vmxassist/util.c                                                
          |    6 
 tools/firmware/vmxassist/vm86.c                                                
          |  234 
 tools/firmware/vmxassist/vm86.h                                                
          |    2 
 tools/ioemu/Makefile.target                                                    
          |    4 
 tools/ioemu/hw/ide.c                                                           
          |   31 
 tools/ioemu/hw/pci.c                                                           
          |   24 
 tools/ioemu/hw/tpm_tis.c                                                       
          |   12 
 tools/ioemu/hw/usb-hid.c                                                       
          |   19 
 tools/ioemu/hw/usb-uhci.c                                                      
          |   44 
 tools/ioemu/keymaps.c                                                          
          |   63 
 tools/ioemu/patches/acpi-support                                               
          |   41 
 tools/ioemu/patches/acpi-timer-support                                         
          |    8 
 tools/ioemu/patches/domain-destroy                                             
          |   12 
 tools/ioemu/patches/domain-reset                                               
          |    8 
 tools/ioemu/patches/domain-timeoffset                                          
          |   12 
 tools/ioemu/patches/fix-interrupt-routing                                      
          |   55 
 tools/ioemu/patches/hypervisor-pit                                             
          |    8 
 tools/ioemu/patches/hypervisor-rtc                                             
          |   12 
 tools/ioemu/patches/ide-error-reporting                                        
          |   85 
 tools/ioemu/patches/ioemu-ia64                                                 
          |   72 
 tools/ioemu/patches/limit-fdc-sector-size-to-16K                               
          |   30 
 tools/ioemu/patches/ne2000-bounds-checks                                       
          |   79 
 tools/ioemu/patches/nodelay-serial-over-tcp                                    
          |   25 
 tools/ioemu/patches/qemu-bootorder                                             
          |   14 
 tools/ioemu/patches/qemu-daemonize                                             
          |    4 
 tools/ioemu/patches/qemu-dm                                                    
          |   20 
 tools/ioemu/patches/qemu-no-apic                                               
          |    6 
 tools/ioemu/patches/qemu-pci                                                   
          |   18 
 tools/ioemu/patches/qemu-serial-fixes                                          
          |   79 
 tools/ioemu/patches/qemu-target-i386-dm                                        
          |  149 
 tools/ioemu/patches/remove-pci-bridge-setup                                    
          |  287 
 tools/ioemu/patches/rtl8139-bound-chaining                                     
          |   31 
 tools/ioemu/patches/series                                                     
          |   16 
 tools/ioemu/patches/shared-vram                                                
          |   30 
 tools/ioemu/patches/tpm-tis-device                                             
          |   56 
 tools/ioemu/patches/usb-mouse-tablet-status-check                              
          |  124 
 tools/ioemu/patches/usb-uhci-buffer-size                                       
          |   23 
 tools/ioemu/patches/vnc-access-monitor-vt                                      
          |    4 
 tools/ioemu/patches/vnc-backoff-screen-scan                                    
          |   22 
 tools/ioemu/patches/vnc-display-find-unused                                    
          |   20 
 tools/ioemu/patches/vnc-fixes                                                  
          |   46 
 tools/ioemu/patches/vnc-japan-keymap                                           
          |   24 
 tools/ioemu/patches/vnc-listen-specific-interface                              
          |   18 
 tools/ioemu/patches/vnc-monitor-shift-key-processing                           
          |   41 
 tools/ioemu/patches/vnc-numpad-handling                                        
          |  126 
 tools/ioemu/patches/vnc-password                                               
          |   68 
 tools/ioemu/patches/vnc-protocol-fixes                                         
          |    8 
 tools/ioemu/patches/vnc-start-vncviewer                                        
          |   14 
 tools/ioemu/patches/vnc-title-domain-name                                      
          |    6 
 tools/ioemu/patches/xen-build                                                  
          |   18 
 tools/ioemu/patches/xen-mapcache                                               
          |  145 
 tools/ioemu/patches/xen-mm                                                     
          |   18 
 tools/ioemu/patches/xen-platform-device                                        
          |    9 
 tools/ioemu/patches/xen-support-buffered-ioreqs                                
          |   28 
 tools/ioemu/patches/xenstore-block-device-config                               
          |   40 
 tools/ioemu/patches/xenstore-device-info-functions                             
          |   32 
 tools/ioemu/patches/xenstore-write-vnc-port                                    
          |    8 
 tools/ioemu/target-i386-dm/cpu.h                                               
          |    3 
 tools/ioemu/target-i386-dm/exec-dm.c                                           
          |   17 
 tools/ioemu/vl.c                                                               
          |  188 
 tools/ioemu/vl.h                                                               
          |   27 
 tools/ioemu/vnc.c                                                              
          |   52 
 tools/ioemu/vnc_keysym.h                                                       
          |   14 
 tools/libxc/Makefile                                                           
          |    4 
 tools/libxc/ia64/xc_ia64_hvm_build.c                                           
          |  207 
 tools/libxc/ia64/xc_ia64_linux_restore.c                                       
          |   80 
 tools/libxc/ia64/xc_ia64_linux_save.c                                          
          |    6 
 tools/libxc/xc_core.c                                                          
          |    4 
 tools/libxc/xc_domain.c                                                        
          |   46 
 tools/libxc/xc_hvm_build.c                                                     
          |   16 
 tools/libxc/xc_linux.c                                                         
          |    9 
 tools/libxc/xc_linux_build.c                                                   
          |  215 
 tools/libxc/xc_load_elf.c                                                      
          |  103 
 tools/libxc/xc_private.c                                                       
          |   95 
 tools/libxc/xc_private.h                                                       
          |   20 
 tools/libxc/xc_solaris.c                                                       
          |    9 
 tools/libxc/xenctrl.h                                                          
          |   62 
 tools/libxen/Makefile                                                          
          |   47 
 tools/libxen/README                                                            
          |    5 
 tools/libxen/include/xen_console.h                                             
          |  207 
 tools/libxen/include/xen_console_decl.h                                        
          |   30 
 tools/libxen/include/xen_console_protocol.h                                    
          |   82 
 tools/libxen/include/xen_console_protocol_internal.h                           
          |   37 
 tools/libxen/include/xen_vm.h                                                  
          |    9 
 tools/libxen/src/xen_common.c                                                  
          |   26 
 tools/libxen/src/xen_console.c                                                 
          |  207 
 tools/libxen/src/xen_console_protocol.c                                        
          |   82 
 tools/libxen/src/xen_vm.c                                                      
          |   46 
 tools/misc/xend                                                                
          |    4 
 tools/pygrub/Makefile                                                          
          |    4 
 tools/pygrub/src/pygrub                                                        
          |    6 
 tools/python/scripts/xapi.domcfg.py                                            
          |    2 
 tools/python/scripts/xapi.py                                                   
          |   46 
 tools/python/xen/lowlevel/xc/xc.c                                              
          |  149 
 tools/python/xen/util/bugtool.py                                               
          |    5 
 tools/python/xen/util/mkdir.py                                                 
          |   44 
 tools/python/xen/util/xmlrpclib2.py                                            
          |   13 
 tools/python/xen/web/httpserver.py                                             
          |   44 
 tools/python/xen/web/unix.py                                                   
          |   12 
 tools/python/xen/xend/XendAPI.py                                               
          |  663 
 tools/python/xen/xend/XendAuthSessions.py                                      
          |    2 
 tools/python/xen/xend/XendBootloader.py                                        
          |   16 
 tools/python/xen/xend/XendCheckpoint.py                                        
          |    3 
 tools/python/xen/xend/XendConfig.py                                            
          | 1415 +
 tools/python/xen/xend/XendConstants.py                                         
          |    2 
 tools/python/xen/xend/XendDevices.py                                           
          |    4 
 tools/python/xen/xend/XendDomain.py                                            
          |   83 
 tools/python/xen/xend/XendDomainInfo.py                                        
          |  493 
 tools/python/xen/xend/XendLogging.py                                           
          |    5 
 tools/python/xen/xend/XendStorageRepository.py                                 
          |    9 
 tools/python/xen/xend/image.py                                                 
          |  228 
 tools/python/xen/xend/server/DevController.py                                  
          |   13 
 tools/python/xen/xend/server/SrvDaemon.py                                      
          |   33 
 tools/python/xen/xend/server/SrvDomain.py                                      
          |   13 
 tools/python/xen/xend/server/SrvDomainDir.py                                   
          |   42 
 tools/python/xen/xend/server/SrvServer.py                                      
          |  148 
 tools/python/xen/xend/server/XMLRPCServer.py                                   
          |   40 
 tools/python/xen/xend/server/blkif.py                                          
          |   23 
 tools/python/xen/xend/server/iopif.py                                          
          |    4 
 tools/python/xen/xend/server/irqif.py                                          
          |    2 
 tools/python/xen/xend/server/netif.py                                          
          |   28 
 tools/python/xen/xend/server/pciif.py                                          
          |   69 
 tools/python/xen/xend/server/pciquirk.py                                       
          |   43 
 tools/python/xen/xend/server/tests/test_controllers.py                         
          |    6 
 tools/python/xen/xend/server/tpmif.py                                          
          |   12 
 tools/python/xen/xend/server/vfbif.py                                          
          |   74 
 tools/python/xen/xend/xenstore/xstransact.py                                   
          |    3 
 tools/python/xen/xend/xenstore/xswatch.py                                      
          |   11 
 tools/python/xen/xm/XenAPI.py                                                  
          |  132 
 tools/python/xen/xm/create.py                                                  
          |   40 
 tools/python/xen/xm/main.py                                                    
          |  191 
 tools/python/xen/xm/migrate.py                                                 
          |    3 
 tools/python/xen/xm/new.py                                                     
          |   11 
 tools/python/xen/xm/shutdown.py                                                
          |    4 
 tools/tests/test_x86_emulator.c                                                
          |  108 
 tools/xenfb/Makefile                                                           
          |   35 
 tools/xenfb/sdlfb.c                                                            
          |  342 
 tools/xenfb/vncfb.c                                                            
          |  401 
 tools/xenfb/xenfb.c                                                            
          |  711 
 tools/xenfb/xenfb.h                                                            
          |   35 
 tools/xm-test/grouptest/xapi                                                   
          |    1 
 tools/xm-test/lib/XmTestLib/XenManagedDomain.py                                
          |  177 
 tools/xm-test/lib/XmTestLib/xapi.py                                            
          |   66 
 tools/xm-test/ramdisk/Makefile.am                                              
          |    8 
 tools/xm-test/tests/vtpm/09_vtpm-xapi.py                                       
          |   76 
 tools/xm-test/tests/vtpm/Makefile.am                                           
          |    3 
 xen/arch/ia64/Makefile                                                         
          |   16 
 xen/arch/ia64/Rules.mk                                                         
          |    3 
 xen/arch/ia64/asm-offsets.c                                                    
          |   34 
 xen/arch/ia64/linux-xen/Makefile                                               
          |    2 
 xen/arch/ia64/linux-xen/README.origin                                          
          |    8 
 xen/arch/ia64/linux-xen/mca.c                                                  
          |  369 
 xen/arch/ia64/linux-xen/mca_asm.S                                              
          |  152 
 xen/arch/ia64/linux-xen/perfmon.c                                              
          | 7798 ++++++++++
 xen/arch/ia64/linux-xen/perfmon_default_smpl.c                                 
          |  311 
 xen/arch/ia64/linux-xen/perfmon_generic.h                                      
          |   45 
 xen/arch/ia64/linux-xen/perfmon_itanium.h                                      
          |  115 
 xen/arch/ia64/linux-xen/perfmon_mckinley.h                                     
          |  187 
 xen/arch/ia64/linux-xen/perfmon_montecito.h                                    
          |  269 
 xen/arch/ia64/linux-xen/smpboot.c                                              
          |    2 
 xen/arch/ia64/linux/Makefile                                                   
          |    1 
 xen/arch/ia64/linux/README.origin                                              
          |    3 
 xen/arch/ia64/linux/carta_random.S                                             
          |   54 
 xen/arch/ia64/vmx/Makefile                                                     
          |    2 
 xen/arch/ia64/vmx/mmio.c                                                       
          |  305 
 xen/arch/ia64/vmx/optvfault.S                                                  
          |    9 
 xen/arch/ia64/vmx/viosapic.c                                                   
          |  339 
 xen/arch/ia64/vmx/vlsapic.c                                                    
          |  389 
 xen/arch/ia64/vmx/vmx_hypercall.c                                              
          |   98 
 xen/arch/ia64/vmx/vmx_init.c                                                   
          |   76 
 xen/arch/ia64/vmx/vmx_process.c                                                
          |   33 
 xen/arch/ia64/vmx/vmx_support.c                                                
          |    6 
 xen/arch/ia64/xen/Makefile                                                     
          |    4 
 xen/arch/ia64/xen/crash.c                                                      
          |   19 
 xen/arch/ia64/xen/dom0_ops.c                                                   
          |   26 
 xen/arch/ia64/xen/dom_fw.c                                                     
          |   23 
 xen/arch/ia64/xen/domain.c                                                     
          |   76 
 xen/arch/ia64/xen/faults.c                                                     
          |    4 
 xen/arch/ia64/xen/fw_emul.c                                                    
          |  252 
 xen/arch/ia64/xen/hypercall.c                                                  
          |   40 
 xen/arch/ia64/xen/machine_kexec.c                                              
          |   34 
 xen/arch/ia64/xen/mm.c                                                         
          |  279 
 xen/arch/ia64/xen/mm_init.c                                                    
          |    9 
 xen/arch/ia64/xen/oprofile/Makefile                                            
          |    1 
 xen/arch/ia64/xen/oprofile/perfmon.c                                           
          |  200 
 xen/arch/ia64/xen/oprofile/xenoprof.c                                          
          |   56 
 xen/arch/ia64/xen/vcpu.c                                                       
          |    2 
 xen/arch/ia64/xen/xenmem.c                                                     
          |   17 
 xen/arch/powerpc/Makefile                                                      
          |    2 
 xen/arch/powerpc/crash.c                                                       
          |   19 
 xen/arch/powerpc/machine_kexec.c                                               
          |   34 
 xen/arch/x86/Makefile                                                          
          |    2 
 xen/arch/x86/boot/x86_32.S                                                     
          |    9 
 xen/arch/x86/boot/x86_64.S                                                     
          |    9 
 xen/arch/x86/crash.c                                                           
          |  120 
 xen/arch/x86/domain.c                                                          
          |    4 
 xen/arch/x86/hvm/platform.c                                                    
          |   18 
 xen/arch/x86/hvm/svm/emulate.c                                                 
          |   15 
 xen/arch/x86/hvm/svm/svm.c                                                     
          |  232 
 xen/arch/x86/hvm/svm/vmcb.c                                                    
          |   22 
 xen/arch/x86/hvm/vlapic.c                                                      
          |   11 
 xen/arch/x86/hvm/vmx/Makefile                                                  
          |    2 
 xen/arch/x86/hvm/vmx/intr.c                                                    
          |  196 
 xen/arch/x86/hvm/vmx/vmx.c                                                     
          |  328 
 xen/arch/x86/machine_kexec.c                                                   
          |  105 
 xen/arch/x86/mm.c                                                              
          |  220 
 xen/arch/x86/mm/shadow/common.c                                                
          |  442 
 xen/arch/x86/mm/shadow/multi.c                                                 
          |   82 
 xen/arch/x86/mm/shadow/private.h                                               
          |   22 
 xen/arch/x86/oprofile/op_model_athlon.c                                        
          |    9 
 xen/arch/x86/setup.c                                                           
          |   75 
 xen/arch/x86/traps.c                                                           
          |   33 
 xen/arch/x86/x86_32/domain_page.c                                              
          |   36 
 xen/arch/x86/x86_32/entry.S                                                    
          |   10 
 xen/arch/x86/x86_32/mm.c                                                       
          |   35 
 xen/arch/x86/x86_64/entry.S                                                    
          |    8 
 xen/arch/x86/x86_64/mm.c                                                       
          |   31 
 xen/arch/x86/x86_emulate.c                                                     
          |  558 
 xen/common/Makefile                                                            
          |    1 
 xen/common/domain.c                                                            
          |    4 
 xen/common/domctl.c                                                            
          |    2 
 xen/common/kexec.c                                                             
          |  343 
 xen/common/memory.c                                                            
          |    4 
 xen/common/page_alloc.c                                                        
          |   86 
 xen/drivers/char/console.c                                                     
          |    3 
 xen/include/asm-ia64/config.h                                                  
          |   10 
 xen/include/asm-ia64/debugger.h                                                
          |    2 
 xen/include/asm-ia64/domain.h                                                  
          |    8 
 xen/include/asm-ia64/elf.h                                                     
          |   30 
 xen/include/asm-ia64/event.h                                                   
          |    2 
 xen/include/asm-ia64/grant_table.h                                             
          |   15 
 xen/include/asm-ia64/kexec.h                                                   
          |   25 
 xen/include/asm-ia64/linux-null/asm/signal.h                                   
          |    1 
 xen/include/asm-ia64/linux-null/linux/capability.h                             
          |    1 
 xen/include/asm-ia64/linux-null/linux/completion.h                             
          |    1 
 xen/include/asm-ia64/linux-null/linux/mount.h                                  
          |    1 
 xen/include/asm-ia64/linux-null/linux/pagemap.h                                
          |    1 
 xen/include/asm-ia64/linux-null/linux/poll.h                                   
          |    1 
 xen/include/asm-ia64/linux-null/linux/rcupdate.h                               
          |    1 
 xen/include/asm-ia64/linux-null/linux/sysctl.h                                 
          |    1 
 xen/include/asm-ia64/linux-null/linux/vfs.h                                    
          |    1 
 xen/include/asm-ia64/linux-null/linux/vmalloc.h                                
          |    1 
 xen/include/asm-ia64/linux-xen/asm-generic/README.origin                       
          |    8 
 xen/include/asm-ia64/linux-xen/asm-generic/pgtable-nopud.h                     
          |   69 
 xen/include/asm-ia64/linux-xen/asm/README.origin                               
          |    4 
 xen/include/asm-ia64/linux-xen/asm/mca_asm.h                                   
          |    4 
 xen/include/asm-ia64/linux-xen/asm/perfmon.h                                   
          |  287 
 xen/include/asm-ia64/linux-xen/asm/perfmon_default_smpl.h                      
          |   83 
 xen/include/asm-ia64/linux-xen/asm/pgalloc.h                                   
          |   27 
 xen/include/asm-ia64/linux-xen/asm/pgtable.h                                   
          |   13 
 xen/include/asm-ia64/linux-xen/asm/processor.h                                 
          |   10 
 xen/include/asm-ia64/linux-xen/linux/README.origin                             
          |    3 
 xen/include/asm-ia64/linux-xen/linux/interrupt.h                               
          |    6 
 xen/include/asm-ia64/linux-xen/linux/oprofile.h                                
          |  119 
 xen/include/asm-ia64/linux/asm-generic/README.origin                           
          |    1 
 xen/include/asm-ia64/mm.h                                                      
          |    4 
 xen/include/asm-ia64/regs.h                                                    
          |    1 
 xen/include/asm-ia64/softirq.h                                                 
          |    9 
 xen/include/asm-ia64/vcpu.h                                                    
          |    2 
 xen/include/asm-ia64/viosapic.h                                                
          |   95 
 xen/include/asm-ia64/vlsapic.h                                                 
          |   46 
 xen/include/asm-ia64/vmx.h                                                     
          |    1 
 xen/include/asm-ia64/vmx_platform.h                                            
          |   48 
 xen/include/asm-ia64/vmx_vpd.h                                                 
          |   13 
 xen/include/asm-ia64/xenmca.h                                                  
          |   34 
 xen/include/asm-ia64/xenoprof.h                                                
          |   64 
 xen/include/asm-powerpc/config.h                                               
          |    2 
 xen/include/asm-powerpc/elf.h                                                  
          |   30 
 xen/include/asm-powerpc/kexec.h                                                
          |   25 
 xen/include/asm-powerpc/softirq.h                                              
          |    6 
 xen/include/asm-x86/config.h                                                   
          |    2 
 xen/include/asm-x86/domain.h                                                   
          |   13 
 xen/include/asm-x86/elf.h                                                      
          |   24 
 xen/include/asm-x86/fixmap.h                                                   
          |    4 
 xen/include/asm-x86/guest_access.h                                             
          |   16 
 xen/include/asm-x86/hvm/hvm.h                                                  
          |   71 
 xen/include/asm-x86/hvm/svm/vmcb.h                                             
          |   50 
 xen/include/asm-x86/hvm/vlapic.h                                               
          |    1 
 xen/include/asm-x86/hvm/vmx/vmx.h                                              
          |    7 
 xen/include/asm-x86/hypercall.h                                                
          |    5 
 xen/include/asm-x86/kexec.h                                                    
          |   20 
 xen/include/asm-x86/page.h                                                     
          |   15 
 xen/include/asm-x86/shadow.h                                                   
          |    8 
 xen/include/asm-x86/softirq.h                                                  
          |    6 
 xen/include/asm-x86/x86_32/elf.h                                               
          |   72 
 xen/include/asm-x86/x86_32/kexec.h                                             
          |   40 
 xen/include/asm-x86/x86_32/page-2level.h                                       
          |    3 
 xen/include/asm-x86/x86_32/page-3level.h                                       
          |    7 
 xen/include/asm-x86/x86_32/page.h                                              
          |    2 
 xen/include/asm-x86/x86_64/elf.h                                               
          |   92 
 xen/include/asm-x86/x86_64/kexec.h                                             
          |   39 
 xen/include/asm-x86/x86_64/page.h                                              
          |    5 
 xen/include/asm-x86/x86_emulate.h                                              
          |  139 
 xen/include/public/arch-ia64.h                                                 
          |   34 
 xen/include/public/domctl.h                                                    
          |    2 
 xen/include/public/elfnote.h                                                   
          |   19 
 xen/include/public/io/fbif.h                                                   
          |  116 
 xen/include/public/io/kbdif.h                                                  
          |  108 
 xen/include/public/kexec.h                                                     
          |  137 
 xen/include/public/memory.h                                                    
          |   17 
 xen/include/public/physdev.h                                                   
          |    1 
 xen/include/public/xenoprof.h                                                  
          |    2 
 xen/include/xen/domain_page.h                                                  
          |    9 
 xen/include/xen/elf.h                                                          
          |   20 
 xen/include/xen/elfcore.h                                                      
          |  140 
 xen/include/xen/hypercall.h                                                    
          |    6 
 xen/include/xen/kexec.h                                                        
          |   45 
 xen/include/xen/mm.h                                                           
          |    5 
 xen/include/xen/multiboot.h                                                    
          |   35 
 xen/include/xen/softirq.h                                                      
          |    7 
 485 files changed, 43466 insertions(+), 13223 deletions(-)

diff -r a510c94ceaa3 -r 749c399d73df .hgignore
--- a/.hgignore Tue Dec 12 09:56:06 2006 -0600
+++ b/.hgignore Tue Dec 12 09:58:42 2006 -0600
@@ -158,6 +158,8 @@
 ^tools/xcutils/xc_restore$
 ^tools/xcutils/xc_save$
 ^tools/xcutils/readnotes$
+^tools/xenfb/sdlfb$
+^tools/xenfb/vncfb$
 ^tools/xenmon/xentrace_setmask$
 ^tools/xenmon/xenbaked$
 ^tools/xenstat/xentop/xentop$
diff -r a510c94ceaa3 -r 749c399d73df Config.mk
--- a/Config.mk Tue Dec 12 09:56:06 2006 -0600
+++ b/Config.mk Tue Dec 12 09:58:42 2006 -0600
@@ -69,7 +69,8 @@ ACM_DEFAULT_SECURITY_POLICY ?= ACM_NULL_
 
 # Optional components
 XENSTAT_XENTOP ?= y
-
 VTPM_TOOLS ?= n
+LIBXENAPI_BINDINGS ?= n
+XENFB_TOOLS ?= n
 
 -include $(XEN_ROOT)/.config
diff -r a510c94ceaa3 -r 749c399d73df buildconfigs/linux-defconfig_xen0_x86_32
--- a/buildconfigs/linux-defconfig_xen0_x86_32  Tue Dec 12 09:56:06 2006 -0600
+++ b/buildconfigs/linux-defconfig_xen0_x86_32  Tue Dec 12 09:58:42 2006 -0600
@@ -179,6 +179,7 @@ CONFIG_HZ_100=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
+CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
 CONFIG_PHYSICAL_START=0x100000
 
diff -r a510c94ceaa3 -r 749c399d73df buildconfigs/linux-defconfig_xen0_x86_64
--- a/buildconfigs/linux-defconfig_xen0_x86_64  Tue Dec 12 09:56:06 2006 -0600
+++ b/buildconfigs/linux-defconfig_xen0_x86_64  Tue Dec 12 09:58:42 2006 -0600
@@ -126,6 +126,7 @@ CONFIG_FLAT_NODE_MEM_MAP=y
 # CONFIG_SPARSEMEM_STATIC is not set
 CONFIG_SPLIT_PTLOCK_CPUS=4096
 CONFIG_SWIOTLB=y
+CONFIG_KEXEC=y
 # CONFIG_CRASH_DUMP is not set
 CONFIG_PHYSICAL_START=0x100000
 CONFIG_SECCOMP=y
diff -r a510c94ceaa3 -r 749c399d73df buildconfigs/linux-defconfig_xen_ia64
--- a/buildconfigs/linux-defconfig_xen_ia64     Tue Dec 12 09:56:06 2006 -0600
+++ b/buildconfigs/linux-defconfig_xen_ia64     Tue Dec 12 09:58:42 2006 -0600
@@ -1548,6 +1548,8 @@ CONFIG_XEN_PCIDEV_BACKEND_SLOT=y
 # CONFIG_XEN_TPMDEV_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
+CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
 # CONFIG_XEN_SCRUB_PAGES is not set
 CONFIG_XEN_DISABLE_SERIAL=y
 CONFIG_XEN_SYSFS=y
diff -r a510c94ceaa3 -r 749c399d73df buildconfigs/linux-defconfig_xen_x86_32
--- a/buildconfigs/linux-defconfig_xen_x86_32   Tue Dec 12 09:56:06 2006 -0600
+++ b/buildconfigs/linux-defconfig_xen_x86_32   Tue Dec 12 09:58:42 2006 -0600
@@ -184,6 +184,7 @@ CONFIG_REGPARM=y
 CONFIG_REGPARM=y
 CONFIG_SECCOMP=y
 CONFIG_HZ_100=y
+CONFIG_KEXEC=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
@@ -2776,6 +2777,7 @@ CONFIG_NTFS_FS=m
 #
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
+# CONFIG_PROC_VMCORE is not set
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
 # CONFIG_HUGETLB_PAGE is not set
@@ -3032,6 +3034,8 @@ CONFIG_XEN_NETDEV_LOOPBACK=y
 # CONFIG_XEN_TPMDEV_BACKEND is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
+CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
 CONFIG_XEN_SCRUB_PAGES=y
 CONFIG_XEN_DISABLE_SERIAL=y
 CONFIG_XEN_SYSFS=y
diff -r a510c94ceaa3 -r 749c399d73df buildconfigs/linux-defconfig_xen_x86_64
--- a/buildconfigs/linux-defconfig_xen_x86_64   Tue Dec 12 09:56:06 2006 -0600
+++ b/buildconfigs/linux-defconfig_xen_x86_64   Tue Dec 12 09:58:42 2006 -0600
@@ -139,6 +139,7 @@ CONFIG_PHYSICAL_START=0x100000
 CONFIG_PHYSICAL_START=0x100000
 CONFIG_SECCOMP=y
 CONFIG_HZ_100=y
+CONFIG_KEXEC=y
 # CONFIG_HZ_250 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=100
@@ -2865,6 +2866,8 @@ CONFIG_XEN_TPMDEV_BACKEND=m
 # CONFIG_XEN_TPMDEV_CLOSE_IF_VTPM_FAILS is not set
 CONFIG_XEN_BLKDEV_FRONTEND=y
 CONFIG_XEN_NETDEV_FRONTEND=y
+CONFIG_XEN_FRAMEBUFFER=y
+CONFIG_XEN_KEYBOARD=y
 CONFIG_XEN_SCRUB_PAGES=y
 CONFIG_XEN_DISABLE_SERIAL=y
 CONFIG_XEN_SYSFS=y
diff -r a510c94ceaa3 -r 749c399d73df buildconfigs/mk.linux-2.6-xen
--- a/buildconfigs/mk.linux-2.6-xen     Tue Dec 12 09:56:06 2006 -0600
+++ b/buildconfigs/mk.linux-2.6-xen     Tue Dec 12 09:58:42 2006 -0600
@@ -1,5 +1,5 @@ LINUX_SERIES = 2.6
 LINUX_SERIES = 2.6
-LINUX_VER    = 2.6.16.32
+LINUX_VER    = 2.6.16.33
 
 EXTRAVERSION ?= xen
 
diff -r a510c94ceaa3 -r 749c399d73df docs/src/user.tex
--- a/docs/src/user.tex Tue Dec 12 09:56:06 2006 -0600
+++ b/docs/src/user.tex Tue Dec 12 09:58:42 2006 -0600
@@ -3240,6 +3240,11 @@ editing \path{grub.conf}.
   enabled by the BIOS.
 \item [ apic=bigsmp,default,es7000,summit ] Specify NUMA platform.
   This can usually be probed automatically.
+\item [ dma\_bits=xxx ] Specify width of DMA
+  addresses in bits. Default is 30 bits (addresses up to 1GB are DMAable).
+\item [ dma\_emergency\_pool=xxx ] Specify lower bound on size of DMA
+  pool below which ordinary allocations will fail rather than fall
+  back to allocating from the DMA pool.
 \end{description}
 
 In addition, the following options may be specified on the Xen command
diff -r a510c94ceaa3 -r 749c399d73df docs/xen-api/presentation.tex
--- a/docs/xen-api/presentation.tex     Tue Dec 12 09:56:06 2006 -0600
+++ b/docs/xen-api/presentation.tex     Tue Dec 12 09:58:42 2006 -0600
@@ -131,9 +131,6 @@ of that class that has the specified {\t
 ``{\tt get\_by\_name\_label(name)}'' RPC that returns a set of objects of that
 class that have the specified {\tt label}.
 
-\item Each class has a ``{\tt to\_XML()}'' RPC that serialises the
-state of all fields as an XML string.
-
 \item Each class has a ``{\tt destroy(Ref x)}'' RPC that explicitly deletes
 the persistent object specified by {\tt x} from the system.  This is a
 non-cascading delete -- if the object being removed is referenced by another
@@ -144,6 +141,6 @@ object then the {\tt destroy} call will 
 \subsection{Additional RPCs}
 
 As well as the RPCs enumerated above, some classes have additional RPCs
-associated with them. For example, the {\tt VM} class have RPCs for cloning,
+associated with them. For example, the {\tt VM} class has RPCs for cloning,
 suspending, starting etc. Such additional RPCs are described explicitly
 in the API reference.
diff -r a510c94ceaa3 -r 749c399d73df docs/xen-api/todo.tex
--- a/docs/xen-api/todo.tex     Tue Dec 12 09:56:06 2006 -0600
+++ b/docs/xen-api/todo.tex     Tue Dec 12 09:58:42 2006 -0600
@@ -34,6 +34,8 @@ code, potential error description, but o
 
 \item Clarify behaviour of progress field on asyncrhonous request polling when
 that request fails.
+
+\item Clarify which calls have asynchronous counterparts by marking them as 
such in the reference. (Individual getters and setters are too small and quick 
to justify having async versions)
 
 \end{itemize}
 
diff -r a510c94ceaa3 -r 749c399d73df docs/xen-api/wire-protocol.tex
--- a/docs/xen-api/wire-protocol.tex    Tue Dec 12 09:56:06 2006 -0600
+++ b/docs/xen-api/wire-protocol.tex    Tue Dec 12 09:58:42 2006 -0600
@@ -21,9 +21,9 @@ In our API Reference we specify the sign
 In our API Reference we specify the signatures of API functions in the 
following
 style:
 \begin{verbatim}
-    (ref_vm Set)   Host.ListAllVMs()
-\end{verbatim}
-This specifies that the function with name {\tt Host.ListAllVMs} takes
+    (ref_vm Set)   VM.get_all()
+\end{verbatim}
+This specifies that the function with name {\tt VM.get\_all} takes
 no parameters and returns a Set of {\tt ref\_vm}s.
 These types are mapped onto XML-RPC types in a straight-forward manner:
 \begin{itemize}
@@ -105,8 +105,8 @@ the struct contains a second element nam
 the struct contains a second element named {\tt ErrorDescription}:
 \begin{itemize}
 \item The element of the struct named {\tt ErrorDescription} contains
-an array of string values. The first element of the array represents an error 
code;
-the remainder of the array represents error parameters relating to that code.
+an array of string values. The first element of the array is an XML-RPC 32-bit 
{\tt i4} and represents an error code;
+the remainder of the array are strings representing error parameters relating 
to that code.
 \end{itemize}
 
 For example, an XML-RPC return value from the {\tt Host.ListAllVMs} function 
above
@@ -161,19 +161,19 @@ A session can be terminated with the {\t
 
 \subsection{Synchronous and Asynchronous invocation}
 
-Each method call (apart from those on ``Session'' and ``Task'' objects)
+Each method call (apart from methods on ``Session'' and ``Task'' objects 
+and ``getters'' and ``setters'' derived from fields)
 can be made either synchronously or asynchronously.
 A synchronous RPC call blocks until the
 return value is received; the return value of a synchronous RPC call is
 exactly as specified in Section~\ref{synchronous-result}.
 
-Each of the methods specified in the API Reference is synchronous.
-However, although not listed explicitly in this document, each
-method call has an asynchronous analogue in the {\tt Async}
-namespace. For example, synchronous call {\tt VM.Install(...)}
+Only synchronous API calls are listed explicitly in this document. 
+All asynchronous versions are in the special {\tt Async} namespace.
+For example, synchronous call {\tt VM.clone(...)}
 (described in Chapter~\ref{api-reference})
 has an asynchronous counterpart, {\tt
-Async.VM.Install(...)}, that is non-blocking.
+Async.VM.clone(...)}, that is non-blocking.
 
 Instead of returning its result directly, an asynchronous RPC call
 returns a {\tt task-id}; this identifier is subsequently used
@@ -186,39 +186,14 @@ The {\tt task-id} is provided in the {\t
 The {\tt task-id} is provided in the {\tt Value} field if {\tt Status} is set 
to
 {\tt Success}.
 
-Two special RPC calls are provided to poll the status of
-asynchronous calls:
-\begin{verbatim}
-    Array<task_id>  Async.Task.GetAllTasks (session_id s)
-    task_status     Async.Task.GetStatus   (session_id s, task_id t)
-\end{verbatim}
-
-{\tt Async.Task.GetAllTasks} returns a set of the currently
-executing asynchronous tasks belong to the current user\footnote{
-%
-The current user is determined by the username that was provided
-to {\tt Session.Login}.
-%
-}.
-
-{\tt Async.Task.GetStatus} returns a {\tt task\_status} result.
-This is an XML-RPC struct with three elements:
-\begin{itemize}
-  \item The first element is named {\tt Progress} and contains
-an {\tt Integer} between 0 and 100 representing the estimated percentage of
-the task currently completed.
-  \item The second element is named {\tt ETA} and contains a {\tt DateTime} 
-representing the estimated time the task will be complete.
-  \item The third element is named {\tt Result}. If {\tt Progress}
-is not 100 then {\tt Result} contains the empty string. If {\tt Progress}
-{\em is\/} set to 100, then {\tt Result} contains the function's return
-result (as specified in Section~\ref{synchronous-result})\footnote{
-%
-Recall that this itself is a struct potentially containing status, errorcode,
-value fields etc.
-%
-}.
-\end{itemize}
+The RPC call
+\begin{verbatim}
+    (ref_task Set)   Task.get_all(session_id s)
+\end{verbatim} 
+returns a set of all task IDs known to the system. The status (including any
+returned result and error codes) of these tasks
+can then be queried by accessing the fields of the Task object in the usual 
way. 
+Note that, in order to get a consistent snapshot of a task's state, it is 
advisable to call the ``get\_record'' function.
 
 \section{Example interactive session}
 
@@ -267,7 +242,8 @@ Next, the user may acquire a list of all
 \begin{verbatim}
 >>> all_vms = xen.VM.do_list(session)['Value']
 >>> all_vms
-['b7b92d9e-d442-4710-92a5-ab039fd7d89b', 
'23e1e837-abbf-4675-b077-d4007989b0cc', '2045dbc0-0734-4eea-9cb2-b8218c6b5bf2', 
'3202ae18-a046-4c32-9fda-e32e9631866e']
+['b7b92d9e-d442-4710-92a5-ab039fd7d89b', 
'23e1e837-abbf-4675-b077-d4007989b0cc',
+  '2045dbc0-0734-4eea-9cb2-b8218c6b5bf2', 
'3202ae18-a046-4c32-9fda-e32e9631866e']
 \end{verbatim}
 
 Note the VM references are internally UUIDs. Once a reference to a VM has been 
acquired a lifecycle operation may be invoked:
diff -r a510c94ceaa3 -r 749c399d73df docs/xen-api/xenapi-datamodel-graph.dot
--- a/docs/xen-api/xenapi-datamodel-graph.dot   Tue Dec 12 09:56:06 2006 -0600
+++ b/docs/xen-api/xenapi-datamodel-graph.dot   Tue Dec 12 09:58:42 2006 -0600
@@ -1,5 +1,5 @@ digraph g{
 digraph g{
-node [ shape=box ]; session [ URL="session.html" ] task [ URL="task.html" ] VM 
[ URL="VM.html" ] host [ URL="host.html" ] host_cpu [ URL="host_cpu.html" ] 
network [ URL="network.html" ] VIF [ URL="VIF.html" ] PIF [ URL="PIF.html" ] SR 
[ URL="SR.html" ] VDI [ URL="VDI.html" ] VBD [ URL="VBD.html" ] VTPM [ 
URL="VTPM.html" ] user [ URL="user.html" ] debug [ URL="debug.html" ];
+node [ shape=box ]; session [ URL="session.html" ] task [ URL="task.html" ] VM 
[ URL="VM.html" ] host [ URL="host.html" ] host_cpu [ URL="host_cpu.html" ] 
network [ URL="network.html" ] VIF [ URL="VIF.html" ] PIF [ URL="PIF.html" ] SR 
[ URL="SR.html" ] VDI [ URL="VDI.html" ] VBD [ URL="VBD.html" ] VTPM [ 
URL="VTPM.html" ] console [ URL="console.html" ] user [ URL="user.html" ] debug 
[ URL="debug.html" ];
 session -> host [ label="this_host(1)" ]
 session -> user [ label="this_user(1)" ]
 host -> VM [ color="blue", arrowhead="crow", arrowtail="none" ]
@@ -14,4 +14,5 @@ VBD -> VM [ color="blue", arrowhead="non
 VBD -> VM [ color="blue", arrowhead="none", arrowtail="crow" ]
 VTPM -> VM [ label="backend(1)" ]
 VTPM -> VM [ color="blue", arrowhead="none", arrowtail="crow" ]
+console -> VM [ color="blue", arrowhead="none", arrowtail="crow" ]
 }
diff -r a510c94ceaa3 -r 749c399d73df docs/xen-api/xenapi-datamodel.tex
--- a/docs/xen-api/xenapi-datamodel.tex Tue Dec 12 09:56:06 2006 -0600
+++ b/docs/xen-api/xenapi-datamodel.tex Tue Dec 12 09:58:42 2006 -0600
@@ -23,7 +23,7 @@ Name & Description \\
 Name & Description \\
 \hline
 {\tt session} & A session \\
-{\tt task} & A longrunning asynchronous task \\
+{\tt task} & A long-running asynchronous task \\
 {\tt VM} & A virtual machine (or 'guest') \\
 {\tt host} & A physical host \\
 {\tt host\_cpu} & A physical CPU \\
@@ -34,6 +34,7 @@ Name & Description \\
 {\tt VDI} & A virtual disk image \\
 {\tt VBD} & A virtual block device \\
 {\tt VTPM} & A virtual TPM device \\
+{\tt console} & A console \\
 {\tt user} & A user of the system \\
 {\tt debug} & A basic class for testing \\
 \hline
@@ -54,6 +55,7 @@ PIF.network & network.PIFs & one-to-many
 PIF.network & network.PIFs & one-to-many\\
 SR.VDIs & VDI.SR & many-to-one\\
 VTPM.VM & VM.VTPMs & one-to-many\\
+console.VM & VM.consoles & one-to-many\\
 host.resident\_VMs & VM.resident\_on & many-to-one\\
 host.host\_CPUs & host\_cpu.host & many-to-one\\
 \hline
@@ -99,6 +101,17 @@ The following enumeration types are used
 
 \begin{longtable}{|ll|}
 \hline
+{\tt enum console\_protocol} & \\
+\hline
+\hspace{0.5cm}{\tt vt100} & VT100 terminal \\
+\hspace{0.5cm}{\tt rfb} & Remote FrameBuffer protocol (as used in VNC) \\
+\hspace{0.5cm}{\tt rdp} & Remote Desktop Protocol \\
+\hline
+\end{longtable}
+
+\vspace{1cm}
+\begin{longtable}{|ll|}
+\hline
 {\tt enum vdi\_type} & \\
 \hline
 \hspace{0.5cm}{\tt system} & a disk that may be replaced on upgrade \\
@@ -118,6 +131,17 @@ The following enumeration types are used
 \hspace{0.5cm}{\tt Suspended} & Suspended \\
 \hspace{0.5cm}{\tt ShuttingDown} & Shutting Down \\
 \hspace{0.5cm}{\tt Unknown} & Some other unknown state \\
+\hline
+\end{longtable}
+
+\vspace{1cm}
+\begin{longtable}{|ll|}
+\hline
+{\tt enum task\_status\_type} & \\
+\hline
+\hspace{0.5cm}{\tt pending} & task is in progress \\
+\hspace{0.5cm}{\tt success} & task was completed successfully \\
+\hspace{0.5cm}{\tt failure} & task has failed \\
 \hline
 \end{longtable}
 
@@ -242,6 +266,16 @@ The following enumeration types are used
 \vspace{1cm}
 \begin{longtable}{|ll|}
 \hline
+{\tt enum vbd\_type} & \\
+\hline
+\hspace{0.5cm}{\tt CD} & VBD will appear to guest as CD \\
+\hspace{0.5cm}{\tt Disk} & VBD will appear to guest as disk \\
+\hline
+\end{longtable}
+
+\vspace{1cm}
+\begin{longtable}{|ll|}
+\hline
 {\tt enum driver\_type} & \\
 \hline
 \hspace{0.5cm}{\tt ioemu} & use hardware emulation \\
@@ -261,6 +295,7 @@ The following enumeration types are used
 \hline
 Quals & Field & Type & Description \\
 \hline
+$\mathit{RO}_\mathit{run}$ &  {\tt uuid} & string & unique identifier/object 
reference \\
 $\mathit{RO}_\mathit{ins}$ &  {\tt this\_host} & host ref & Currently 
connected host \\
 $\mathit{RO}_\mathit{ins}$ &  {\tt this\_user} & user ref & Currently 
connected user \\
 \hline
@@ -321,10 +356,42 @@ void
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~get\_uuid}
+
+{\bf Overview:} 
+Get the uuid field of the given session.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_uuid (session_id s, session ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt session ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~get\_this\_host}
 
 {\bf Overview:} 
-get accessor message derived from field this\_host of object session
+Get the this\_host field of the given session.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host ref) get_this_host (session_id s, session ref 
self)\end{verbatim}
@@ -337,7 +404,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt session ref } & self & object instance \\ \hline 
+{\tt session ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -356,7 +423,7 @@ value of the field
 \subsubsection{RPC name:~get\_this\_user}
 
 {\bf Overview:} 
-get accessor message derived from field this\_user of object session
+Get the this\_user field of the given session.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (user ref) get_this_user (session_id s, session ref 
self)\end{verbatim}
@@ -369,7 +436,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt session ref } & self & object instance \\ \hline 
+{\tt session ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -388,7 +455,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class session
+Create a new session instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (session ref) create (session_id s, session record 
args)\end{verbatim}
@@ -420,7 +487,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class session
+Destroy the specified session instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, session ref self)\end{verbatim}
@@ -433,7 +500,7 @@ destructor for class session
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt session ref } & self & object instance \\ \hline 
+{\tt session ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -452,7 +519,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the session instance with a particular uuid
+Get a reference to the session instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (session ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -484,7 +551,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class session
+Get a record containing the current state of the given session.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (session record) get_record (session_id s, session ref 
self)\end{verbatim}
@@ -521,89 +588,321 @@ all fields from the object
 \begin{longtable}{|lllp{0.38\textwidth}|}
 \hline
 \multicolumn{1}{|l}{Name} & \multicolumn{3}{l|}{\bf task} \\
-\multicolumn{1}{|l}{Description} & \multicolumn{3}{l|}{\parbox{11cm}{\em A 
longrunning asynchronous task}} \\
+\multicolumn{1}{|l}{Description} & \multicolumn{3}{l|}{\parbox{11cm}{\em A 
long-running asynchronous task}} \\
 \hline
 Quals & Field & Type & Description \\
 \hline
 $\mathit{RO}_\mathit{run}$ &  {\tt uuid} & string & unique identifier/object 
reference \\
 $\mathit{RW}$ &  {\tt name/label} & string & a human-readable name \\
 $\mathit{RW}$ &  {\tt name/description} & string & a notes field containg 
human-readable description \\
+$\mathit{RO}_\mathit{run}$ &  {\tt status} & task\_status\_type & current 
status of the task \\
+$\mathit{RO}_\mathit{run}$ &  {\tt progress} & int & if the task is still 
pending, this field contains the estimated percentage complete (0-100). If task 
has completed (successfully or unsuccessfully) this should be 100. \\
+$\mathit{RO}_\mathit{run}$ &  {\tt eta} & datetime & if the task is still 
pending, this field contains the estimated completion time. If the task has 
finished (successfully or not) it contains the time the task finished. \\
+$\mathit{RO}_\mathit{run}$ &  {\tt type} & string & if the task has completed 
successfully, this field contains the type of the encoded result (i.e. name of 
the class whose reference is in the result field). Undefined otherwise. \\
+$\mathit{RO}_\mathit{run}$ &  {\tt result} & string & if the task has 
completed successfully, this field contains the result value (either Void or an 
object reference). Undefined otherwise. \\
+$\mathit{RO}_\mathit{run}$ &  {\tt error\_code} & int & if the task has 
failed, this field contains the error code. Undefined otherwise. \\
+$\mathit{RO}_\mathit{run}$ &  {\tt error\_info} & string Set & if the task has 
failed, this field contains the set of associated error strings. Undefined 
otherwise. \\
 \hline
 \end{longtable}
 \subsection{Additional RPCs associated with class: task}
+\subsubsection{RPC name:~get\_all}
+
+{\bf Overview:} 
+Return a list of all the tasks known to the system
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} ((task ref) Set) get_all (session_id s)\end{verbatim}
+
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+(task ref) Set
+}
+
+
+references to all objects
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_uuid}
+
+{\bf Overview:} 
+Get the uuid field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_uuid (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_name\_label}
+
+{\bf Overview:} 
+Get the name/label field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_name_label (session_id s, task ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~set\_name\_label}
+
+{\bf Overview:} 
+Set the name/label field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_name_label (session_id s, task ref self, string 
value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+{\tt string } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_name\_description}
+
+{\bf Overview:} 
+Get the name/description field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_name_description (session_id s, task ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~set\_name\_description}
+
+{\bf Overview:} 
+Set the name/description field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_name_description (session_id s, task ref self, 
string value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+{\tt string } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~get\_status}
 
 {\bf Overview:} 
-Poll a running asynchronous RPC invocation and query its status
-
- \noindent {\bf Signature:} 
-\begin{verbatim} (uuid ref) get_status (session_id s, task ref 
task)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & task & The ID of the RPC call to poll \\ \hline 
-
-\end{tabular}
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-uuid ref
-}
-
-
-String describing status of specified asynchronous RPC invocation, including 
estimated completion time
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
-\subsubsection{RPC name:~get\_all\_tasks}
-
-{\bf Overview:} 
-List all asynchronous RPC calls currently executing
-
- \noindent {\bf Signature:} 
-\begin{verbatim} ((task ref) Set) get_all_tasks (session_id s)\end{verbatim}
-
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-(task ref) Set
-}
-
-
-A list of tasks currently executing. Note that
-tasks are associated with users rather than sessions. Thus, if you logout and
-login again with a different session but the same user, this function will 
still
-return the user's running tasks.
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
-\subsubsection{RPC name:~get\_uuid}
-
-{\bf Overview:} 
-get accessor message derived from field uuid of object task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} string get_uuid (session_id s, task ref self)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & self & object instance \\ \hline 
+Get the status field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (task_status_type) get_status (session_id s, task ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+task\_status\_type
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_progress}
+
+{\bf Overview:} 
+Get the progress field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} int get_progress (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+int
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_eta}
+
+{\bf Overview:} 
+Get the eta field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} datetime get_eta (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+datetime
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_type}
+
+{\bf Overview:} 
+Get the type field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_type (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -619,23 +918,23 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
-\subsubsection{RPC name:~get\_name\_label}
-
-{\bf Overview:} 
-get accessor message derived from field name/label of object task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} string get_name_label (session_id s, task ref 
self)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & self & object instance \\ \hline 
+\subsubsection{RPC name:~get\_result}
+
+{\bf Overview:} 
+Get the result field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_result (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -651,25 +950,119 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
-\subsubsection{RPC name:~set\_name\_label}
-
-{\bf Overview:} 
-set accessor message derived from field name/label of object task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} void set_name_label (session_id s, task ref self, string 
value)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & self & object instance \\ \hline 
-
-{\tt string } & value & New value to set \\ \hline 
+\subsubsection{RPC name:~get\_error\_code}
+
+{\bf Overview:} 
+Get the error\_code field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} int get_error_code (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+int
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_error\_info}
+
+{\bf Overview:} 
+Get the error\_info field of the given task.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (string Set) get_error_info (session_id s, task ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string Set
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~create}
+
+{\bf Overview:} 
+Create a new task instance, and return its handle.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (task ref) create (session_id s, task record 
args)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task record } & args & All constructor arguments \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+task ref
+}
+
+
+reference to the newly created object
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~destroy}
+
+{\bf Overview:} 
+Destroy the specified task instance.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void destroy (session_id s, task ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt task ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -685,89 +1078,23 @@ void
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
-\subsubsection{RPC name:~get\_name\_description}
-
-{\bf Overview:} 
-get accessor message derived from field name/description of object task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} string get_name_description (session_id s, task ref 
self)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & self & object instance \\ \hline 
-
-\end{tabular}
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-string
-}
-
-
-value of the field
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
-\subsubsection{RPC name:~set\_name\_description}
-
-{\bf Overview:} 
-set accessor message derived from field name/description of object task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} void set_name_description (session_id s, task ref self, 
string value)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & self & object instance \\ \hline 
-
-{\tt string } & value & New value to set \\ \hline 
-
-\end{tabular}
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-void
-}
-
-
-
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
-\subsubsection{RPC name:~create}
-
-{\bf Overview:} 
-constructor for class task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} (task ref) create (session_id s, task record 
args)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task record } & args & All constructor arguments \\ \hline 
+\subsubsection{RPC name:~get\_by\_uuid}
+
+{\bf Overview:} 
+Get a reference to the task instance with the specified UUID.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (task ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt string } & uuid & UUID of object to return \\ \hline 
 
 \end{tabular}
 
@@ -779,70 +1106,6 @@ task ref
 }
 
 
-reference to the newly created object
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
-\subsubsection{RPC name:~destroy}
-
-{\bf Overview:} 
-destructor for class task
-
- \noindent {\bf Signature:} 
-\begin{verbatim} void destroy (session_id s, task ref self)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt task ref } & self & object instance \\ \hline 
-
-\end{tabular}
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-void
-}
-
-
-
-\vspace{0.3cm}
-\vspace{0.3cm}
-\vspace{0.3cm}
-\subsubsection{RPC name:~get\_by\_uuid}
-
-{\bf Overview:} 
-returns the task instance with a particular uuid
-
- \noindent {\bf Signature:} 
-\begin{verbatim} (task ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
-
-
-\noindent{\bf Arguments:}
-
- 
-\vspace{0.3cm}
-\begin{tabular}{|c|c|p{7cm}|}
- \hline
-{\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt string } & uuid & UUID of object to return \\ \hline 
-
-\end{tabular}
-
-\vspace{0.3cm}
-
- \noindent {\bf Return Type:} 
-{\tt 
-task ref
-}
-
-
 reference to the object
 \vspace{0.3cm}
 \vspace{0.3cm}
@@ -850,7 +1113,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class task
+Get a record containing the current state of the given task.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (task record) get_record (session_id s, task ref 
self)\end{verbatim}
@@ -882,7 +1145,7 @@ all fields from the object
 \subsubsection{RPC name:~get\_by\_name\_label}
 
 {\bf Overview:} 
-returns the task instance with a particular name label
+Get all the task instances with the given label.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((task ref) Set) get_by_name_label (session_id s, string 
label)\end{verbatim}
@@ -929,15 +1192,16 @@ Quals & Field & Type & Description \\
 $\mathit{RW}$ &  {\tt name/description} & string & a notes field containg 
human-readable description \\
 $\mathit{RW}$ &  {\tt user\_version} & int & a user version number for this 
machine \\
 $\mathit{RW}$ &  {\tt is\_a\_template} & bool & true if this is a template. 
Template VMs can never be started, they are used only for cloning other VMs \\
+$\mathit{RW}$ &  {\tt auto\_power\_on} & bool & true if this VM should be 
started automatically after host boot \\
 $\mathit{RO}_\mathit{run}$ &  {\tt resident\_on} & host ref & the host the VM 
is currently resident on \\
-$\mathit{RO}_\mathit{ins}$ &  {\tt memory/static\_max} & int & Statically-set 
(i.e. absolute) maximum \\
-$\mathit{RW}$ &  {\tt memory/dynamic\_max} & int & Dynamic maximum \\
-$\mathit{RO}_\mathit{run}$ &  {\tt memory/actual} & int & Guest's actual usage 
\\
-$\mathit{RW}$ &  {\tt memory/dynamic\_min} & int & Dynamic minimum \\
-$\mathit{RO}_\mathit{ins}$ &  {\tt memory/static\_min} & int & Statically-set 
(i.e. absolute) mininum \\
+$\mathit{RO}_\mathit{ins}$ &  {\tt memory/static\_max} & int & Statically-set 
(i.e. absolute) maximum (bytes) \\
+$\mathit{RW}$ &  {\tt memory/dynamic\_max} & int & Dynamic maximum (bytes) \\
+$\mathit{RO}_\mathit{run}$ &  {\tt memory/actual} & int & Guest's actual usage 
(bytes) \\
+$\mathit{RW}$ &  {\tt memory/dynamic\_min} & int & Dynamic minimum (bytes) \\
+$\mathit{RO}_\mathit{ins}$ &  {\tt memory/static\_min} & int & Statically-set 
(i.e. absolute) mininum (bytes) \\
 $\mathit{RW}$ &  {\tt VCPUs/policy} & string & the name of the VCPU scheduling 
policy to be applied \\
 $\mathit{RW}$ &  {\tt VCPUs/params} & string & string-encoded parameters 
passed to selected VCPU policy \\
-$\mathit{RO}_\mathit{run}$ &  {\tt VCPUs/number} & int & Current number of 
VCPUs \\
+$\mathit{RW}$ &  {\tt VCPUs/number} & int & Current number of VCPUs \\
 $\mathit{RO}_\mathit{run}$ &  {\tt VCPUs/utilisation} & (int $\rightarrow$ 
float) Map & Utilisation for all of guest's current VCPUs \\
 $\mathit{RO}_\mathit{ins}$ &  {\tt VCPUs/features/required} & (cpu\_feature) 
Set & CPU features the guest demands the host supports \\
 $\mathit{RO}_\mathit{ins}$ &  {\tt VCPUs/features/can\_use} & (cpu\_feature) 
Set & CPU features the guest can use if available \\
@@ -947,6 +1211,7 @@ Quals & Field & Type & Description \\
 $\mathit{RW}$ &  {\tt actions/after\_reboot} & on\_normal\_exit & action to 
take after the guest has rebooted itself \\
 $\mathit{RW}$ &  {\tt actions/after\_suspend} & on\_normal\_exit & action to 
take after the guest has suspended itself \\
 $\mathit{RW}$ &  {\tt actions/after\_crash} & on\_crash\_behaviour & action to 
take if the guest crashes \\
+$\mathit{RO}_\mathit{run}$ &  {\tt consoles} & (console ref) Set & virtual 
console devices \\
 $\mathit{RO}_\mathit{run}$ &  {\tt VIFs} & (VIF ref) Set & virtual network 
interfaces \\
 $\mathit{RO}_\mathit{run}$ &  {\tt VBDs} & (VBD ref) Set & virtual block 
devices \\
 $\mathit{RO}_\mathit{run}$ &  {\tt VTPMs} & (VTPM ref) Set & virtual TPMs \\
@@ -1322,7 +1587,7 @@ A list of all the IDs of all the VMs
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object VM
+Get the uuid field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, VM ref self)\end{verbatim}
@@ -1335,7 +1600,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1354,7 +1619,7 @@ value of the field
 \subsubsection{RPC name:~get\_power\_state}
 
 {\bf Overview:} 
-get accessor message derived from field power\_state of object VM
+Get the power\_state field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (vm_power_state) get_power_state (session_id s, VM ref 
self)\end{verbatim}
@@ -1367,7 +1632,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1386,7 +1651,7 @@ value of the field
 \subsubsection{RPC name:~get\_name\_label}
 
 {\bf Overview:} 
-get accessor message derived from field name/label of object VM
+Get the name/label field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_label (session_id s, VM ref 
self)\end{verbatim}
@@ -1399,7 +1664,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1418,7 +1683,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_label}
 
 {\bf Overview:} 
-set accessor message derived from field name/label of object VM
+Set the name/label field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_label (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -1431,7 +1696,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -1452,7 +1717,7 @@ void
 \subsubsection{RPC name:~get\_name\_description}
 
 {\bf Overview:} 
-get accessor message derived from field name/description of object VM
+Get the name/description field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_description (session_id s, VM ref 
self)\end{verbatim}
@@ -1465,7 +1730,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1484,7 +1749,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_description}
 
 {\bf Overview:} 
-set accessor message derived from field name/description of object VM
+Set the name/description field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_description (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -1497,7 +1762,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -1518,7 +1783,7 @@ void
 \subsubsection{RPC name:~get\_user\_version}
 
 {\bf Overview:} 
-get accessor message derived from field user\_version of object VM
+Get the user\_version field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_user_version (session_id s, VM ref self)\end{verbatim}
@@ -1531,7 +1796,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1550,7 +1815,7 @@ value of the field
 \subsubsection{RPC name:~set\_user\_version}
 
 {\bf Overview:} 
-set accessor message derived from field user\_version of object VM
+Set the user\_version field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_user_version (session_id s, VM ref self, int 
value)\end{verbatim}
@@ -1563,7 +1828,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt int } & value & New value to set \\ \hline 
 
@@ -1584,7 +1849,7 @@ void
 \subsubsection{RPC name:~get\_is\_a\_template}
 
 {\bf Overview:} 
-get accessor message derived from field is\_a\_template of object VM
+Get the is\_a\_template field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_is_a_template (session_id s, VM ref 
self)\end{verbatim}
@@ -1597,7 +1862,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1616,7 +1881,7 @@ value of the field
 \subsubsection{RPC name:~set\_is\_a\_template}
 
 {\bf Overview:} 
-set accessor message derived from field is\_a\_template of object VM
+Set the is\_a\_template field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_is_a_template (session_id s, VM ref self, bool 
value)\end{verbatim}
@@ -1629,7 +1894,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -1647,10 +1912,76 @@ void
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~get\_auto\_power\_on}
+
+{\bf Overview:} 
+Get the auto\_power\_on field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} bool get_auto_power_on (session_id s, VM ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+bool
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~set\_auto\_power\_on}
+
+{\bf Overview:} 
+Set the auto\_power\_on field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_auto_power_on (session_id s, VM ref self, bool 
value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+{\tt bool } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~get\_resident\_on}
 
 {\bf Overview:} 
-get accessor message derived from field resident\_on of object VM
+Get the resident\_on field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host ref) get_resident_on (session_id s, VM ref 
self)\end{verbatim}
@@ -1663,7 +1994,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1682,7 +2013,7 @@ value of the field
 \subsubsection{RPC name:~get\_memory\_static\_max}
 
 {\bf Overview:} 
-get accessor message derived from field memory/static\_max of object VM
+Get the memory/static\_max field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_memory_static_max (session_id s, VM ref 
self)\end{verbatim}
@@ -1695,7 +2026,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1714,7 +2045,7 @@ value of the field
 \subsubsection{RPC name:~get\_memory\_dynamic\_max}
 
 {\bf Overview:} 
-get accessor message derived from field memory/dynamic\_max of object VM
+Get the memory/dynamic\_max field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_memory_dynamic_max (session_id s, VM ref 
self)\end{verbatim}
@@ -1727,7 +2058,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1746,7 +2077,7 @@ value of the field
 \subsubsection{RPC name:~set\_memory\_dynamic\_max}
 
 {\bf Overview:} 
-set accessor message derived from field memory/dynamic\_max of object VM
+Set the memory/dynamic\_max field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_memory_dynamic_max (session_id s, VM ref self, int 
value)\end{verbatim}
@@ -1759,7 +2090,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt int } & value & New value to set \\ \hline 
 
@@ -1780,7 +2111,7 @@ void
 \subsubsection{RPC name:~get\_memory\_actual}
 
 {\bf Overview:} 
-get accessor message derived from field memory/actual of object VM
+Get the memory/actual field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_memory_actual (session_id s, VM ref 
self)\end{verbatim}
@@ -1793,7 +2124,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1812,7 +2143,7 @@ value of the field
 \subsubsection{RPC name:~get\_memory\_dynamic\_min}
 
 {\bf Overview:} 
-get accessor message derived from field memory/dynamic\_min of object VM
+Get the memory/dynamic\_min field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_memory_dynamic_min (session_id s, VM ref 
self)\end{verbatim}
@@ -1825,7 +2156,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1844,7 +2175,7 @@ value of the field
 \subsubsection{RPC name:~set\_memory\_dynamic\_min}
 
 {\bf Overview:} 
-set accessor message derived from field memory/dynamic\_min of object VM
+Set the memory/dynamic\_min field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_memory_dynamic_min (session_id s, VM ref self, int 
value)\end{verbatim}
@@ -1857,7 +2188,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt int } & value & New value to set \\ \hline 
 
@@ -1878,7 +2209,7 @@ void
 \subsubsection{RPC name:~get\_memory\_static\_min}
 
 {\bf Overview:} 
-get accessor message derived from field memory/static\_min of object VM
+Get the memory/static\_min field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_memory_static_min (session_id s, VM ref 
self)\end{verbatim}
@@ -1891,7 +2222,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1910,7 +2241,7 @@ value of the field
 \subsubsection{RPC name:~get\_VCPUs\_policy}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/policy of object VM
+Get the VCPUs/policy field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_VCPUs_policy (session_id s, VM ref 
self)\end{verbatim}
@@ -1923,7 +2254,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -1942,7 +2273,7 @@ value of the field
 \subsubsection{RPC name:~set\_VCPUs\_policy}
 
 {\bf Overview:} 
-set accessor message derived from field VCPUs/policy of object VM
+Set the VCPUs/policy field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_VCPUs_policy (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -1955,7 +2286,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -1976,7 +2307,7 @@ void
 \subsubsection{RPC name:~get\_VCPUs\_params}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/params of object VM
+Get the VCPUs/params field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_VCPUs_params (session_id s, VM ref 
self)\end{verbatim}
@@ -1989,7 +2320,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2008,7 +2339,7 @@ value of the field
 \subsubsection{RPC name:~set\_VCPUs\_params}
 
 {\bf Overview:} 
-set accessor message derived from field VCPUs/params of object VM
+Set the VCPUs/params field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_VCPUs_params (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -2021,7 +2352,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -2042,7 +2373,7 @@ void
 \subsubsection{RPC name:~get\_VCPUs\_number}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/number of object VM
+Get the VCPUs/number field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_VCPUs_number (session_id s, VM ref self)\end{verbatim}
@@ -2055,7 +2386,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2071,10 +2402,44 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~set\_VCPUs\_number}
+
+{\bf Overview:} 
+Set the VCPUs/number field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_VCPUs_number (session_id s, VM ref self, int 
value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+{\tt int } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~get\_VCPUs\_utilisation}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/utilisation of object VM
+Get the VCPUs/utilisation field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((int -> float) Map) get_VCPUs_utilisation (session_id s, VM 
ref self)\end{verbatim}
@@ -2087,7 +2452,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2106,7 +2471,7 @@ value of the field
 \subsubsection{RPC name:~get\_VCPUs\_features\_required}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/features/required of object VM
+Get the VCPUs/features/required field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((cpu_feature) Set) get_VCPUs_features_required (session_id 
s, VM ref self)\end{verbatim}
@@ -2119,7 +2484,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2138,7 +2503,7 @@ value of the field
 \subsubsection{RPC name:~get\_VCPUs\_features\_can\_use}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/features/can\_use of object VM
+Get the VCPUs/features/can\_use field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((cpu_feature) Set) get_VCPUs_features_can_use (session_id s, 
VM ref self)\end{verbatim}
@@ -2151,7 +2516,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2170,7 +2535,7 @@ value of the field
 \subsubsection{RPC name:~get\_VCPUs\_features\_force\_on}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/features/force\_on of object VM
+Get the VCPUs/features/force\_on field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((cpu_feature) Set) get_VCPUs_features_force_on (session_id 
s, VM ref self)\end{verbatim}
@@ -2183,7 +2548,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2199,6 +2564,40 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~set\_VCPUs\_features\_force\_on}
+
+{\bf Overview:} 
+Set the VCPUs/features/force\_on field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_VCPUs_features_force_on (session_id s, VM ref self, 
(cpu_feature) Set value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+{\tt (cpu\_feature) Set } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~add\_VCPUs\_features\_force\_on}
 
 {\bf Overview:} 
@@ -2215,7 +2614,7 @@ set add message derived from field VCPUs
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt cpu\_feature } & value & New value to add \\ \hline 
 
@@ -2249,7 +2648,7 @@ set remove message derived from field VC
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt cpu\_feature } & value & Value to remove \\ \hline 
 
@@ -2270,7 +2669,7 @@ void
 \subsubsection{RPC name:~get\_VCPUs\_features\_force\_off}
 
 {\bf Overview:} 
-get accessor message derived from field VCPUs/features/force\_off of object VM
+Get the VCPUs/features/force\_off field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((cpu_feature) Set) get_VCPUs_features_force_off (session_id 
s, VM ref self)\end{verbatim}
@@ -2283,7 +2682,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2299,6 +2698,40 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~set\_VCPUs\_features\_force\_off}
+
+{\bf Overview:} 
+Set the VCPUs/features/force\_off field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_VCPUs_features_force_off (session_id s, VM ref self, 
(cpu_feature) Set value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+{\tt (cpu\_feature) Set } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~add\_VCPUs\_features\_force\_off}
 
 {\bf Overview:} 
@@ -2315,7 +2748,7 @@ set add message derived from field VCPUs
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt cpu\_feature } & value & New value to add \\ \hline 
 
@@ -2349,7 +2782,7 @@ set remove message derived from field VC
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt cpu\_feature } & value & Value to remove \\ \hline 
 
@@ -2370,7 +2803,7 @@ void
 \subsubsection{RPC name:~get\_actions\_after\_shutdown}
 
 {\bf Overview:} 
-get accessor message derived from field actions/after\_shutdown of object VM
+Get the actions/after\_shutdown field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (on_normal_exit) get_actions_after_shutdown (session_id s, VM 
ref self)\end{verbatim}
@@ -2383,7 +2816,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2402,7 +2835,7 @@ value of the field
 \subsubsection{RPC name:~set\_actions\_after\_shutdown}
 
 {\bf Overview:} 
-set accessor message derived from field actions/after\_shutdown of object VM
+Set the actions/after\_shutdown field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_actions_after_shutdown (session_id s, VM ref self, 
on_normal_exit value)\end{verbatim}
@@ -2415,7 +2848,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt on\_normal\_exit } & value & New value to set \\ \hline 
 
@@ -2436,7 +2869,7 @@ void
 \subsubsection{RPC name:~get\_actions\_after\_reboot}
 
 {\bf Overview:} 
-get accessor message derived from field actions/after\_reboot of object VM
+Get the actions/after\_reboot field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (on_normal_exit) get_actions_after_reboot (session_id s, VM 
ref self)\end{verbatim}
@@ -2449,7 +2882,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2468,7 +2901,7 @@ value of the field
 \subsubsection{RPC name:~set\_actions\_after\_reboot}
 
 {\bf Overview:} 
-set accessor message derived from field actions/after\_reboot of object VM
+Set the actions/after\_reboot field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_actions_after_reboot (session_id s, VM ref self, 
on_normal_exit value)\end{verbatim}
@@ -2481,7 +2914,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt on\_normal\_exit } & value & New value to set \\ \hline 
 
@@ -2502,7 +2935,7 @@ void
 \subsubsection{RPC name:~get\_actions\_after\_suspend}
 
 {\bf Overview:} 
-get accessor message derived from field actions/after\_suspend of object VM
+Get the actions/after\_suspend field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (on_normal_exit) get_actions_after_suspend (session_id s, VM 
ref self)\end{verbatim}
@@ -2515,7 +2948,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2534,7 +2967,7 @@ value of the field
 \subsubsection{RPC name:~set\_actions\_after\_suspend}
 
 {\bf Overview:} 
-set accessor message derived from field actions/after\_suspend of object VM
+Set the actions/after\_suspend field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_actions_after_suspend (session_id s, VM ref self, 
on_normal_exit value)\end{verbatim}
@@ -2547,7 +2980,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt on\_normal\_exit } & value & New value to set \\ \hline 
 
@@ -2568,7 +3001,7 @@ void
 \subsubsection{RPC name:~get\_actions\_after\_crash}
 
 {\bf Overview:} 
-get accessor message derived from field actions/after\_crash of object VM
+Get the actions/after\_crash field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (on_crash_behaviour) get_actions_after_crash (session_id s, 
VM ref self)\end{verbatim}
@@ -2581,7 +3014,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2600,7 +3033,7 @@ value of the field
 \subsubsection{RPC name:~set\_actions\_after\_crash}
 
 {\bf Overview:} 
-set accessor message derived from field actions/after\_crash of object VM
+Set the actions/after\_crash field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_actions_after_crash (session_id s, VM ref self, 
on_crash_behaviour value)\end{verbatim}
@@ -2613,7 +3046,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt on\_crash\_behaviour } & value & New value to set \\ \hline 
 
@@ -2631,10 +3064,42 @@ void
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~get\_consoles}
+
+{\bf Overview:} 
+Get the consoles field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} ((console ref) Set) get_consoles (session_id s, VM ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+(console ref) Set
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~get\_VIFs}
 
 {\bf Overview:} 
-get accessor message derived from field VIFs of object VM
+Get the VIFs field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VIF ref) Set) get_VIFs (session_id s, VM ref 
self)\end{verbatim}
@@ -2647,7 +3112,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2666,7 +3131,7 @@ value of the field
 \subsubsection{RPC name:~get\_VBDs}
 
 {\bf Overview:} 
-get accessor message derived from field VBDs of object VM
+Get the VBDs field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VBD ref) Set) get_VBDs (session_id s, VM ref 
self)\end{verbatim}
@@ -2679,7 +3144,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2698,7 +3163,7 @@ value of the field
 \subsubsection{RPC name:~get\_VTPMs}
 
 {\bf Overview:} 
-get accessor message derived from field VTPMs of object VM
+Get the VTPMs field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VTPM ref) Set) get_VTPMs (session_id s, VM ref 
self)\end{verbatim}
@@ -2711,7 +3176,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2730,7 +3195,7 @@ value of the field
 \subsubsection{RPC name:~get\_bios\_boot}
 
 {\bf Overview:} 
-get accessor message derived from field bios/boot of object VM
+Get the bios/boot field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_bios_boot (session_id s, VM ref self)\end{verbatim}
@@ -2743,7 +3208,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2762,7 +3227,7 @@ value of the field
 \subsubsection{RPC name:~set\_bios\_boot}
 
 {\bf Overview:} 
-set accessor message derived from field bios/boot of object VM
+Set the bios/boot field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_bios_boot (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -2775,7 +3240,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -2796,7 +3261,7 @@ void
 \subsubsection{RPC name:~get\_platform\_std\_VGA}
 
 {\bf Overview:} 
-get accessor message derived from field platform/std\_VGA of object VM
+Get the platform/std\_VGA field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_platform_std_VGA (session_id s, VM ref 
self)\end{verbatim}
@@ -2809,7 +3274,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2828,7 +3293,7 @@ value of the field
 \subsubsection{RPC name:~set\_platform\_std\_VGA}
 
 {\bf Overview:} 
-set accessor message derived from field platform/std\_VGA of object VM
+Set the platform/std\_VGA field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_platform_std_VGA (session_id s, VM ref self, bool 
value)\end{verbatim}
@@ -2841,7 +3306,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -2862,7 +3327,7 @@ void
 \subsubsection{RPC name:~get\_platform\_serial}
 
 {\bf Overview:} 
-get accessor message derived from field platform/serial of object VM
+Get the platform/serial field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_platform_serial (session_id s, VM ref 
self)\end{verbatim}
@@ -2875,7 +3340,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2894,7 +3359,7 @@ value of the field
 \subsubsection{RPC name:~set\_platform\_serial}
 
 {\bf Overview:} 
-set accessor message derived from field platform/serial of object VM
+Set the platform/serial field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_platform_serial (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -2907,7 +3372,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -2928,7 +3393,7 @@ void
 \subsubsection{RPC name:~get\_platform\_localtime}
 
 {\bf Overview:} 
-get accessor message derived from field platform/localtime of object VM
+Get the platform/localtime field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_platform_localtime (session_id s, VM ref 
self)\end{verbatim}
@@ -2941,7 +3406,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -2960,7 +3425,7 @@ value of the field
 \subsubsection{RPC name:~set\_platform\_localtime}
 
 {\bf Overview:} 
-set accessor message derived from field platform/localtime of object VM
+Set the platform/localtime field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_platform_localtime (session_id s, VM ref self, bool 
value)\end{verbatim}
@@ -2973,7 +3438,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -2994,7 +3459,7 @@ void
 \subsubsection{RPC name:~get\_platform\_clock\_offset}
 
 {\bf Overview:} 
-get accessor message derived from field platform/clock\_offset of object VM
+Get the platform/clock\_offset field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_platform_clock_offset (session_id s, VM ref 
self)\end{verbatim}
@@ -3007,7 +3472,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3026,7 +3491,7 @@ value of the field
 \subsubsection{RPC name:~set\_platform\_clock\_offset}
 
 {\bf Overview:} 
-set accessor message derived from field platform/clock\_offset of object VM
+Set the platform/clock\_offset field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_platform_clock_offset (session_id s, VM ref self, 
bool value)\end{verbatim}
@@ -3039,7 +3504,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -3060,7 +3525,7 @@ void
 \subsubsection{RPC name:~get\_platform\_enable\_audio}
 
 {\bf Overview:} 
-get accessor message derived from field platform/enable\_audio of object VM
+Get the platform/enable\_audio field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_platform_enable_audio (session_id s, VM ref 
self)\end{verbatim}
@@ -3073,7 +3538,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3092,7 +3557,7 @@ value of the field
 \subsubsection{RPC name:~set\_platform\_enable\_audio}
 
 {\bf Overview:} 
-set accessor message derived from field platform/enable\_audio of object VM
+Set the platform/enable\_audio field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_platform_enable_audio (session_id s, VM ref self, 
bool value)\end{verbatim}
@@ -3105,7 +3570,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -3126,7 +3591,7 @@ void
 \subsubsection{RPC name:~get\_builder}
 
 {\bf Overview:} 
-get accessor message derived from field builder of object VM
+Get the builder field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_builder (session_id s, VM ref self)\end{verbatim}
@@ -3139,7 +3604,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3158,7 +3623,7 @@ value of the field
 \subsubsection{RPC name:~set\_builder}
 
 {\bf Overview:} 
-set accessor message derived from field builder of object VM
+Set the builder field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_builder (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -3171,7 +3636,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -3192,7 +3657,7 @@ void
 \subsubsection{RPC name:~get\_boot\_method}
 
 {\bf Overview:} 
-get accessor message derived from field boot\_method of object VM
+Get the boot\_method field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (boot_type) get_boot_method (session_id s, VM ref 
self)\end{verbatim}
@@ -3205,7 +3670,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3224,7 +3689,7 @@ value of the field
 \subsubsection{RPC name:~set\_boot\_method}
 
 {\bf Overview:} 
-set accessor message derived from field boot\_method of object VM
+Set the boot\_method field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_boot_method (session_id s, VM ref self, boot_type 
value)\end{verbatim}
@@ -3237,7 +3702,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt boot\_type } & value & New value to set \\ \hline 
 
@@ -3258,7 +3723,7 @@ void
 \subsubsection{RPC name:~get\_kernel\_kernel}
 
 {\bf Overview:} 
-get accessor message derived from field kernel/kernel of object VM
+Get the kernel/kernel field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_kernel_kernel (session_id s, VM ref 
self)\end{verbatim}
@@ -3271,7 +3736,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3290,7 +3755,7 @@ value of the field
 \subsubsection{RPC name:~set\_kernel\_kernel}
 
 {\bf Overview:} 
-set accessor message derived from field kernel/kernel of object VM
+Set the kernel/kernel field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_kernel_kernel (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -3303,7 +3768,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -3324,7 +3789,7 @@ void
 \subsubsection{RPC name:~get\_kernel\_initrd}
 
 {\bf Overview:} 
-get accessor message derived from field kernel/initrd of object VM
+Get the kernel/initrd field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_kernel_initrd (session_id s, VM ref 
self)\end{verbatim}
@@ -3337,7 +3802,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3356,7 +3821,7 @@ value of the field
 \subsubsection{RPC name:~set\_kernel\_initrd}
 
 {\bf Overview:} 
-set accessor message derived from field kernel/initrd of object VM
+Set the kernel/initrd field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_kernel_initrd (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -3369,7 +3834,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -3390,7 +3855,7 @@ void
 \subsubsection{RPC name:~get\_kernel\_args}
 
 {\bf Overview:} 
-get accessor message derived from field kernel/args of object VM
+Get the kernel/args field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_kernel_args (session_id s, VM ref 
self)\end{verbatim}
@@ -3403,7 +3868,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3422,7 +3887,7 @@ value of the field
 \subsubsection{RPC name:~set\_kernel\_args}
 
 {\bf Overview:} 
-set accessor message derived from field kernel/args of object VM
+Set the kernel/args field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_kernel_args (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -3435,7 +3900,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -3456,7 +3921,7 @@ void
 \subsubsection{RPC name:~get\_grub\_cmdline}
 
 {\bf Overview:} 
-get accessor message derived from field grub/cmdline of object VM
+Get the grub/cmdline field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_grub_cmdline (session_id s, VM ref 
self)\end{verbatim}
@@ -3469,7 +3934,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3488,7 +3953,7 @@ value of the field
 \subsubsection{RPC name:~set\_grub\_cmdline}
 
 {\bf Overview:} 
-set accessor message derived from field grub/cmdline of object VM
+Set the grub/cmdline field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_grub_cmdline (session_id s, VM ref self, string 
value)\end{verbatim}
@@ -3501,7 +3966,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -3522,7 +3987,7 @@ void
 \subsubsection{RPC name:~get\_PCI\_bus}
 
 {\bf Overview:} 
-get accessor message derived from field PCI\_bus of object VM
+Get the PCI\_bus field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_PCI_bus (session_id s, VM ref self)\end{verbatim}
@@ -3535,7 +4000,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3554,7 +4019,7 @@ value of the field
 \subsubsection{RPC name:~get\_tools\_version}
 
 {\bf Overview:} 
-get accessor message derived from field tools\_version of object VM
+Get the tools\_version field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((string -> string) Map) get_tools_version (session_id s, VM 
ref self)\end{verbatim}
@@ -3567,7 +4032,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3586,7 +4051,7 @@ value of the field
 \subsubsection{RPC name:~get\_otherConfig}
 
 {\bf Overview:} 
-get accessor message derived from field otherConfig of object VM
+Get the otherConfig field of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((string -> string) Map) get_otherConfig (session_id s, VM 
ref self)\end{verbatim}
@@ -3599,7 +4064,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3615,6 +4080,40 @@ value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~set\_otherConfig}
+
+{\bf Overview:} 
+Set the otherConfig field of the given VM.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_otherConfig (session_id s, VM ref self, (string -> 
string) Map value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VM ref } & self & reference to the object \\ \hline 
+
+{\tt (string $\rightarrow$ string) Map } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~add\_to\_otherConfig}
 
 {\bf Overview:} 
@@ -3631,7 +4130,7 @@ map add message derived from field other
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & key & Key to add \\ \hline 
 
@@ -3667,7 +4166,7 @@ map remove message derived from field ot
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 {\tt string } & key & Key to remove \\ \hline 
 
@@ -3688,7 +4187,7 @@ void
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class VM
+Create a new VM instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM ref) create (session_id s, VM record args)\end{verbatim}
@@ -3720,7 +4219,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class VM
+Destroy the specified VM.  The VM is completely removed from the system.  This 
function can only be called when the VM is in the Halted State.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, VM ref self)\end{verbatim}
@@ -3733,7 +4232,7 @@ destructor for class VM
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VM ref } & self & object instance \\ \hline 
+{\tt VM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -3752,7 +4251,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the VM instance with a particular uuid
+Get a reference to the VM instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM ref) get_by_uuid (session_id s, string uuid)\end{verbatim}
@@ -3784,7 +4283,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class VM
+Get a record containing the current state of the given VM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM record) get_record (session_id s, VM ref 
self)\end{verbatim}
@@ -3816,7 +4315,7 @@ all fields from the object
 \subsubsection{RPC name:~get\_by\_name\_label}
 
 {\bf Overview:} 
-returns the VM instance with a particular name label
+Get all the VM instances with the given label.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VM ref) Set) get_by_name_label (session_id s, string 
label)\end{verbatim}
@@ -4019,7 +4518,7 @@ A list of all the IDs of all the hosts
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object host
+Get the uuid field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, host ref self)\end{verbatim}
@@ -4032,7 +4531,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4051,7 +4550,7 @@ value of the field
 \subsubsection{RPC name:~get\_name\_label}
 
 {\bf Overview:} 
-get accessor message derived from field name/label of object host
+Get the name/label field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_label (session_id s, host ref 
self)\end{verbatim}
@@ -4064,7 +4563,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4083,7 +4582,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_label}
 
 {\bf Overview:} 
-set accessor message derived from field name/label of object host
+Set the name/label field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_label (session_id s, host ref self, string 
value)\end{verbatim}
@@ -4096,7 +4595,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -4117,7 +4616,7 @@ void
 \subsubsection{RPC name:~get\_name\_description}
 
 {\bf Overview:} 
-get accessor message derived from field name/description of object host
+Get the name/description field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_description (session_id s, host ref 
self)\end{verbatim}
@@ -4130,7 +4629,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4149,7 +4648,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_description}
 
 {\bf Overview:} 
-set accessor message derived from field name/description of object host
+Set the name/description field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_description (session_id s, host ref self, 
string value)\end{verbatim}
@@ -4162,7 +4661,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -4183,7 +4682,7 @@ void
 \subsubsection{RPC name:~get\_software\_version}
 
 {\bf Overview:} 
-get accessor message derived from field software\_version of object host
+Get the software\_version field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((string -> string) Map) get_software_version (session_id s, 
host ref self)\end{verbatim}
@@ -4196,7 +4695,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4215,7 +4714,7 @@ value of the field
 \subsubsection{RPC name:~get\_resident\_VMs}
 
 {\bf Overview:} 
-get accessor message derived from field resident\_VMs of object host
+Get the resident\_VMs field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VM ref) Set) get_resident_VMs (session_id s, host ref 
self)\end{verbatim}
@@ -4228,7 +4727,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4247,7 +4746,7 @@ value of the field
 \subsubsection{RPC name:~get\_PIFs}
 
 {\bf Overview:} 
-get accessor message derived from field PIFs of object host
+Get the PIFs field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((PIF ref) Set) get_PIFs (session_id s, host ref 
self)\end{verbatim}
@@ -4260,7 +4759,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4279,7 +4778,7 @@ value of the field
 \subsubsection{RPC name:~get\_host\_CPUs}
 
 {\bf Overview:} 
-get accessor message derived from field host\_CPUs of object host
+Get the host\_CPUs field of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((host_cpu ref) Set) get_host_CPUs (session_id s, host ref 
self)\end{verbatim}
@@ -4292,7 +4791,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4311,7 +4810,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class host
+Create a new host instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host ref) create (session_id s, host record 
args)\end{verbatim}
@@ -4343,7 +4842,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class host
+Destroy the specified host instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, host ref self)\end{verbatim}
@@ -4356,7 +4855,7 @@ destructor for class host
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host ref } & self & object instance \\ \hline 
+{\tt host ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4375,7 +4874,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the host instance with a particular uuid
+Get a reference to the host instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -4407,7 +4906,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class host
+Get a record containing the current state of the given host.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host record) get_record (session_id s, host ref 
self)\end{verbatim}
@@ -4439,7 +4938,7 @@ all fields from the object
 \subsubsection{RPC name:~get\_by\_name\_label}
 
 {\bf Overview:} 
-returns the host instance with a particular name label
+Get all the host instances with the given label.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((host ref) Set) get_by_name_label (session_id s, string 
label)\end{verbatim}
@@ -4494,7 +4993,7 @@ Quals & Field & Type & Description \\
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object host\_cpu
+Get the uuid field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4507,7 +5006,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4526,7 +5025,7 @@ value of the field
 \subsubsection{RPC name:~get\_host}
 
 {\bf Overview:} 
-get accessor message derived from field host of object host\_cpu
+Get the host field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host ref) get_host (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4539,7 +5038,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4558,7 +5057,7 @@ value of the field
 \subsubsection{RPC name:~get\_number}
 
 {\bf Overview:} 
-get accessor message derived from field number of object host\_cpu
+Get the number field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_number (session_id s, host_cpu ref self)\end{verbatim}
@@ -4571,7 +5070,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4590,7 +5089,7 @@ value of the field
 \subsubsection{RPC name:~get\_vendor}
 
 {\bf Overview:} 
-get accessor message derived from field vendor of object host\_cpu
+Get the vendor field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_vendor (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4603,7 +5102,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4622,7 +5121,7 @@ value of the field
 \subsubsection{RPC name:~get\_speed}
 
 {\bf Overview:} 
-get accessor message derived from field speed of object host\_cpu
+Get the speed field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_speed (session_id s, host_cpu ref self)\end{verbatim}
@@ -4635,7 +5134,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4654,7 +5153,7 @@ value of the field
 \subsubsection{RPC name:~get\_modelname}
 
 {\bf Overview:} 
-get accessor message derived from field modelname of object host\_cpu
+Get the modelname field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_modelname (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4667,7 +5166,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4686,7 +5185,7 @@ value of the field
 \subsubsection{RPC name:~get\_features}
 
 {\bf Overview:} 
-get accessor message derived from field features of object host\_cpu
+Get the features field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((cpu_feature) Set) get_features (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4699,7 +5198,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4718,7 +5217,7 @@ value of the field
 \subsubsection{RPC name:~get\_utilisation}
 
 {\bf Overview:} 
-get accessor message derived from field utilisation of object host\_cpu
+Get the utilisation field of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_utilisation (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4731,7 +5230,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4750,7 +5249,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class host\_cpu
+Create a new host\_cpu instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host_cpu ref) create (session_id s, host_cpu record 
args)\end{verbatim}
@@ -4782,7 +5281,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class host\_cpu
+Destroy the specified host\_cpu instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, host_cpu ref self)\end{verbatim}
@@ -4795,7 +5294,7 @@ destructor for class host\_cpu
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt host\_cpu ref } & self & object instance \\ \hline 
+{\tt host\_cpu ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4814,7 +5313,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the host\_cpu instance with a particular uuid
+Get a reference to the host\_cpu instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host_cpu ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -4846,7 +5345,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class host\_cpu
+Get a record containing the current state of the given host\_cpu.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host_cpu record) get_record (session_id s, host_cpu ref 
self)\end{verbatim}
@@ -4921,7 +5420,7 @@ A list of all the IDs of all the network
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object network
+Get the uuid field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, network ref self)\end{verbatim}
@@ -4934,7 +5433,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4953,7 +5452,7 @@ value of the field
 \subsubsection{RPC name:~get\_name\_label}
 
 {\bf Overview:} 
-get accessor message derived from field name/label of object network
+Get the name/label field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_label (session_id s, network ref 
self)\end{verbatim}
@@ -4966,7 +5465,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -4985,7 +5484,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_label}
 
 {\bf Overview:} 
-set accessor message derived from field name/label of object network
+Set the name/label field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_label (session_id s, network ref self, string 
value)\end{verbatim}
@@ -4998,7 +5497,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5019,7 +5518,7 @@ void
 \subsubsection{RPC name:~get\_name\_description}
 
 {\bf Overview:} 
-get accessor message derived from field name/description of object network
+Get the name/description field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_description (session_id s, network ref 
self)\end{verbatim}
@@ -5032,7 +5531,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5051,7 +5550,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_description}
 
 {\bf Overview:} 
-set accessor message derived from field name/description of object network
+Set the name/description field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_description (session_id s, network ref self, 
string value)\end{verbatim}
@@ -5064,7 +5563,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5085,7 +5584,7 @@ void
 \subsubsection{RPC name:~get\_VIFs}
 
 {\bf Overview:} 
-get accessor message derived from field VIFs of object network
+Get the VIFs field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VIF ref) Set) get_VIFs (session_id s, network ref 
self)\end{verbatim}
@@ -5098,7 +5597,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5117,7 +5616,7 @@ value of the field
 \subsubsection{RPC name:~get\_PIFs}
 
 {\bf Overview:} 
-get accessor message derived from field PIFs of object network
+Get the PIFs field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((PIF ref) Set) get_PIFs (session_id s, network ref 
self)\end{verbatim}
@@ -5130,7 +5629,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5149,7 +5648,7 @@ value of the field
 \subsubsection{RPC name:~get\_default\_gateway}
 
 {\bf Overview:} 
-get accessor message derived from field default\_gateway of object network
+Get the default\_gateway field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_default_gateway (session_id s, network ref 
self)\end{verbatim}
@@ -5162,7 +5661,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5181,7 +5680,7 @@ value of the field
 \subsubsection{RPC name:~set\_default\_gateway}
 
 {\bf Overview:} 
-set accessor message derived from field default\_gateway of object network
+Set the default\_gateway field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_default_gateway (session_id s, network ref self, 
string value)\end{verbatim}
@@ -5194,7 +5693,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5215,7 +5714,7 @@ void
 \subsubsection{RPC name:~get\_default\_netmask}
 
 {\bf Overview:} 
-get accessor message derived from field default\_netmask of object network
+Get the default\_netmask field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_default_netmask (session_id s, network ref 
self)\end{verbatim}
@@ -5228,7 +5727,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5247,7 +5746,7 @@ value of the field
 \subsubsection{RPC name:~set\_default\_netmask}
 
 {\bf Overview:} 
-set accessor message derived from field default\_netmask of object network
+Set the default\_netmask field of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_default_netmask (session_id s, network ref self, 
string value)\end{verbatim}
@@ -5260,7 +5759,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5281,7 +5780,7 @@ void
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class network
+Create a new network instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (network ref) create (session_id s, network record 
args)\end{verbatim}
@@ -5313,7 +5812,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class network
+Destroy the specified network instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, network ref self)\end{verbatim}
@@ -5326,7 +5825,7 @@ destructor for class network
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt network ref } & self & object instance \\ \hline 
+{\tt network ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5345,7 +5844,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the network instance with a particular uuid
+Get a reference to the network instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (network ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -5377,7 +5876,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class network
+Get a record containing the current state of the given network.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (network record) get_record (session_id s, network ref 
self)\end{verbatim}
@@ -5409,7 +5908,7 @@ all fields from the object
 \subsubsection{RPC name:~get\_by\_name\_label}
 
 {\bf Overview:} 
-returns the network instance with a particular name label
+Get all the network instances with the given label.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((network ref) Set) get_by_name_label (session_id s, string 
label)\end{verbatim}
@@ -5466,7 +5965,7 @@ Quals & Field & Type & Description \\
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object VIF
+Get the uuid field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, VIF ref self)\end{verbatim}
@@ -5479,7 +5978,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5498,7 +5997,7 @@ value of the field
 \subsubsection{RPC name:~get\_name}
 
 {\bf Overview:} 
-get accessor message derived from field name of object VIF
+Get the name field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name (session_id s, VIF ref self)\end{verbatim}
@@ -5511,7 +6010,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5530,7 +6029,7 @@ value of the field
 \subsubsection{RPC name:~set\_name}
 
 {\bf Overview:} 
-set accessor message derived from field name of object VIF
+Set the name field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name (session_id s, VIF ref self, string 
value)\end{verbatim}
@@ -5543,7 +6042,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5564,7 +6063,7 @@ void
 \subsubsection{RPC name:~get\_type}
 
 {\bf Overview:} 
-get accessor message derived from field type of object VIF
+Get the type field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (driver_type) get_type (session_id s, VIF ref 
self)\end{verbatim}
@@ -5577,7 +6076,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5596,7 +6095,7 @@ value of the field
 \subsubsection{RPC name:~set\_type}
 
 {\bf Overview:} 
-set accessor message derived from field type of object VIF
+Set the type field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_type (session_id s, VIF ref self, driver_type 
value)\end{verbatim}
@@ -5609,7 +6108,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt driver\_type } & value & New value to set \\ \hline 
 
@@ -5630,7 +6129,7 @@ void
 \subsubsection{RPC name:~get\_device}
 
 {\bf Overview:} 
-get accessor message derived from field device of object VIF
+Get the device field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_device (session_id s, VIF ref self)\end{verbatim}
@@ -5643,7 +6142,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5662,7 +6161,7 @@ value of the field
 \subsubsection{RPC name:~set\_device}
 
 {\bf Overview:} 
-set accessor message derived from field device of object VIF
+Set the device field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_device (session_id s, VIF ref self, string 
value)\end{verbatim}
@@ -5675,7 +6174,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5696,7 +6195,7 @@ void
 \subsubsection{RPC name:~get\_network}
 
 {\bf Overview:} 
-get accessor message derived from field network of object VIF
+Get the network field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (network ref) get_network (session_id s, VIF ref 
self)\end{verbatim}
@@ -5709,7 +6208,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5728,7 +6227,7 @@ value of the field
 \subsubsection{RPC name:~set\_network}
 
 {\bf Overview:} 
-set accessor message derived from field network of object VIF
+Set the network field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_network (session_id s, VIF ref self, network ref 
value)\end{verbatim}
@@ -5741,7 +6240,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt network ref } & value & New value to set \\ \hline 
 
@@ -5762,7 +6261,7 @@ void
 \subsubsection{RPC name:~get\_VM}
 
 {\bf Overview:} 
-get accessor message derived from field VM of object VIF
+Get the VM field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM ref) get_VM (session_id s, VIF ref self)\end{verbatim}
@@ -5775,7 +6274,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5794,7 +6293,7 @@ value of the field
 \subsubsection{RPC name:~set\_VM}
 
 {\bf Overview:} 
-set accessor message derived from field VM of object VIF
+Set the VM field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_VM (session_id s, VIF ref self, VM ref 
value)\end{verbatim}
@@ -5807,7 +6306,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt VM ref } & value & New value to set \\ \hline 
 
@@ -5828,7 +6327,7 @@ void
 \subsubsection{RPC name:~get\_MAC}
 
 {\bf Overview:} 
-get accessor message derived from field MAC of object VIF
+Get the MAC field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_MAC (session_id s, VIF ref self)\end{verbatim}
@@ -5841,7 +6340,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5860,7 +6359,7 @@ value of the field
 \subsubsection{RPC name:~set\_MAC}
 
 {\bf Overview:} 
-set accessor message derived from field MAC of object VIF
+Set the MAC field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_MAC (session_id s, VIF ref self, string 
value)\end{verbatim}
@@ -5873,7 +6372,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -5894,7 +6393,7 @@ void
 \subsubsection{RPC name:~get\_MTU}
 
 {\bf Overview:} 
-get accessor message derived from field MTU of object VIF
+Get the MTU field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_MTU (session_id s, VIF ref self)\end{verbatim}
@@ -5907,7 +6406,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5926,7 +6425,7 @@ value of the field
 \subsubsection{RPC name:~set\_MTU}
 
 {\bf Overview:} 
-set accessor message derived from field MTU of object VIF
+Set the MTU field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_MTU (session_id s, VIF ref self, int 
value)\end{verbatim}
@@ -5939,7 +6438,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 {\tt int } & value & New value to set \\ \hline 
 
@@ -5960,7 +6459,7 @@ void
 \subsubsection{RPC name:~get\_io\_read\_kbs}
 
 {\bf Overview:} 
-get accessor message derived from field io/read\_kbs of object VIF
+Get the io/read\_kbs field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_io_read_kbs (session_id s, VIF ref 
self)\end{verbatim}
@@ -5973,7 +6472,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -5992,7 +6491,7 @@ value of the field
 \subsubsection{RPC name:~get\_io\_write\_kbs}
 
 {\bf Overview:} 
-get accessor message derived from field io/write\_kbs of object VIF
+Get the io/write\_kbs field of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_io_write_kbs (session_id s, VIF ref 
self)\end{verbatim}
@@ -6005,7 +6504,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6024,7 +6523,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class VIF
+Create a new VIF instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VIF ref) create (session_id s, VIF record args)\end{verbatim}
@@ -6056,7 +6555,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class VIF
+Destroy the specified VIF instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, VIF ref self)\end{verbatim}
@@ -6069,7 +6568,7 @@ destructor for class VIF
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VIF ref } & self & object instance \\ \hline 
+{\tt VIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6088,7 +6587,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the VIF instance with a particular uuid
+Get a reference to the VIF instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VIF ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -6120,7 +6619,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class VIF
+Get a record containing the current state of the given VIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VIF record) get_record (session_id s, VIF ref 
self)\end{verbatim}
@@ -6176,7 +6675,7 @@ Quals & Field & Type & Description \\
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object PIF
+Get the uuid field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, PIF ref self)\end{verbatim}
@@ -6189,7 +6688,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6208,7 +6707,7 @@ value of the field
 \subsubsection{RPC name:~get\_name}
 
 {\bf Overview:} 
-get accessor message derived from field name of object PIF
+Get the name field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name (session_id s, PIF ref self)\end{verbatim}
@@ -6221,7 +6720,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6240,7 +6739,7 @@ value of the field
 \subsubsection{RPC name:~set\_name}
 
 {\bf Overview:} 
-set accessor message derived from field name of object PIF
+Set the name field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name (session_id s, PIF ref self, string 
value)\end{verbatim}
@@ -6253,7 +6752,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -6274,7 +6773,7 @@ void
 \subsubsection{RPC name:~get\_network}
 
 {\bf Overview:} 
-get accessor message derived from field network of object PIF
+Get the network field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (network ref) get_network (session_id s, PIF ref 
self)\end{verbatim}
@@ -6287,7 +6786,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6306,7 +6805,7 @@ value of the field
 \subsubsection{RPC name:~set\_network}
 
 {\bf Overview:} 
-set accessor message derived from field network of object PIF
+Set the network field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_network (session_id s, PIF ref self, network ref 
value)\end{verbatim}
@@ -6319,7 +6818,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 {\tt network ref } & value & New value to set \\ \hline 
 
@@ -6340,7 +6839,7 @@ void
 \subsubsection{RPC name:~get\_host}
 
 {\bf Overview:} 
-get accessor message derived from field host of object PIF
+Get the host field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (host ref) get_host (session_id s, PIF ref self)\end{verbatim}
@@ -6353,7 +6852,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6372,7 +6871,7 @@ value of the field
 \subsubsection{RPC name:~set\_host}
 
 {\bf Overview:} 
-set accessor message derived from field host of object PIF
+Set the host field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_host (session_id s, PIF ref self, host ref 
value)\end{verbatim}
@@ -6385,7 +6884,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 {\tt host ref } & value & New value to set \\ \hline 
 
@@ -6406,7 +6905,7 @@ void
 \subsubsection{RPC name:~get\_MAC}
 
 {\bf Overview:} 
-get accessor message derived from field MAC of object PIF
+Get the MAC field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_MAC (session_id s, PIF ref self)\end{verbatim}
@@ -6419,7 +6918,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6438,7 +6937,7 @@ value of the field
 \subsubsection{RPC name:~set\_MAC}
 
 {\bf Overview:} 
-set accessor message derived from field MAC of object PIF
+Set the MAC field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_MAC (session_id s, PIF ref self, string 
value)\end{verbatim}
@@ -6451,7 +6950,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -6472,7 +6971,7 @@ void
 \subsubsection{RPC name:~get\_MTU}
 
 {\bf Overview:} 
-get accessor message derived from field MTU of object PIF
+Get the MTU field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_MTU (session_id s, PIF ref self)\end{verbatim}
@@ -6485,7 +6984,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6504,7 +7003,7 @@ value of the field
 \subsubsection{RPC name:~set\_MTU}
 
 {\bf Overview:} 
-set accessor message derived from field MTU of object PIF
+Set the MTU field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_MTU (session_id s, PIF ref self, int 
value)\end{verbatim}
@@ -6517,7 +7016,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 {\tt int } & value & New value to set \\ \hline 
 
@@ -6538,7 +7037,7 @@ void
 \subsubsection{RPC name:~get\_VLAN}
 
 {\bf Overview:} 
-get accessor message derived from field VLAN of object PIF
+Get the VLAN field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_VLAN (session_id s, PIF ref self)\end{verbatim}
@@ -6551,7 +7050,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6570,7 +7069,7 @@ value of the field
 \subsubsection{RPC name:~set\_VLAN}
 
 {\bf Overview:} 
-set accessor message derived from field VLAN of object PIF
+Set the VLAN field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_VLAN (session_id s, PIF ref self, string 
value)\end{verbatim}
@@ -6583,7 +7082,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -6604,7 +7103,7 @@ void
 \subsubsection{RPC name:~get\_io\_read\_kbs}
 
 {\bf Overview:} 
-get accessor message derived from field io/read\_kbs of object PIF
+Get the io/read\_kbs field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_io_read_kbs (session_id s, PIF ref 
self)\end{verbatim}
@@ -6617,7 +7116,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6636,7 +7135,7 @@ value of the field
 \subsubsection{RPC name:~get\_io\_write\_kbs}
 
 {\bf Overview:} 
-get accessor message derived from field io/write\_kbs of object PIF
+Get the io/write\_kbs field of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_io_write_kbs (session_id s, PIF ref 
self)\end{verbatim}
@@ -6649,7 +7148,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6668,7 +7167,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class PIF
+Create a new PIF instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (PIF ref) create (session_id s, PIF record args)\end{verbatim}
@@ -6700,7 +7199,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class PIF
+Destroy the specified PIF instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, PIF ref self)\end{verbatim}
@@ -6713,7 +7212,7 @@ destructor for class PIF
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt PIF ref } & self & object instance \\ \hline 
+{\tt PIF ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6732,7 +7231,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the PIF instance with a particular uuid
+Get a reference to the PIF instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (PIF ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -6764,7 +7263,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class PIF
+Get a record containing the current state of the given PIF.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (PIF record) get_record (session_id s, PIF ref 
self)\end{verbatim}
@@ -6878,7 +7377,7 @@ A list of all the IDs of all the Storage
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object SR
+Get the uuid field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, SR ref self)\end{verbatim}
@@ -6891,7 +7390,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6910,7 +7409,7 @@ value of the field
 \subsubsection{RPC name:~get\_name\_label}
 
 {\bf Overview:} 
-get accessor message derived from field name/label of object SR
+Get the name/label field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_label (session_id s, SR ref 
self)\end{verbatim}
@@ -6923,7 +7422,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -6942,7 +7441,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_label}
 
 {\bf Overview:} 
-set accessor message derived from field name/label of object SR
+Set the name/label field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_label (session_id s, SR ref self, string 
value)\end{verbatim}
@@ -6955,7 +7454,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -6976,7 +7475,7 @@ void
 \subsubsection{RPC name:~get\_name\_description}
 
 {\bf Overview:} 
-get accessor message derived from field name/description of object SR
+Get the name/description field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_description (session_id s, SR ref 
self)\end{verbatim}
@@ -6989,7 +7488,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7008,7 +7507,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_description}
 
 {\bf Overview:} 
-set accessor message derived from field name/description of object SR
+Set the name/description field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_description (session_id s, SR ref self, string 
value)\end{verbatim}
@@ -7021,7 +7520,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -7042,7 +7541,7 @@ void
 \subsubsection{RPC name:~get\_VDIs}
 
 {\bf Overview:} 
-get accessor message derived from field VDIs of object SR
+Get the VDIs field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VDI ref) Set) get_VDIs (session_id s, SR ref 
self)\end{verbatim}
@@ -7055,7 +7554,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7074,7 +7573,7 @@ value of the field
 \subsubsection{RPC name:~get\_virtual\_allocation}
 
 {\bf Overview:} 
-get accessor message derived from field virtual\_allocation of object SR
+Get the virtual\_allocation field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_virtual_allocation (session_id s, SR ref 
self)\end{verbatim}
@@ -7087,7 +7586,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7106,7 +7605,7 @@ value of the field
 \subsubsection{RPC name:~get\_physical\_utilisation}
 
 {\bf Overview:} 
-get accessor message derived from field physical\_utilisation of object SR
+Get the physical\_utilisation field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_physical_utilisation (session_id s, SR ref 
self)\end{verbatim}
@@ -7119,7 +7618,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7138,7 +7637,7 @@ value of the field
 \subsubsection{RPC name:~get\_physical\_size}
 
 {\bf Overview:} 
-get accessor message derived from field physical\_size of object SR
+Get the physical\_size field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_physical_size (session_id s, SR ref 
self)\end{verbatim}
@@ -7151,7 +7650,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7170,7 +7669,7 @@ value of the field
 \subsubsection{RPC name:~get\_type}
 
 {\bf Overview:} 
-get accessor message derived from field type of object SR
+Get the type field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_type (session_id s, SR ref self)\end{verbatim}
@@ -7183,7 +7682,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7202,7 +7701,7 @@ value of the field
 \subsubsection{RPC name:~get\_location}
 
 {\bf Overview:} 
-get accessor message derived from field location of object SR
+Get the location field of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_location (session_id s, SR ref self)\end{verbatim}
@@ -7215,7 +7714,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7234,7 +7733,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class SR
+Create a new SR instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (SR ref) create (session_id s, SR record args)\end{verbatim}
@@ -7266,7 +7765,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class SR
+Destroy the specified SR instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, SR ref self)\end{verbatim}
@@ -7279,7 +7778,7 @@ destructor for class SR
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt SR ref } & self & object instance \\ \hline 
+{\tt SR ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7298,7 +7797,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the SR instance with a particular uuid
+Get a reference to the SR instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (SR ref) get_by_uuid (session_id s, string uuid)\end{verbatim}
@@ -7330,7 +7829,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class SR
+Get a record containing the current state of the given SR.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (SR record) get_record (session_id s, SR ref 
self)\end{verbatim}
@@ -7362,7 +7861,7 @@ all fields from the object
 \subsubsection{RPC name:~get\_by\_name\_label}
 
 {\bf Overview:} 
-returns the SR instance with a particular name label
+Get all the SR instances with the given label.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((SR ref) Set) get_by_name_label (session_id s, string 
label)\end{verbatim}
@@ -7488,7 +7987,7 @@ void
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object VDI
+Get the uuid field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, VDI ref self)\end{verbatim}
@@ -7501,7 +8000,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7520,7 +8019,7 @@ value of the field
 \subsubsection{RPC name:~get\_name\_label}
 
 {\bf Overview:} 
-get accessor message derived from field name/label of object VDI
+Get the name/label field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_label (session_id s, VDI ref 
self)\end{verbatim}
@@ -7533,7 +8032,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7552,7 +8051,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_label}
 
 {\bf Overview:} 
-set accessor message derived from field name/label of object VDI
+Set the name/label field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_label (session_id s, VDI ref self, string 
value)\end{verbatim}
@@ -7565,7 +8064,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -7586,7 +8085,7 @@ void
 \subsubsection{RPC name:~get\_name\_description}
 
 {\bf Overview:} 
-get accessor message derived from field name/description of object VDI
+Get the name/description field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_name_description (session_id s, VDI ref 
self)\end{verbatim}
@@ -7599,7 +8098,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7618,7 +8117,7 @@ value of the field
 \subsubsection{RPC name:~set\_name\_description}
 
 {\bf Overview:} 
-set accessor message derived from field name/description of object VDI
+Set the name/description field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_name_description (session_id s, VDI ref self, string 
value)\end{verbatim}
@@ -7631,7 +8130,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -7652,7 +8151,7 @@ void
 \subsubsection{RPC name:~get\_SR}
 
 {\bf Overview:} 
-get accessor message derived from field SR of object VDI
+Get the SR field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (SR ref) get_SR (session_id s, VDI ref self)\end{verbatim}
@@ -7665,7 +8164,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7684,7 +8183,7 @@ value of the field
 \subsubsection{RPC name:~set\_SR}
 
 {\bf Overview:} 
-set accessor message derived from field SR of object VDI
+Set the SR field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_SR (session_id s, VDI ref self, SR ref 
value)\end{verbatim}
@@ -7697,7 +8196,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 {\tt SR ref } & value & New value to set \\ \hline 
 
@@ -7718,7 +8217,7 @@ void
 \subsubsection{RPC name:~get\_VBDs}
 
 {\bf Overview:} 
-get accessor message derived from field VBDs of object VDI
+Get the VBDs field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VBD ref) Set) get_VBDs (session_id s, VDI ref 
self)\end{verbatim}
@@ -7731,7 +8230,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7750,7 +8249,7 @@ value of the field
 \subsubsection{RPC name:~get\_virtual\_size}
 
 {\bf Overview:} 
-get accessor message derived from field virtual\_size of object VDI
+Get the virtual\_size field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_virtual_size (session_id s, VDI ref 
self)\end{verbatim}
@@ -7763,7 +8262,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7782,7 +8281,7 @@ value of the field
 \subsubsection{RPC name:~set\_virtual\_size}
 
 {\bf Overview:} 
-set accessor message derived from field virtual\_size of object VDI
+Set the virtual\_size field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_virtual_size (session_id s, VDI ref self, int 
value)\end{verbatim}
@@ -7795,7 +8294,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 {\tt int } & value & New value to set \\ \hline 
 
@@ -7816,7 +8315,7 @@ void
 \subsubsection{RPC name:~get\_physical\_utilisation}
 
 {\bf Overview:} 
-get accessor message derived from field physical\_utilisation of object VDI
+Get the physical\_utilisation field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_physical_utilisation (session_id s, VDI ref 
self)\end{verbatim}
@@ -7829,7 +8328,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7848,7 +8347,7 @@ value of the field
 \subsubsection{RPC name:~get\_sector\_size}
 
 {\bf Overview:} 
-get accessor message derived from field sector\_size of object VDI
+Get the sector\_size field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_sector_size (session_id s, VDI ref self)\end{verbatim}
@@ -7861,7 +8360,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7880,7 +8379,7 @@ value of the field
 \subsubsection{RPC name:~get\_type}
 
 {\bf Overview:} 
-get accessor message derived from field type of object VDI
+Get the type field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (vdi_type) get_type (session_id s, VDI ref self)\end{verbatim}
@@ -7893,7 +8392,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7912,7 +8411,7 @@ value of the field
 \subsubsection{RPC name:~get\_parent}
 
 {\bf Overview:} 
-get accessor message derived from field parent of object VDI
+Get the parent field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VDI ref) get_parent (session_id s, VDI ref 
self)\end{verbatim}
@@ -7925,7 +8424,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7944,7 +8443,7 @@ value of the field
 \subsubsection{RPC name:~get\_children}
 
 {\bf Overview:} 
-get accessor message derived from field children of object VDI
+Get the children field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VDI ref) Set) get_children (session_id s, VDI ref 
self)\end{verbatim}
@@ -7957,7 +8456,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -7976,7 +8475,7 @@ value of the field
 \subsubsection{RPC name:~get\_sharable}
 
 {\bf Overview:} 
-get accessor message derived from field sharable of object VDI
+Get the sharable field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_sharable (session_id s, VDI ref self)\end{verbatim}
@@ -7989,7 +8488,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8008,7 +8507,7 @@ value of the field
 \subsubsection{RPC name:~set\_sharable}
 
 {\bf Overview:} 
-set accessor message derived from field sharable of object VDI
+Set the sharable field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_sharable (session_id s, VDI ref self, bool 
value)\end{verbatim}
@@ -8021,7 +8520,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -8042,7 +8541,7 @@ void
 \subsubsection{RPC name:~get\_read\_only}
 
 {\bf Overview:} 
-get accessor message derived from field read\_only of object VDI
+Get the read\_only field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} bool get_read_only (session_id s, VDI ref self)\end{verbatim}
@@ -8055,7 +8554,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8074,7 +8573,7 @@ value of the field
 \subsubsection{RPC name:~set\_read\_only}
 
 {\bf Overview:} 
-set accessor message derived from field read\_only of object VDI
+Set the read\_only field of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_read_only (session_id s, VDI ref self, bool 
value)\end{verbatim}
@@ -8087,7 +8586,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 {\tt bool } & value & New value to set \\ \hline 
 
@@ -8108,7 +8607,7 @@ void
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class VDI
+Create a new VDI instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VDI ref) create (session_id s, VDI record args)\end{verbatim}
@@ -8140,7 +8639,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class VDI
+Destroy the specified VDI instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, VDI ref self)\end{verbatim}
@@ -8153,7 +8652,7 @@ destructor for class VDI
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VDI ref } & self & object instance \\ \hline 
+{\tt VDI ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8172,7 +8671,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the VDI instance with a particular uuid
+Get a reference to the VDI instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VDI ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -8204,7 +8703,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class VDI
+Get a record containing the current state of the given VDI.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VDI record) get_record (session_id s, VDI ref 
self)\end{verbatim}
@@ -8236,7 +8735,7 @@ all fields from the object
 \subsubsection{RPC name:~get\_by\_name\_label}
 
 {\bf Overview:} 
-returns the VDI instance with a particular name label
+Get all the VDI instances with the given label.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} ((VDI ref) Set) get_by_name_label (session_id s, string 
label)\end{verbatim}
@@ -8282,6 +8781,7 @@ Quals & Field & Type & Description \\
 $\mathit{RW}$ &  {\tt VDI} & VDI ref & the virtual disk \\
 $\mathit{RW}$ &  {\tt device} & string & device seen by the guest e.g. hda1 \\
 $\mathit{RW}$ &  {\tt mode} & vbd\_mode & the mode the disk should be mounted 
with \\
+$\mathit{RW}$ &  {\tt type} & vbd\_type & how the VBD will appear to the guest 
(e.g. disk or CD) \\
 $\mathit{RW}$ &  {\tt driver} & driver\_type & the style of driver \\
 $\mathit{RO}_\mathit{run}$ &  {\tt io/read\_kbs} & float & Read bandwidth 
(KiB/s) \\
 $\mathit{RO}_\mathit{run}$ &  {\tt io/write\_kbs} & float & Write bandwidth 
(KiB/s) \\
@@ -8325,7 +8825,7 @@ void
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object VBD
+Get the uuid field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, VBD ref self)\end{verbatim}
@@ -8338,7 +8838,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8357,7 +8857,7 @@ value of the field
 \subsubsection{RPC name:~get\_VM}
 
 {\bf Overview:} 
-get accessor message derived from field VM of object VBD
+Get the VM field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM ref) get_VM (session_id s, VBD ref self)\end{verbatim}
@@ -8370,7 +8870,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8389,7 +8889,7 @@ value of the field
 \subsubsection{RPC name:~set\_VM}
 
 {\bf Overview:} 
-set accessor message derived from field VM of object VBD
+Set the VM field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_VM (session_id s, VBD ref self, VM ref 
value)\end{verbatim}
@@ -8402,7 +8902,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 {\tt VM ref } & value & New value to set \\ \hline 
 
@@ -8423,7 +8923,7 @@ void
 \subsubsection{RPC name:~get\_VDI}
 
 {\bf Overview:} 
-get accessor message derived from field VDI of object VBD
+Get the VDI field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VDI ref) get_VDI (session_id s, VBD ref self)\end{verbatim}
@@ -8436,7 +8936,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8455,7 +8955,7 @@ value of the field
 \subsubsection{RPC name:~set\_VDI}
 
 {\bf Overview:} 
-set accessor message derived from field VDI of object VBD
+Set the VDI field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_VDI (session_id s, VBD ref self, VDI ref 
value)\end{verbatim}
@@ -8468,7 +8968,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 {\tt VDI ref } & value & New value to set \\ \hline 
 
@@ -8489,7 +8989,7 @@ void
 \subsubsection{RPC name:~get\_device}
 
 {\bf Overview:} 
-get accessor message derived from field device of object VBD
+Get the device field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_device (session_id s, VBD ref self)\end{verbatim}
@@ -8502,7 +9002,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8521,7 +9021,7 @@ value of the field
 \subsubsection{RPC name:~set\_device}
 
 {\bf Overview:} 
-set accessor message derived from field device of object VBD
+Set the device field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_device (session_id s, VBD ref self, string 
value)\end{verbatim}
@@ -8534,7 +9034,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -8555,7 +9055,7 @@ void
 \subsubsection{RPC name:~get\_mode}
 
 {\bf Overview:} 
-get accessor message derived from field mode of object VBD
+Get the mode field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (vbd_mode) get_mode (session_id s, VBD ref self)\end{verbatim}
@@ -8568,7 +9068,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8587,7 +9087,7 @@ value of the field
 \subsubsection{RPC name:~set\_mode}
 
 {\bf Overview:} 
-set accessor message derived from field mode of object VBD
+Set the mode field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_mode (session_id s, VBD ref self, vbd_mode 
value)\end{verbatim}
@@ -8600,7 +9100,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 {\tt vbd\_mode } & value & New value to set \\ \hline 
 
@@ -8618,10 +9118,76 @@ void
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
+\subsubsection{RPC name:~get\_type}
+
+{\bf Overview:} 
+Get the type field of the given VBD.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (vbd_type) get_type (session_id s, VBD ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VBD ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+vbd\_type
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~set\_type}
+
+{\bf Overview:} 
+Set the type field of the given VBD.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void set_type (session_id s, VBD ref self, vbd_type 
value)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt VBD ref } & self & reference to the object \\ \hline 
+
+{\tt vbd\_type } & value & New value to set \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
 \subsubsection{RPC name:~get\_driver}
 
 {\bf Overview:} 
-get accessor message derived from field driver of object VBD
+Get the driver field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (driver_type) get_driver (session_id s, VBD ref 
self)\end{verbatim}
@@ -8634,7 +9200,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8653,7 +9219,7 @@ value of the field
 \subsubsection{RPC name:~set\_driver}
 
 {\bf Overview:} 
-set accessor message derived from field driver of object VBD
+Set the driver field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_driver (session_id s, VBD ref self, driver_type 
value)\end{verbatim}
@@ -8666,7 +9232,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 {\tt driver\_type } & value & New value to set \\ \hline 
 
@@ -8687,7 +9253,7 @@ void
 \subsubsection{RPC name:~get\_io\_read\_kbs}
 
 {\bf Overview:} 
-get accessor message derived from field io/read\_kbs of object VBD
+Get the io/read\_kbs field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_io_read_kbs (session_id s, VBD ref 
self)\end{verbatim}
@@ -8700,7 +9266,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8719,7 +9285,7 @@ value of the field
 \subsubsection{RPC name:~get\_io\_write\_kbs}
 
 {\bf Overview:} 
-get accessor message derived from field io/write\_kbs of object VBD
+Get the io/write\_kbs field of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} float get_io_write_kbs (session_id s, VBD ref 
self)\end{verbatim}
@@ -8732,7 +9298,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8751,7 +9317,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class VBD
+Create a new VBD instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VBD ref) create (session_id s, VBD record args)\end{verbatim}
@@ -8783,7 +9349,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class VBD
+Destroy the specified VBD instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, VBD ref self)\end{verbatim}
@@ -8796,7 +9362,7 @@ destructor for class VBD
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VBD ref } & self & object instance \\ \hline 
+{\tt VBD ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8815,7 +9381,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the VBD instance with a particular uuid
+Get a reference to the VBD instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VBD ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -8847,7 +9413,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class VBD
+Get a record containing the current state of the given VBD.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VBD record) get_record (session_id s, VBD ref 
self)\end{verbatim}
@@ -8899,7 +9465,7 @@ Quals & Field & Type & Description \\
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object VTPM
+Get the uuid field of the given VTPM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, VTPM ref self)\end{verbatim}
@@ -8912,7 +9478,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & object instance \\ \hline 
+{\tt VTPM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8931,7 +9497,7 @@ value of the field
 \subsubsection{RPC name:~get\_VM}
 
 {\bf Overview:} 
-get accessor message derived from field VM of object VTPM
+Get the VM field of the given VTPM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM ref) get_VM (session_id s, VTPM ref self)\end{verbatim}
@@ -8944,7 +9510,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & object instance \\ \hline 
+{\tt VTPM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8963,7 +9529,7 @@ value of the field
 \subsubsection{RPC name:~get\_backend}
 
 {\bf Overview:} 
-get accessor message derived from field backend of object VTPM
+Get the backend field of the given VTPM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VM ref) get_backend (session_id s, VTPM ref 
self)\end{verbatim}
@@ -8976,7 +9542,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & object instance \\ \hline 
+{\tt VTPM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -8995,7 +9561,7 @@ value of the field
 \subsubsection{RPC name:~get\_driver}
 
 {\bf Overview:} 
-get accessor message derived from field driver of object VTPM
+Get the driver field of the given VTPM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (driver_type) get_driver (session_id s, VTPM ref 
self)\end{verbatim}
@@ -9008,7 +9574,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & object instance \\ \hline 
+{\tt VTPM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9027,7 +9593,7 @@ value of the field
 \subsubsection{RPC name:~get\_instance}
 
 {\bf Overview:} 
-get accessor message derived from field instance of object VTPM
+Get the instance field of the given VTPM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} int get_instance (session_id s, VTPM ref self)\end{verbatim}
@@ -9040,7 +9606,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & object instance \\ \hline 
+{\tt VTPM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9059,7 +9625,7 @@ value of the field
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class VTPM
+Create a new VTPM instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VTPM ref) create (session_id s, VTPM record 
args)\end{verbatim}
@@ -9091,7 +9657,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class VTPM
+Destroy the specified VTPM instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, VTPM ref self)\end{verbatim}
@@ -9104,7 +9670,7 @@ destructor for class VTPM
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt VTPM ref } & self & object instance \\ \hline 
+{\tt VTPM ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9123,7 +9689,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the VTPM instance with a particular uuid
+Get a reference to the VTPM instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VTPM ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -9155,7 +9721,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class VTPM
+Get a record containing the current state of the given VTPM.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (VTPM record) get_record (session_id s, VTPM ref 
self)\end{verbatim}
@@ -9181,6 +9747,281 @@ VTPM record
 
 
 all fields from the object
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+
+\vspace{1cm}
+\newpage
+\section{Class: console}
+\subsection{Fields for class: console}
+\begin{longtable}{|lllp{0.38\textwidth}|}
+\hline
+\multicolumn{1}{|l}{Name} & \multicolumn{3}{l|}{\bf console} \\
+\multicolumn{1}{|l}{Description} & \multicolumn{3}{l|}{\parbox{11cm}{\em A 
console}} \\
+\hline
+Quals & Field & Type & Description \\
+\hline
+$\mathit{RO}_\mathit{run}$ &  {\tt uuid} & string & unique identifier/object 
reference \\
+$\mathit{RO}_\mathit{run}$ &  {\tt protocol} & console\_protocol & the 
protocol used by this console \\
+$\mathit{RO}_\mathit{run}$ &  {\tt uri} & string & URI for the console service 
\\
+$\mathit{RO}_\mathit{run}$ &  {\tt VM} & VM ref & VM to which this console is 
attached \\
+\hline
+\end{longtable}
+\subsection{Additional RPCs associated with class: console}
+\subsubsection{RPC name:~get\_record}
+
+{\bf Overview:} 
+Get the current state of the given console.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (console record) get_record (session_id s, console ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+console record
+}
+
+
+all fields from the object
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_by\_uuid}
+
+{\bf Overview:} 
+Get a reference to the object with the specified UUID.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (console ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt string } & uuid & UUID of object to return \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+console ref
+}
+
+
+reference to the object
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~create}
+
+{\bf Overview:} 
+Create a new console instance, and return its handle.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (console ref) create (session_id s, console record 
args)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console record } & args & All constructor arguments \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+console ref
+}
+
+
+reference to the newly created object
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~destroy}
+
+{\bf Overview:} 
+Destroy the specified console instance.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} void destroy (session_id s, console ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+void
+}
+
+
+
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_uuid}
+
+{\bf Overview:} 
+Get the uuid field of the given console.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_uuid (session_id s, console ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_protocol}
+
+{\bf Overview:} 
+Get the protocol field of the given console.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (console_protocol) get_protocol (session_id s, console ref 
self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+console\_protocol
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_uri}
+
+{\bf Overview:} 
+Get the uri field of the given console.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} string get_uri (session_id s, console ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+string
+}
+
+
+value of the field
+\vspace{0.3cm}
+\vspace{0.3cm}
+\vspace{0.3cm}
+\subsubsection{RPC name:~get\_VM}
+
+{\bf Overview:} 
+Get the VM field of the given console.
+
+ \noindent {\bf Signature:} 
+\begin{verbatim} (VM ref) get_VM (session_id s, console ref self)\end{verbatim}
+
+
+\noindent{\bf Arguments:}
+
+ 
+\vspace{0.3cm}
+\begin{tabular}{|c|c|p{7cm}|}
+ \hline
+{\bf type} & {\bf name} & {\bf description} \\ \hline
+{\tt console ref } & self & reference to the object \\ \hline 
+
+\end{tabular}
+
+\vspace{0.3cm}
+
+ \noindent {\bf Return Type:} 
+{\tt 
+VM ref
+}
+
+
+value of the field
 \vspace{0.3cm}
 \vspace{0.3cm}
 \vspace{0.3cm}
@@ -9205,7 +10046,7 @@ Quals & Field & Type & Description \\
 \subsubsection{RPC name:~get\_uuid}
 
 {\bf Overview:} 
-get accessor message derived from field uuid of object user
+Get the uuid field of the given user.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_uuid (session_id s, user ref self)\end{verbatim}
@@ -9218,7 +10059,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt user ref } & self & object instance \\ \hline 
+{\tt user ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9237,7 +10078,7 @@ value of the field
 \subsubsection{RPC name:~get\_short\_name}
 
 {\bf Overview:} 
-get accessor message derived from field short\_name of object user
+Get the short\_name field of the given user.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_short_name (session_id s, user ref 
self)\end{verbatim}
@@ -9250,7 +10091,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt user ref } & self & object instance \\ \hline 
+{\tt user ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9269,7 +10110,7 @@ value of the field
 \subsubsection{RPC name:~get\_fullname}
 
 {\bf Overview:} 
-get accessor message derived from field fullname of object user
+Get the fullname field of the given user.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} string get_fullname (session_id s, user ref 
self)\end{verbatim}
@@ -9282,7 +10123,7 @@ get accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt user ref } & self & object instance \\ \hline 
+{\tt user ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9301,7 +10142,7 @@ value of the field
 \subsubsection{RPC name:~set\_fullname}
 
 {\bf Overview:} 
-set accessor message derived from field fullname of object user
+Set the fullname field of the given user.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void set_fullname (session_id s, user ref self, string 
value)\end{verbatim}
@@ -9314,7 +10155,7 @@ set accessor message derived from field 
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt user ref } & self & object instance \\ \hline 
+{\tt user ref } & self & reference to the object \\ \hline 
 
 {\tt string } & value & New value to set \\ \hline 
 
@@ -9335,7 +10176,7 @@ void
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class user
+Create a new user instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (user ref) create (session_id s, user record 
args)\end{verbatim}
@@ -9367,7 +10208,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class user
+Destroy the specified user instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, user ref self)\end{verbatim}
@@ -9380,7 +10221,7 @@ destructor for class user
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt user ref } & self & object instance \\ \hline 
+{\tt user ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9399,7 +10240,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the user instance with a particular uuid
+Get a reference to the user instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (user ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -9431,7 +10272,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class user
+Get a record containing the current state of the given user.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (user record) get_record (session_id s, user ref 
self)\end{verbatim}
@@ -9512,7 +10353,7 @@ void
 \subsubsection{RPC name:~create}
 
 {\bf Overview:} 
-constructor for class debug
+Create a new debug instance, and return its handle.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (debug ref) create (session_id s, debug record 
args)\end{verbatim}
@@ -9544,7 +10385,7 @@ reference to the newly created object
 \subsubsection{RPC name:~destroy}
 
 {\bf Overview:} 
-destructor for class debug
+Destroy the specified debug instance.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} void destroy (session_id s, debug ref self)\end{verbatim}
@@ -9557,7 +10398,7 @@ destructor for class debug
 \begin{tabular}{|c|c|p{7cm}|}
  \hline
 {\bf type} & {\bf name} & {\bf description} \\ \hline
-{\tt debug ref } & self & object instance \\ \hline 
+{\tt debug ref } & self & reference to the object \\ \hline 
 
 \end{tabular}
 
@@ -9576,7 +10417,7 @@ void
 \subsubsection{RPC name:~get\_by\_uuid}
 
 {\bf Overview:} 
-returns the debug instance with a particular uuid
+Get a reference to the debug instance with the specified UUID.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (debug ref) get_by_uuid (session_id s, string 
uuid)\end{verbatim}
@@ -9608,7 +10449,7 @@ reference to the object
 \subsubsection{RPC name:~get\_record}
 
 {\bf Overview:} 
-returns a record containing the state of an instance of class debug
+Get a record containing the current state of the given debug.
 
  \noindent {\bf Signature:} 
 \begin{verbatim} (debug record) get_record (session_id s, debug ref 
self)\end{verbatim}
diff -r a510c94ceaa3 -r 749c399d73df extras/mini-os/events.c
--- a/extras/mini-os/events.c   Tue Dec 12 09:56:06 2006 -0600
+++ b/extras/mini-os/events.c   Tue Dec 12 09:58:42 2006 -0600
@@ -31,26 +31,27 @@ typedef struct _ev_action_t {
     u32 count;
 } ev_action_t;
 
-
 static ev_action_t ev_actions[NR_EVS];
 void default_handler(evtchn_port_t port, struct pt_regs *regs, void *data);
+
+static unsigned long bound_ports[NR_EVS/(8*sizeof(unsigned long))];
 
 void unbind_all_ports(void)
 {
     int i;
 
-       for(i=0;i<NR_EVS;i++)
-       {
-               if(ev_actions[i].handler != default_handler)
-               {
-                       struct evtchn_close close;
-                       mask_evtchn(i);
-                       close.port = i;
-                       HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
-               }
-       }
+    for (i = 0; i < NR_EVS; i++)
+    {
+        if (test_and_clear_bit(i, bound_ports))
+        {
+            struct evtchn_close close;
+            mask_evtchn(i);
+            close.port = i;
+            HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
+        }
+    }
 }
-
+  
 /*
  * Demux events to different handlers.
  */
@@ -114,6 +115,7 @@ int bind_virq(uint32_t virq, evtchn_hand
                printk("Failed to bind virtual IRQ %d\n", virq);
                return 1;
     }
+    set_bit(op.port,bound_ports);
     bind_evtchn(op.port, handler, data);
        return 0;
 }
@@ -188,6 +190,7 @@ int evtchn_bind_interdomain(domid_t pal,
     int err = HYPERVISOR_event_channel_op(EVTCHNOP_bind_interdomain, &op);
     if (err)
                return err;
+    set_bit(op.local_port,bound_ports);
        evtchn_port_t port = op.local_port;
     clear_evtchn(port);              /* Without, handler gets invoked now! */
     *local_port = bind_evtchn(port, handler, data);
diff -r a510c94ceaa3 -r 749c399d73df extras/mini-os/include/events.h
--- a/extras/mini-os/include/events.h   Tue Dec 12 09:56:06 2006 -0600
+++ b/extras/mini-os/include/events.h   Tue Dec 12 09:58:42 2006 -0600
@@ -36,6 +36,7 @@ int evtchn_bind_interdomain(domid_t pal,
 int evtchn_bind_interdomain(domid_t pal, evtchn_port_t remote_port,
                                                        evtchn_handler_t 
handler, void *data,
                                                        evtchn_port_t 
*local_port);
+void unbind_all_ports(void);
 
 static inline int notify_remote_via_evtchn(evtchn_port_t port)
 {
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/arch/i386/Kconfig
--- a/linux-2.6-xen-sparse/arch/i386/Kconfig    Tue Dec 12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/i386/Kconfig    Tue Dec 12 09:58:42 2006 -0600
@@ -726,7 +726,7 @@ source kernel/Kconfig.hz
 
 config KEXEC
        bool "kexec system call (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && !X86_XEN
+       depends on EXPERIMENTAL && !XEN_UNPRIVILEGED_GUEST
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Tue Dec 12 09:58:42 
2006 -0600
@@ -68,6 +68,10 @@
 #include <xen/xencons.h>
 #include "setup_arch_pre.h"
 #include <bios_ebda.h>
+
+#ifdef CONFIG_XEN
+#include <xen/interface/kexec.h>
+#endif
 
 /* Forward Declaration. */
 void __init find_max_pfn(void);
@@ -943,6 +947,7 @@ static void __init parse_cmdline_early (
                 * after a kernel panic.
                 */
                else if (!memcmp(from, "crashkernel=", 12)) {
+#ifndef CONFIG_XEN
                        unsigned long size, base;
                        size = memparse(from+12, &from);
                        if (*from == '@') {
@@ -953,6 +958,10 @@ static void __init parse_cmdline_early (
                                crashk_res.start = base;
                                crashk_res.end   = base + size - 1;
                        }
+#else
+                       printk("Ignoring crashkernel command line, "
+                              "parameter will be supplied by xen\n");
+#endif
                }
 #endif
 #ifdef CONFIG_PROC_VMCORE
@@ -1322,9 +1331,13 @@ void __init setup_bootmem_allocator(void
        }
 #endif
 #ifdef CONFIG_KEXEC
+#ifdef CONFIG_XEN
+       xen_machine_kexec_setup_resources();
+#else
        if (crashk_res.start != crashk_res.end)
                reserve_bootmem(crashk_res.start,
                        crashk_res.end - crashk_res.start + 1);
+#endif
 #endif
 
        if (!xen_feature(XENFEAT_auto_translated_physmap))
@@ -1389,7 +1402,11 @@ legacy_init_iomem_resources(struct e820e
                        request_resource(res, data_resource);
 #endif
 #ifdef CONFIG_KEXEC
-                       request_resource(res, &crashk_res);
+                       if (crashk_res.start != crashk_res.end)
+                            request_resource(res, &crashk_res);
+#ifdef CONFIG_XEN
+                       xen_machine_kexec_register_resources(res);
+#endif
 #endif
                }
        }
@@ -1850,9 +1867,11 @@ void __init setup_arch(char **cmdline_p)
 #endif
 #endif
        } else {
-               extern int console_use_vt;
-               console_use_vt = 0;
-       }
+#if defined(CONFIG_VT) && defined(CONFIG_DUMMY_CONSOLE)
+               conswitchp = &dummy_con;
+#endif
+       }
+       xencons_early_setup();
 }
 
 static int
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c   Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/swiotlb.c   Tue Dec 12 09:58:42 
2006 -0600
@@ -47,8 +47,8 @@ EXPORT_SYMBOL(swiotlb);
  */
 #define IO_TLB_SHIFT 11
 
-/* Width of DMA addresses in the IO TLB. 31 bits is an aacraid limitation. */
-#define IO_TLB_DMA_BITS 31
+/* Width of DMA addresses in the IO TLB. 30 bits is a b44 limitation. */
+#define DEFAULT_IO_TLB_DMA_BITS 30
 
 static int swiotlb_force;
 static char *iotlb_virt_start;
@@ -97,6 +97,15 @@ static struct phys_addr {
  * Protect the above data structures in the map and unmap calls
  */
 static DEFINE_SPINLOCK(io_tlb_lock);
+
+static unsigned int io_tlb_dma_bits = DEFAULT_IO_TLB_DMA_BITS;
+static int __init
+setup_io_tlb_bits(char *str)
+{
+       io_tlb_dma_bits = simple_strtoul(str, NULL, 0);
+       return 0;
+}
+__setup("swiotlb_bits=", setup_io_tlb_bits);
 
 static int __init
 setup_io_tlb_npages(char *str)
@@ -158,7 +167,7 @@ swiotlb_init_with_default_size (size_t d
                int rc = xen_create_contiguous_region(
                        (unsigned long)iotlb_virt_start + (i << IO_TLB_SHIFT),
                        get_order(IO_TLB_SEGSIZE << IO_TLB_SHIFT),
-                       IO_TLB_DMA_BITS);
+                       io_tlb_dma_bits);
                BUG_ON(rc);
        }
 
@@ -183,10 +192,12 @@ swiotlb_init_with_default_size (size_t d
 
        printk(KERN_INFO "Software IO TLB enabled: \n"
               " Aperture:     %lu megabytes\n"
-              " Kernel range: 0x%016lx - 0x%016lx\n",
+              " Kernel range: 0x%016lx - 0x%016lx\n"
+              " Address size: %u bits\n",
               bytes >> 20,
               (unsigned long)iotlb_virt_start,
-              (unsigned long)iotlb_virt_start + bytes);
+              (unsigned long)iotlb_virt_start + bytes,
+              io_tlb_dma_bits);
 }
 
 void
@@ -654,7 +665,7 @@ int
 int
 swiotlb_dma_supported (struct device *hwdev, u64 mask)
 {
-       return (mask >= ((1UL << IO_TLB_DMA_BITS) - 1));
+       return (mask >= ((1UL << io_tlb_dma_bits) - 1));
 }
 
 EXPORT_SYMBOL(swiotlb_init);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c
--- a/linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c  Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/i386/kernel/time-xen.c  Tue Dec 12 09:58:42 
2006 -0600
@@ -710,6 +710,10 @@ irqreturn_t timer_interrupt(int irq, voi
                                            (cputime_t)delta_cpu);
        }
 
+       /* Offlined for more than a few seconds? Avoid lockup warnings. */
+       if (stolen > 5*HZ)
+               touch_softlockup_watchdog();
+
        /* Local timer processing (see update_process_times()). */
        run_local_timers();
        if (rcu_pending(cpu))
@@ -1043,9 +1047,9 @@ void time_resume(void)
 #ifdef CONFIG_SMP
 static char timer_name[NR_CPUS][15];
 
-void local_setup_timer(unsigned int cpu)
-{
-       int seq;
+int local_setup_timer(unsigned int cpu)
+{
+       int seq, irq;
 
        BUG_ON(cpu == 0);
 
@@ -1058,15 +1062,17 @@ void local_setup_timer(unsigned int cpu)
        } while (read_seqretry(&xtime_lock, seq));
 
        sprintf(timer_name[cpu], "timer%d", cpu);
-       per_cpu(timer_irq, cpu) =
-               bind_virq_to_irqhandler(
-                       VIRQ_TIMER,
-                       cpu,
-                       timer_interrupt,
-                       SA_INTERRUPT,
-                       timer_name[cpu],
-                       NULL);
-       BUG_ON(per_cpu(timer_irq, cpu) < 0);
+       irq = bind_virq_to_irqhandler(VIRQ_TIMER,
+                                     cpu,
+                                     timer_interrupt,
+                                     SA_INTERRUPT,
+                                     timer_name[cpu],
+                                     NULL);
+       if (irq < 0)
+               return irq;
+       per_cpu(timer_irq, cpu) = irq;
+
+       return 0;
 }
 
 void local_teardown_timer(unsigned int cpu)
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/arch/ia64/Kconfig
--- a/linux-2.6-xen-sparse/arch/ia64/Kconfig    Tue Dec 12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/Kconfig    Tue Dec 12 09:58:42 2006 -0600
@@ -533,9 +533,6 @@ config XEN_SKBUFF
 config XEN_SKBUFF
        default y
 
-config XEN_DEVMEM
-       default n
-
 config XEN_REBOOT
        default y
 
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/kernel/entry.S
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S     Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/entry.S     Tue Dec 12 09:58:42 
2006 -0600
@@ -602,7 +602,7 @@ GLOBAL_ENTRY(ia64_strace_leave_kernel)
 .ret4: br.cond.sptk ia64_leave_kernel
 END(ia64_strace_leave_kernel)
 
-GLOBAL_ENTRY(ia64_ret_from_clone)
+GLOBAL_ENTRY(__ia64_ret_from_clone)
        PT_REGS_UNWIND_INFO(0)
 {      /*
         * Some versions of gas generate bad unwind info if the first 
instruction of a
@@ -628,7 +628,7 @@ GLOBAL_ENTRY(ia64_ret_from_clone)
        cmp.ne p6,p0=r2,r0
 (p6)   br.cond.spnt .strace_check_retval
        ;;                                      // added stop bits to prevent 
r8 dependency
-END(ia64_ret_from_clone)
+END(__ia64_ret_from_clone)
        // fall through
 GLOBAL_ENTRY(ia64_ret_from_syscall)
        PT_REGS_UNWIND_INFO(0)
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c   Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/iosapic.c   Tue Dec 12 09:58:42 
2006 -0600
@@ -197,6 +197,16 @@ int xen_assign_irq_vector(int irq)
 
        return irq_op.vector;
 }
+
+void xen_free_irq_vector(int vector)
+{
+       struct physdev_irq irq_op;
+
+       irq_op.vector = vector;
+       if (HYPERVISOR_physdev_op(PHYSDEVOP_free_irq_vector, &irq_op))
+               printk(KERN_WARNING "%s: xen_free_irq_vecotr fail vector=%d\n",
+                      __FUNCTION__, vector);
+}
 #endif /* XEN */
 
 /*
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c  Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c  Tue Dec 12 09:58:42 
2006 -0600
@@ -94,6 +94,13 @@ free_irq_vector (int vector)
        if (vector < IA64_FIRST_DEVICE_VECTOR || vector > 
IA64_LAST_DEVICE_VECTOR)
                return;
 
+#ifdef CONFIG_XEN
+       if (is_running_on_xen()) {
+               extern void xen_free_irq_vector(int);
+               xen_free_irq_vector(vector);
+               return;
+       }
+#endif
        pos = vector - IA64_FIRST_DEVICE_VECTOR;
        if (!test_and_clear_bit(pos, ia64_vector_mask))
                printk(KERN_WARNING "%s: double free!\n", __FUNCTION__);
@@ -241,9 +248,15 @@ static DEFINE_PER_CPU(int, timer_irq) = 
 static DEFINE_PER_CPU(int, timer_irq) = -1;
 static DEFINE_PER_CPU(int, ipi_irq) = -1;
 static DEFINE_PER_CPU(int, resched_irq) = -1;
+static DEFINE_PER_CPU(int, cmc_irq) = -1;
+static DEFINE_PER_CPU(int, cmcp_irq) = -1;
+static DEFINE_PER_CPU(int, cpep_irq) = -1;
 static char timer_name[NR_CPUS][15];
 static char ipi_name[NR_CPUS][15];
 static char resched_name[NR_CPUS][15];
+static char cmc_name[NR_CPUS][15];
+static char cmcp_name[NR_CPUS][15];
+static char cpep_name[NR_CPUS][15];
 
 struct saved_irq {
        unsigned int irq;
@@ -323,6 +336,43 @@ xen_register_percpu_irq (unsigned int ir
                        break;
                case IA64_SPURIOUS_INT_VECTOR:
                        break;
+               case IA64_CMC_VECTOR:
+                       sprintf(cmc_name[cpu], "%s%d", action->name, cpu);
+                       ret = bind_virq_to_irqhandler(VIRQ_MCA_CMC, cpu,
+                                                     action->handler,
+                                                     action->flags,
+                                                     cmc_name[cpu],
+                                                     action->dev_id);
+                       per_cpu(cmc_irq,cpu) = ret;
+                       printk(KERN_INFO "register VIRQ_MCA_CMC (%s) to xen "
+                              "irq (%d)\n", cmc_name[cpu], ret);
+                       break;
+               case IA64_CMCP_VECTOR:
+                       sprintf(cmcp_name[cpu], "%s%d", action->name, cpu);
+                       ret = bind_ipi_to_irqhandler(CMCP_VECTOR, cpu,
+                                                    action->handler,
+                                                    action->flags,
+                                                    cmcp_name[cpu],
+                                                    action->dev_id);
+                       per_cpu(cmcp_irq,cpu) = ret;
+                       printk(KERN_INFO "register CMCP_VECTOR (%s) to xen "
+                              "irq (%d)\n", cmcp_name[cpu], ret);
+                       break;
+               case IA64_CPEP_VECTOR:
+                       sprintf(cpep_name[cpu], "%s%d", action->name, cpu);
+                       ret = bind_ipi_to_irqhandler(CPEP_VECTOR, cpu,
+                                                    action->handler,
+                                                    action->flags,
+                                                    cpep_name[cpu],
+                                                    action->dev_id);
+                       per_cpu(cpep_irq,cpu) = ret;
+                       printk(KERN_INFO "register CPEP_VECTOR (%s) to xen "
+                              "irq (%d)\n", cpep_name[cpu], ret);
+                       break;
+               case IA64_CPE_VECTOR:
+                       printk(KERN_WARNING "register IA64_CPE_VECTOR "
+                              "IGNORED\n");
+                       break;
                default:
                        printk(KERN_WARNING "Percpu irq %d is unsupported by 
xen!\n", irq);
                        break;
@@ -373,6 +423,18 @@ unbind_evtchn_callback(struct notifier_b
 
        if (action == CPU_DEAD) {
                /* Unregister evtchn.  */
+               if (per_cpu(cpep_irq,cpu) >= 0) {
+                       unbind_from_irqhandler(per_cpu(cpep_irq, cpu), NULL);
+                       per_cpu(cpep_irq, cpu) = -1;
+               }
+               if (per_cpu(cmcp_irq,cpu) >= 0) {
+                       unbind_from_irqhandler(per_cpu(cmcp_irq, cpu), NULL);
+                       per_cpu(cmcp_irq, cpu) = -1;
+               }
+               if (per_cpu(cmc_irq,cpu) >= 0) {
+                       unbind_from_irqhandler(per_cpu(cmc_irq, cpu), NULL);
+                       per_cpu(cmc_irq, cpu) = -1;
+               }
                if (per_cpu(ipi_irq,cpu) >= 0) {
                        unbind_from_irqhandler (per_cpu(ipi_irq, cpu), NULL);
                        per_cpu(ipi_irq, cpu) = -1;
@@ -503,6 +565,12 @@ ia64_send_ipi (int cpu, int vector, int 
                case IA64_IPI_RESCHEDULE:
                        irq = per_cpu(ipi_to_irq, cpu)[RESCHEDULE_VECTOR];
                        break;
+               case IA64_CMCP_VECTOR:
+                       irq = per_cpu(ipi_to_irq, cpu)[CMCP_VECTOR];
+                       break;
+               case IA64_CPEP_VECTOR:
+                       irq = per_cpu(ipi_to_irq, cpu)[CPEP_VECTOR];
+                       break;
                default:
                        printk(KERN_WARNING"Unsupported IPI type 0x%x\n", 
vector);
                        irq = 0;
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/kernel/setup.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c     Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/setup.c     Tue Dec 12 09:58:42 
2006 -0600
@@ -550,13 +550,15 @@ setup_arch (char **cmdline_p)
                       xen_start_info->nr_pages, xen_start_info->flags);
 
                if (!is_initial_xendomain()) {
-                       extern int console_use_vt;
+#if !defined(CONFIG_VT) || !defined(CONFIG_DUMMY_CONSOLE)
                        conswitchp = NULL;
-                       console_use_vt = 0;
+#endif
                }
        }
-#endif
-#endif
+       xencons_early_setup();
+#endif
+#endif
+
 
        /* enable IA-64 Machine Check Abort Handling unless disabled */
        if (!strstr(saved_command_line, "nomca"))
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/arch/ia64/xen/Makefile
--- a/linux-2.6-xen-sparse/arch/ia64/xen/Makefile       Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/Makefile       Tue Dec 12 09:58:42 
2006 -0600
@@ -4,6 +4,6 @@
 
 obj-y := hypercall.o xenivt.o xenentry.o xensetup.o xenpal.o xenhpski.o \
         hypervisor.o pci-dma-xen.o util.o xencomm.o xcom_hcall.o \
-        xcom_mini.o xcom_privcmd.o
+        xcom_mini.o xcom_privcmd.o mem.o
 
 pci-dma-xen-y := ../../i386/kernel/pci-dma-xen.o
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c   Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c   Tue Dec 12 09:58:42 
2006 -0600
@@ -497,7 +497,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_ar
                            unsigned long addr,
                            struct xen_ia64_privcmd_range* privcmd_range,
                            int i,
-                           unsigned long mfn,
+                           unsigned long gmfn,
                            pgprot_t prot,
                            domid_t domid)
 {
@@ -506,7 +506,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_ar
        unsigned long gpfn;
        unsigned long flags;
 
-       if ((addr & ~PAGE_MASK) != 0 || mfn == INVALID_MFN) {
+       if ((addr & ~PAGE_MASK) != 0 || gmfn == INVALID_MFN) {
                error = -EINVAL;
                goto out;
        }
@@ -521,7 +521,7 @@ xen_ia64_privcmd_entry_mmap(struct vm_ar
        if (pgprot_val(prot) == PROT_READ) {
                flags = ASSIGN_readonly;
        }
-       error = HYPERVISOR_add_physmap(gpfn, mfn, flags, domid);
+       error = HYPERVISOR_add_physmap_with_gmfn(gpfn, gmfn, flags, domid);
        if (error != 0) {
                goto out;
        }
@@ -732,7 +732,7 @@ int
 int
 direct_remap_pfn_range(struct vm_area_struct *vma,
                       unsigned long address,   // process virtual address
-                      unsigned long mfn,       // mfn, mfn + 1, ... mfn + 
size/PAGE_SIZE
+                      unsigned long gmfn,      // gmfn, gmfn + 1, ... gmfn + 
size/PAGE_SIZE
                       unsigned long size,
                       pgprot_t prot,
                       domid_t  domid)          // target domain
@@ -755,13 +755,13 @@ direct_remap_pfn_range(struct vm_area_st
 
        i = (address - vma->vm_start) >> PAGE_SHIFT;
        for (offset = 0; offset < size; offset += PAGE_SIZE) {
-               error = xen_ia64_privcmd_entry_mmap(vma, (address + offset) & 
PAGE_MASK, privcmd_range, entry_offset + i, mfn, prot, domid);
+               error = xen_ia64_privcmd_entry_mmap(vma, (address + offset) & 
PAGE_MASK, privcmd_range, entry_offset + i, gmfn, prot, domid);
                if (error != 0) {
                        break;
                }
 
                i++;
-               mfn++;
+               gmfn++;
         }
 
        return error;
@@ -1050,3 +1050,55 @@ EXPORT_SYMBOL_GPL(p2m_pte);
 EXPORT_SYMBOL_GPL(p2m_pte);
 EXPORT_SYMBOL_GPL(p2m_phystomach);
 #endif
+
+///////////////////////////////////////////////////////////////////////////
+// for xenoprof
+
+struct resource*
+xen_ia64_allocate_resource(unsigned long size)
+{
+       struct resource* res;
+       int error;
+       
+       res = kmalloc(sizeof(*res), GFP_KERNEL);
+       if (res == NULL)
+               return ERR_PTR(-ENOMEM);
+
+       res->name = "Xen";
+       res->flags = IORESOURCE_MEM;
+       error = allocate_resource(&iomem_resource, res, PAGE_ALIGN(size),
+                                 privcmd_resource_min, privcmd_resource_max,
+                                 IA64_GRANULE_SIZE, NULL, NULL);
+       if (error) {
+               kfree(res);
+               return ERR_PTR(error);
+       }
+       return res;
+}
+EXPORT_SYMBOL_GPL(xen_ia64_allocate_resource);
+
+void
+xen_ia64_release_resource(struct resource* res)
+{
+       release_resource(res);
+       kfree(res);
+}
+EXPORT_SYMBOL_GPL(xen_ia64_release_resource);
+
+void
+xen_ia64_unmap_resource(struct resource* res)
+{
+       unsigned long gpfn = res->start >> PAGE_SHIFT;
+       unsigned long nr_pages = (res->end - res->start) >> PAGE_SHIFT;
+       unsigned long i;
+       
+       for (i = 0; i < nr_pages; i++) {
+               int error = HYPERVISOR_zap_physmap(gpfn + i, 0);
+               if (error)
+                       printk(KERN_ERR
+                              "%s:%d zap_phsymap failed %d gpfn %lx\n",
+                              __func__, __LINE__, error, gpfn + i);
+       }
+       xen_ia64_release_resource(res);
+}
+EXPORT_SYMBOL_GPL(xen_ia64_unmap_resource);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/xen/xcom_hcall.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xcom_hcall.c   Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xcom_hcall.c   Tue Dec 12 09:58:42 
2006 -0600
@@ -32,10 +32,12 @@
 #include <xen/interface/callback.h>
 #include <xen/interface/acm_ops.h>
 #include <xen/interface/hvm/params.h>
+#include <xen/interface/xenoprof.h>
 #include <asm/hypercall.h>
 #include <asm/page.h>
 #include <asm/uaccess.h>
 #include <asm/xen/xencomm.h>
+#include <asm/perfmon.h>
 
 /* Xencomm notes:
  * This file defines hypercalls to be used by xencomm.  The hypercalls simply
@@ -301,3 +303,63 @@ xencomm_hypercall_suspend(unsigned long 
 
        return xencomm_arch_hypercall_suspend(xencomm_create_inline(&arg));
 }
+
+int
+xencomm_hypercall_xenoprof_op(int op, void *arg)
+{
+       switch (op) {
+       case XENOPROF_init:
+       case XENOPROF_set_active:
+       case XENOPROF_set_passive:
+       case XENOPROF_counter:
+       case XENOPROF_get_buffer:
+               break;
+
+       case XENOPROF_reset_active_list:
+       case XENOPROF_reset_passive_list:
+       case XENOPROF_reserve_counters:
+       case XENOPROF_setup_events:
+       case XENOPROF_enable_virq:
+       case XENOPROF_start:
+       case XENOPROF_stop:
+       case XENOPROF_disable_virq:
+       case XENOPROF_release_counters:
+       case XENOPROF_shutdown:
+               return xencomm_arch_hypercall_xenoprof_op(op, arg);
+               break;
+
+       default:
+               printk("%s: op %d isn't supported\n", __func__, op);
+               return -ENOSYS;
+       }
+       return xencomm_arch_hypercall_xenoprof_op(op,
+                                                 xencomm_create_inline(arg));
+}
+
+int
+xencomm_hypercall_perfmon_op(unsigned long cmd, void* arg, unsigned long count)
+{
+       switch (cmd) {
+       case PFM_GET_FEATURES:
+       case PFM_CREATE_CONTEXT:
+       case PFM_WRITE_PMCS:
+       case PFM_WRITE_PMDS:
+       case PFM_LOAD_CONTEXT:
+               break;
+
+       case PFM_DESTROY_CONTEXT:
+       case PFM_UNLOAD_CONTEXT:
+       case PFM_START:
+       case PFM_STOP:
+               return xencomm_arch_hypercall_perfmon_op(cmd, arg, count);
+
+       default:
+               printk("%s:%d cmd %ld isn't supported\n",
+                      __func__,__LINE__, cmd);
+               BUG();
+       }
+
+       return xencomm_arch_hypercall_perfmon_op(cmd,
+                                                xencomm_create_inline(arg),
+                                                count);
+}
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/xen/xcom_mini.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xcom_mini.c    Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xcom_mini.c    Tue Dec 12 09:58:42 
2006 -0600
@@ -28,12 +28,14 @@
 #include <xen/interface/physdev.h>
 #include <xen/interface/grant_table.h>
 #include <xen/interface/hvm/params.h>
+#include <xen/interface/xenoprof.h>
 #ifdef CONFIG_VMX_GUEST
 #include <asm/hypervisor.h>
 #else
 #include <asm/hypercall.h>
 #endif
 #include <asm/xen/xencomm.h>
+#include <asm/perfmon.h>
 
 int
 xencomm_mini_hypercall_event_channel_op(int cmd, void *op)
@@ -92,6 +94,9 @@ xencommize_mini_grant_table_op(struct xe
                break;
        case GNTTABOP_transfer:
                argsize = sizeof(struct gnttab_transfer);
+               break;
+       case GNTTABOP_copy:
+               argsize = sizeof(struct gnttab_copy);
                break;
        default:
                printk("%s: unknown mini grant table op %d\n", __func__, cmd);
@@ -317,3 +322,96 @@ xencomm_mini_hypercall_xen_version(int c
        return xencomm_arch_hypercall_xen_version(cmd, desc);
 }
 EXPORT_SYMBOL(xencomm_mini_hypercall_xen_version);
+
+int
+xencomm_mini_hypercall_xenoprof_op(int op, void *arg)
+{
+       unsigned int argsize;
+       struct xencomm_mini xc_area[2];
+       int nbr_area = 2;
+       struct xencomm_handle *desc;
+       int rc;
+
+       switch (op) {
+       case XENOPROF_init:
+               argsize = sizeof(xenoprof_init_t);
+               break;
+       case XENOPROF_set_active:
+               argsize = sizeof(domid_t);
+               break;
+       case XENOPROF_set_passive:
+               argsize = sizeof(xenoprof_passive_t);
+               break;
+       case XENOPROF_counter:
+               argsize = sizeof(xenoprof_counter_t);
+               break;
+       case XENOPROF_get_buffer:
+               argsize = sizeof(xenoprof_get_buffer_t);
+               break;
+
+       case XENOPROF_reset_active_list:
+       case XENOPROF_reset_passive_list:
+       case XENOPROF_reserve_counters:
+       case XENOPROF_setup_events:
+       case XENOPROF_enable_virq:
+       case XENOPROF_start:
+       case XENOPROF_stop:
+       case XENOPROF_disable_virq:
+       case XENOPROF_release_counters:
+       case XENOPROF_shutdown:
+               return xencomm_arch_hypercall_xenoprof_op(op, arg);
+
+       default:
+               printk("%s: op %d isn't supported\n", __func__, op);
+               return -ENOSYS;
+       }
+       rc = xencomm_create_mini(xc_area, &nbr_area, arg, argsize, &desc);
+       if (rc)
+               return rc;
+       return xencomm_arch_hypercall_xenoprof_op(op, desc);
+}
+EXPORT_SYMBOL_GPL(xencomm_mini_hypercall_xenoprof_op);
+
+int
+xencomm_mini_hypercall_perfmon_op(unsigned long cmd, void* arg,
+                                  unsigned long count)
+{
+       unsigned int argsize;
+       struct xencomm_mini xc_area[2];
+       int nbr_area = 2;
+       struct xencomm_handle *desc;
+       int rc;
+
+       switch (cmd) {
+       case PFM_GET_FEATURES:
+               argsize = sizeof(pfarg_features_t);
+               break;
+       case PFM_CREATE_CONTEXT:
+               argsize = sizeof(pfarg_context_t);
+               break;
+       case PFM_LOAD_CONTEXT:
+               argsize = sizeof(pfarg_load_t);
+               break;
+       case PFM_WRITE_PMCS:
+       case PFM_WRITE_PMDS:
+               argsize = sizeof(pfarg_reg_t) * count;
+               break;
+
+       case PFM_DESTROY_CONTEXT:
+       case PFM_UNLOAD_CONTEXT:
+       case PFM_START:
+       case PFM_STOP:
+               return xencomm_arch_hypercall_perfmon_op(cmd, arg, count);
+
+       default:
+               printk("%s:%d cmd %ld isn't supported\n",
+                      __func__, __LINE__, cmd);
+               BUG();
+       }
+
+       rc = xencomm_create_mini(xc_area, &nbr_area, arg, argsize, &desc);
+       if (rc)
+               return rc;
+       return xencomm_arch_hypercall_perfmon_op(cmd, desc, count);
+}
+EXPORT_SYMBOL_GPL(xencomm_mini_hypercall_perfmon_op);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c Tue Dec 12 09:58:42 
2006 -0600
@@ -579,9 +579,16 @@ xencomm_privcmd_hvm_op(privcmd_hypercall
        case HVMOP_set_param:
                argsize = sizeof(xen_hvm_param_t);
                break;
-       case HVMOP_set_irq_level:
-               argsize = sizeof(xen_hvm_set_irq_level_t);
-               break;
+       case HVMOP_set_pci_intx_level:
+               argsize = sizeof(xen_hvm_set_pci_intx_level_t);
+               break;
+       case HVMOP_set_isa_irq_level:
+               argsize = sizeof(xen_hvm_set_isa_irq_level_t);
+               break;
+       case HVMOP_set_pci_link_route:
+               argsize = sizeof(xen_hvm_set_pci_link_route_t);
+               break;
+
        default:
                printk("%s: unknown HVMOP %d\n", __func__, cmd);
                return -EINVAL;
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S     Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xenentry.S     Tue Dec 12 09:58:42 
2006 -0600
@@ -237,6 +237,47 @@ END(ia64_trace_syscall)
 END(ia64_trace_syscall)
 #endif
 
+#ifdef CONFIG_XEN
+GLOBAL_ENTRY(xen_ret_from_clone)
+       PT_REGS_UNWIND_INFO(0)
+       movl r16=running_on_xen;;
+       ld4 r16=[r16];;
+       cmp.eq p7,p0=r16,r0
+(p7)   br.cond.sptk.many __ia64_ret_from_clone;;
+#else  
+GLOBAL_ENTRY(ia64_ret_from_clone)
+       PT_REGS_UNWIND_INFO(0)
+#endif 
+{      /*
+        * Some versions of gas generate bad unwind info if the first 
instruction of a
+        * procedure doesn't go into the first slot of a bundle.  This is a 
workaround.
+        */
+       nop.m 0
+       nop.i 0
+       /*
+        * We need to call schedule_tail() to complete the scheduling process.
+        * Called by ia64_switch_to() after do_fork()->copy_thread().  r8 
contains the
+        * address of the previously executing task.
+        */
+       br.call.sptk.many rp=ia64_invoke_schedule_tail
+}
+.ret8:
+       adds r2=TI_FLAGS+IA64_TASK_SIZE,r13
+       ;;
+       ld4 r2=[r2]
+       ;;
+       mov r8=0
+       and r2=_TIF_SYSCALL_TRACEAUDIT,r2
+       ;;
+       cmp.ne p6,p0=r2,r0
+(p6)   br.cond.spnt .strace_check_retval
+       ;;                                      // added stop bits to prevent 
r8 dependency
+#ifdef CONFIG_XEN
+       br.cond.sptk ia64_ret_from_syscall
+END(xen_ret_from_clone)
+#else
+END(ia64_ret_from_clone)
+#endif         
 /*
  * ia64_leave_syscall(): Same as ia64_leave_kernel, except that it doesn't
  *     need to switch to bank 0 and doesn't restore the scratch registers.
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/arch/x86_64/Kconfig
--- a/linux-2.6-xen-sparse/arch/x86_64/Kconfig  Tue Dec 12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/x86_64/Kconfig  Tue Dec 12 09:58:42 2006 -0600
@@ -435,7 +435,7 @@ config X86_MCE_AMD
 
 config KEXEC
        bool "kexec system call (EXPERIMENTAL)"
-       depends on EXPERIMENTAL && !X86_64_XEN
+       depends on EXPERIMENTAL && !XEN_UNPRIVILEGED_GUEST
        help
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c        Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/e820-xen.c        Tue Dec 12 
09:58:42 2006 -0600
@@ -260,7 +260,11 @@ void __init e820_reserve_resources(struc
                        request_resource(res, &data_resource);
 #endif
 #ifdef CONFIG_KEXEC
-                       request_resource(res, &crashk_res);
+                       if (crashk_res.start != crashk_res.end)
+                               request_resource(res, &crashk_res);
+#ifdef CONFIG_XEN
+                       xen_machine_kexec_register_resources(res);
+#endif
 #endif
                }
        }
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c       Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c       Tue Dec 12 
09:58:42 2006 -0600
@@ -80,6 +80,10 @@
 #include <asm/mach-xen/setup_arch_post.h>
 #include <xen/interface/memory.h>
 
+#ifdef CONFIG_XEN
+#include <xen/interface/kexec.h>
+#endif
+
 extern unsigned long start_pfn;
 extern struct edid_info edid_info;
 
@@ -450,6 +454,7 @@ static __init void parse_cmdline_early (
                 * after a kernel panic.
                 */
                else if (!memcmp(from, "crashkernel=", 12)) {
+#ifndef CONFIG_XEN
                        unsigned long size, base;
                        size = memparse(from+12, &from);
                        if (*from == '@') {
@@ -460,6 +465,10 @@ static __init void parse_cmdline_early (
                                crashk_res.start = base;
                                crashk_res.end   = base + size - 1;
                        }
+#else
+                       printk("Ignoring crashkernel command line, "
+                              "parameter will be supplied by xen\n");
+#endif
                }
 #endif
 
@@ -812,10 +821,14 @@ void __init setup_arch(char **cmdline_p)
 #endif
 #endif /* !CONFIG_XEN */
 #ifdef CONFIG_KEXEC
+#ifdef CONFIG_XEN
+       xen_machine_kexec_setup_resources();
+#else
        if (crashk_res.start != crashk_res.end) {
                reserve_bootmem(crashk_res.start,
                        crashk_res.end - crashk_res.start + 1);
        }
+#endif
 #endif
 
        paging_init();
@@ -970,10 +983,12 @@ void __init setup_arch(char **cmdline_p)
 #endif
 #endif
                } else {
-                       extern int console_use_vt;
-                       console_use_vt = 0;
-               }
-       }
+#if defined(CONFIG_VT) && defined(CONFIG_DUMMY_CONSOLE)
+                       conswitchp = &dummy_con;
+#endif
+                }
+       }
+       xencons_early_setup();
 #else  /* CONFIG_XEN */
 
 #ifdef CONFIG_VT
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/drivers/xen/Kconfig
--- a/linux-2.6-xen-sparse/drivers/xen/Kconfig  Tue Dec 12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/Kconfig  Tue Dec 12 09:58:42 2006 -0600
@@ -172,6 +172,29 @@ config XEN_NETDEV_FRONTEND
          dedicated device-driver domain, or your master control domain
          (domain 0), then you almost certainly want to say Y here.
 
+config XEN_FRAMEBUFFER
+       tristate "Framebuffer-device frontend driver"
+       depends on XEN && FB
+       select FB_CFB_FILLRECT
+       select FB_CFB_COPYAREA
+       select FB_CFB_IMAGEBLIT
+       default y
+       help
+         The framebuffer-device frontend drivers allows the kernel to create a
+         virtual framebuffer.  This framebuffer can be viewed in another
+         domain.  Unless this domain has access to a real video card, you
+         probably want to say Y here.
+
+config XEN_KEYBOARD
+       tristate "Keyboard-device frontend driver"
+       depends on XEN && XEN_FRAMEBUFFER && INPUT
+       default y
+       help
+         The keyboard-device frontend driver allows the kernel to create a
+         virtual keyboard.  This keyboard can then be driven by another
+         domain.  If you've said Y to CONFIG_XEN_FRAMEBUFFER, you probably
+         want to say Y here.
+
 config XEN_SCRUB_PAGES
        bool "Scrub memory before freeing it to Xen"
        default y
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/drivers/xen/Makefile
--- a/linux-2.6-xen-sparse/drivers/xen/Makefile Tue Dec 12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/Makefile Tue Dec 12 09:58:42 2006 -0600
@@ -15,3 +15,5 @@ obj-$(CONFIG_XEN_NETDEV_FRONTEND)     += net
 obj-$(CONFIG_XEN_NETDEV_FRONTEND)      += netfront/
 obj-$(CONFIG_XEN_PCIDEV_BACKEND)       += pciback/
 obj-$(CONFIG_XEN_PCIDEV_FRONTEND)      += pcifront/
+obj-$(CONFIG_XEN_FRAMEBUFFER)          += fbfront/
+obj-$(CONFIG_XEN_KEYBOARD)             += fbfront/
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/blkfront/blkfront.c      Tue Dec 12 
09:58:42 2006 -0600
@@ -359,7 +359,7 @@ static void blkfront_closing(struct xenb
        DPRINTK("blkfront_closing: %s removed\n", dev->nodename);
 
        if (info->rq == NULL)
-               return;
+               goto out;
 
        spin_lock_irqsave(&blkif_io_lock, flags);
        /* No more blkif_request(). */
@@ -373,6 +373,7 @@ static void blkfront_closing(struct xenb
 
        xlvbd_del(info);
 
+ out:
        xenbus_frontend_closed(dev);
 }
 
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/drivers/xen/char/mem.c
--- a/linux-2.6-xen-sparse/drivers/xen/char/mem.c       Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/char/mem.c       Tue Dec 12 09:58:42 
2006 -0600
@@ -147,7 +147,7 @@ static inline int uncached_access(struct
        return 0;
 }
 
-static int mmap_mem(struct file * file, struct vm_area_struct * vma)
+static int xen_mmap_mem(struct file * file, struct vm_area_struct * vma)
 {
        size_t size = vma->vm_end - vma->vm_start;
 
@@ -200,6 +200,6 @@ struct file_operations mem_fops = {
        .llseek         = memory_lseek,
        .read           = read_mem,
        .write          = write_mem,
-       .mmap           = mmap_mem,
+       .mmap           = xen_mmap_mem,
        .open           = open_mem,
 };
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/console/console.c
--- a/linux-2.6-xen-sparse/drivers/xen/console/console.c        Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c        Tue Dec 12 
09:58:42 2006 -0600
@@ -57,6 +57,7 @@
 #include <xen/interface/event_channel.h>
 #include <asm/hypervisor.h>
 #include <xen/evtchn.h>
+#include <xen/xenbus.h>
 #include <xen/xencons.h>
 
 /*
@@ -64,45 +65,63 @@
  *  'xencons=off'  [XC_OFF]:     Console is disabled.
  *  'xencons=tty'  [XC_TTY]:     Console attached to '/dev/tty[0-9]+'.
  *  'xencons=ttyS' [XC_SERIAL]:  Console attached to '/dev/ttyS[0-9]+'.
- *                 [XC_DEFAULT]: DOM0 -> XC_SERIAL ; all others -> XC_TTY.
+ *  'xencons=xvc'  [XC_XVC]:     Console attached to '/dev/xvc0'.
+ *  default:                     DOM0 -> XC_SERIAL ; all others -> XC_TTY.
  * 
  * NB. In mode XC_TTY, we create dummy consoles for tty2-63. This suppresses
  * warnings from standard distro startup scripts.
  */
-static enum { XC_OFF, XC_DEFAULT, XC_TTY, XC_SERIAL } xc_mode = XC_DEFAULT;
+static enum {
+       XC_OFF, XC_TTY, XC_SERIAL, XC_XVC
+} xc_mode;
 static int xc_num = -1;
+
+/* /dev/xvc0 device number allocated by lanana.org. */
+#define XEN_XVC_MAJOR 204
+#define XEN_XVC_MINOR 191
 
 #ifdef CONFIG_MAGIC_SYSRQ
 static unsigned long sysrq_requested;
 extern int sysrq_enabled;
 #endif
 
+void xencons_early_setup(void)
+{
+       extern int console_use_vt;
+
+       if (is_initial_xendomain()) {
+               xc_mode = XC_SERIAL;
+       } else {
+               xc_mode = XC_TTY;
+               console_use_vt = 0;
+       }
+}
+
 static int __init xencons_setup(char *str)
 {
        char *q;
        int n;
-
-       if (!strncmp(str, "ttyS", 4))
+       extern int console_use_vt;
+
+       console_use_vt = 1;
+       if (!strncmp(str, "ttyS", 4)) {
                xc_mode = XC_SERIAL;
-       else if (!strncmp(str, "tty", 3))
+               str += 4;
+       } else if (!strncmp(str, "tty", 3)) {
                xc_mode = XC_TTY;
-       else if (!strncmp(str, "off", 3))
+               str += 3;
+               console_use_vt = 0;
+       } else if (!strncmp(str, "xvc", 3)) {
+               xc_mode = XC_XVC;
+               str += 3;
+       } else if (!strncmp(str, "off", 3)) {
                xc_mode = XC_OFF;
-
-       switch (xc_mode) {
-       case XC_SERIAL:
-               n = simple_strtol(str+4, &q, 10);
-               if (q > (str + 4))
-                       xc_num = n;
-               break;
-       case XC_TTY:
-               n = simple_strtol(str+3, &q, 10);
-               if (q > (str + 3))
-                       xc_num = n;
-               break;
-       default:
-               break;
-       }
+               str += 3;
+       }
+
+       n = simple_strtol(str, &q, 10);
+       if (q != str)
+               xc_num = n;
 
        return 1;
 }
@@ -189,18 +208,20 @@ static int __init xen_console_init(void)
                goto out;
 
        if (is_initial_xendomain()) {
-               if (xc_mode == XC_DEFAULT)
-                       xc_mode = XC_SERIAL;
                kcons_info.write = kcons_write_dom0;
        } else {
                if (!xen_start_info->console.domU.evtchn)
                        goto out;
-               if (xc_mode == XC_DEFAULT)
-                       xc_mode = XC_TTY;
                kcons_info.write = kcons_write;
        }
 
        switch (xc_mode) {
+       case XC_XVC:
+               strcpy(kcons_info.name, "xvc");
+               if (xc_num == -1)
+                       xc_num = 0;
+               break;
+
        case XC_SERIAL:
                strcpy(kcons_info.name, "ttyS");
                if (xc_num == -1)
@@ -305,7 +326,7 @@ void dom0_init_screen_info(const struct 
 /******************** User-space console driver (/dev/console) ************/
 
 #define DRV(_d)         (_d)
-#define DUMMY_TTY(_tty) ((xc_mode != XC_SERIAL) &&             \
+#define DUMMY_TTY(_tty) ((xc_mode == XC_TTY) &&                \
                         ((_tty)->index != (xc_num - 1)))
 
 static struct termios *xencons_termios[MAX_NR_CONSOLES];
@@ -628,8 +649,8 @@ static int __init xencons_init(void)
                        return rc;
        }
 
-       xencons_driver = alloc_tty_driver((xc_mode == XC_SERIAL) ?
-                                         1 : MAX_NR_CONSOLES);
+       xencons_driver = alloc_tty_driver((xc_mode == XC_TTY) ?
+                                         MAX_NR_CONSOLES : 1);
        if (xencons_driver == NULL)
                return -ENOMEM;
 
@@ -644,14 +665,23 @@ static int __init xencons_init(void)
        DRV(xencons_driver)->termios         = xencons_termios;
        DRV(xencons_driver)->termios_locked  = xencons_termios_locked;
 
-       if (xc_mode == XC_SERIAL) {
+       switch (xc_mode) {
+       case XC_XVC:
+               DRV(xencons_driver)->name        = "xvc";
+               DRV(xencons_driver)->major       = XEN_XVC_MAJOR;
+               DRV(xencons_driver)->minor_start = XEN_XVC_MINOR;
+               DRV(xencons_driver)->name_base   = xc_num;
+               break;
+       case XC_SERIAL:
                DRV(xencons_driver)->name        = "ttyS";
                DRV(xencons_driver)->minor_start = 64 + xc_num;
-               DRV(xencons_driver)->name_base   = 0 + xc_num;
-       } else {
+               DRV(xencons_driver)->name_base   = xc_num;
+               break;
+       default:
                DRV(xencons_driver)->name        = "tty";
                DRV(xencons_driver)->minor_start = 1;
                DRV(xencons_driver)->name_base   = 1;
+               break;
        }
 
        tty_set_operations(xencons_driver, &xencons_ops);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/core/Makefile
--- a/linux-2.6-xen-sparse/drivers/xen/core/Makefile    Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/core/Makefile    Tue Dec 12 09:58:42 
2006 -0600
@@ -11,3 +11,4 @@ obj-$(CONFIG_XEN_SKBUFF)      += skbuff.o
 obj-$(CONFIG_XEN_SKBUFF)       += skbuff.o
 obj-$(CONFIG_XEN_REBOOT)       += reboot.o machine_reboot.o
 obj-$(CONFIG_XEN_SMPBOOT)      += smpboot.o
+obj-$(CONFIG_KEXEC)            += machine_kexec.o
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/core/evtchn.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c    Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/core/evtchn.c    Tue Dec 12 09:58:42 
2006 -0600
@@ -244,35 +244,42 @@ asmlinkage void evtchn_do_upcall(struct 
 
 static int find_unbound_irq(void)
 {
+       static int warned;
+       int dynirq, irq;
+
+       for (dynirq = 0; dynirq < NR_DYNIRQS; dynirq++) {
+               irq = dynirq_to_irq(dynirq);
+               if (irq_bindcount[irq] == 0)
+                       return irq;
+       }
+
+       if (!warned) {
+               warned = 1;
+               printk(KERN_WARNING "No available IRQ to bind to: "
+                      "increase NR_DYNIRQS.\n");
+       }
+
+       return -ENOSPC;
+}
+
+static int bind_evtchn_to_irq(unsigned int evtchn)
+{
        int irq;
 
-       /* Only allocate from dynirq range */
-       for (irq = DYNIRQ_BASE; irq < NR_IRQS; irq++)
-               if (irq_bindcount[irq] == 0)
-                       break;
-
-       if (irq == NR_IRQS)
-               panic("No available IRQ to bind to: increase NR_IRQS!\n");
-
-       return irq;
-}
-
-static int bind_evtchn_to_irq(unsigned int evtchn)
-{
-       int irq;
-
        spin_lock(&irq_mapping_update_lock);
 
        if ((irq = evtchn_to_irq[evtchn]) == -1) {
-               irq = find_unbound_irq();
+               if ((irq = find_unbound_irq()) < 0)
+                       goto out;
+
                evtchn_to_irq[evtchn] = irq;
                irq_info[irq] = mk_irq_info(IRQT_EVTCHN, 0, evtchn);
        }
 
        irq_bindcount[irq]++;
 
+ out:
        spin_unlock(&irq_mapping_update_lock);
-
        return irq;
 }
 
@@ -284,6 +291,9 @@ static int bind_virq_to_irq(unsigned int
        spin_lock(&irq_mapping_update_lock);
 
        if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1) {
+               if ((irq = find_unbound_irq()) < 0)
+                       goto out;
+
                bind_virq.virq = virq;
                bind_virq.vcpu = cpu;
                if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_virq,
@@ -291,7 +301,6 @@ static int bind_virq_to_irq(unsigned int
                        BUG();
                evtchn = bind_virq.port;
 
-               irq = find_unbound_irq();
                evtchn_to_irq[evtchn] = irq;
                irq_info[irq] = mk_irq_info(IRQT_VIRQ, virq, evtchn);
 
@@ -302,8 +311,8 @@ static int bind_virq_to_irq(unsigned int
 
        irq_bindcount[irq]++;
 
+ out:
        spin_unlock(&irq_mapping_update_lock);
-
        return irq;
 }
 
@@ -315,13 +324,15 @@ static int bind_ipi_to_irq(unsigned int 
        spin_lock(&irq_mapping_update_lock);
 
        if ((irq = per_cpu(ipi_to_irq, cpu)[ipi]) == -1) {
+               if ((irq = find_unbound_irq()) < 0)
+                       goto out;
+
                bind_ipi.vcpu = cpu;
                if (HYPERVISOR_event_channel_op(EVTCHNOP_bind_ipi,
                                                &bind_ipi) != 0)
                        BUG();
                evtchn = bind_ipi.port;
 
-               irq = find_unbound_irq();
                evtchn_to_irq[evtchn] = irq;
                irq_info[irq] = mk_irq_info(IRQT_IPI, ipi, evtchn);
 
@@ -332,8 +343,8 @@ static int bind_ipi_to_irq(unsigned int 
 
        irq_bindcount[irq]++;
 
+ out:
        spin_unlock(&irq_mapping_update_lock);
-
        return irq;
 }
 
@@ -383,6 +394,9 @@ int bind_evtchn_to_irqhandler(
        int retval;
 
        irq = bind_evtchn_to_irq(evtchn);
+       if (irq < 0)
+               return irq;
+
        retval = request_irq(irq, handler, irqflags, devname, dev_id);
        if (retval != 0) {
                unbind_from_irq(irq);
@@ -405,6 +419,9 @@ int bind_virq_to_irqhandler(
        int retval;
 
        irq = bind_virq_to_irq(virq, cpu);
+       if (irq < 0)
+               return irq;
+
        retval = request_irq(irq, handler, irqflags, devname, dev_id);
        if (retval != 0) {
                unbind_from_irq(irq);
@@ -427,6 +444,9 @@ int bind_ipi_to_irqhandler(
        int retval;
 
        irq = bind_ipi_to_irq(ipi, cpu);
+       if (irq < 0)
+               return irq;
+
        retval = request_irq(irq, handler, irqflags, devname, dev_id);
        if (retval != 0) {
                unbind_from_irq(irq);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/core/smpboot.c
--- a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c   Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c   Tue Dec 12 09:58:42 
2006 -0600
@@ -33,7 +33,7 @@ extern irqreturn_t smp_reschedule_interr
 extern irqreturn_t smp_reschedule_interrupt(int, void *, struct pt_regs *);
 extern irqreturn_t smp_call_function_interrupt(int, void *, struct pt_regs *);
 
-extern void local_setup_timer(unsigned int cpu);
+extern int local_setup_timer(unsigned int cpu);
 extern void local_teardown_timer(unsigned int cpu);
 
 extern void hypervisor_callback(void);
@@ -110,32 +110,45 @@ set_cpu_sibling_map(int cpu)
        cpu_data[cpu].booted_cores = 1;
 }
 
-static void xen_smp_intr_init(unsigned int cpu)
-{
+static int xen_smp_intr_init(unsigned int cpu)
+{
+       int rc;
+
+       per_cpu(resched_irq, cpu) = per_cpu(callfunc_irq, cpu) = -1;
+
        sprintf(resched_name[cpu], "resched%d", cpu);
-       per_cpu(resched_irq, cpu) =
-               bind_ipi_to_irqhandler(
-                       RESCHEDULE_VECTOR,
-                       cpu,
-                       smp_reschedule_interrupt,
-                       SA_INTERRUPT,
-                       resched_name[cpu],
-                       NULL);
-       BUG_ON(per_cpu(resched_irq, cpu) < 0);
+       rc = bind_ipi_to_irqhandler(RESCHEDULE_VECTOR,
+                                   cpu,
+                                   smp_reschedule_interrupt,
+                                   SA_INTERRUPT,
+                                   resched_name[cpu],
+                                   NULL);
+       if (rc < 0)
+               goto fail;
+       per_cpu(resched_irq, cpu) = rc;
 
        sprintf(callfunc_name[cpu], "callfunc%d", cpu);
-       per_cpu(callfunc_irq, cpu) =
-               bind_ipi_to_irqhandler(
-                       CALL_FUNCTION_VECTOR,
-                       cpu,
-                       smp_call_function_interrupt,
-                       SA_INTERRUPT,
-                       callfunc_name[cpu],
-                       NULL);
-       BUG_ON(per_cpu(callfunc_irq, cpu) < 0);
-
-       if (cpu != 0)
-               local_setup_timer(cpu);
+       rc = bind_ipi_to_irqhandler(CALL_FUNCTION_VECTOR,
+                                   cpu,
+                                   smp_call_function_interrupt,
+                                   SA_INTERRUPT,
+                                   callfunc_name[cpu],
+                                   NULL);
+       if (rc < 0)
+               goto fail;
+       per_cpu(callfunc_irq, cpu) = rc;
+
+       if ((cpu != 0) && ((rc = local_setup_timer(cpu)) != 0))
+               goto fail;
+
+       return 0;
+
+ fail:
+       if (per_cpu(resched_irq, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(resched_irq, cpu), NULL);
+       if (per_cpu(callfunc_irq, cpu) >= 0)
+               unbind_from_irqhandler(per_cpu(callfunc_irq, cpu), NULL);
+       return rc;
 }
 
 #ifdef CONFIG_HOTPLUG_CPU
@@ -253,7 +266,8 @@ void __init smp_prepare_cpus(unsigned in
 
        set_cpu_sibling_map(0);
 
-       xen_smp_intr_init(0);
+       if (xen_smp_intr_init(0))
+               BUG();
 
        /* Restrict the possible_map according to max_cpus. */
        while ((num_possible_cpus() > 1) && (num_possible_cpus() > max_cpus)) {
@@ -419,7 +433,13 @@ int __devinit __cpu_up(unsigned int cpu)
        set_cpu_sibling_map(cpu);
        wmb();
 
-       xen_smp_intr_init(cpu);
+
+       rc = xen_smp_intr_init(cpu);
+       if (rc) {
+               remove_siblinginfo(cpu);
+               return rc;
+       }
+
        cpu_set(cpu, cpu_online_map);
 
        rc = HYPERVISOR_vcpu_op(VCPUOP_up, cpu, NULL);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c        Tue Dec 12 
09:58:42 2006 -0600
@@ -183,7 +183,7 @@ static struct sk_buff *netbk_copy_skb(st
 
        BUG_ON(skb_shinfo(skb)->frag_list != NULL);
 
-       nskb = alloc_skb(SKB_MAX_HEAD(0), GFP_ATOMIC);
+       nskb = alloc_skb(SKB_MAX_HEAD(0), GFP_ATOMIC | __GFP_NOWARN);
        if (unlikely(!nskb))
                goto err;
 
@@ -1224,7 +1224,8 @@ static void net_tx_action(unsigned long 
                            ret < MAX_SKB_FRAGS) ?
                        PKT_PROT_LEN : txreq.size;
 
-               skb = alloc_skb(data_len + 16 + NET_IP_ALIGN, GFP_ATOMIC);
+               skb = alloc_skb(data_len + 16 + NET_IP_ALIGN,
+                               GFP_ATOMIC | __GFP_NOWARN);
                if (unlikely(skb == NULL)) {
                        DPRINTK("Can't allocate a skb in start_xmit.\n");
                        netbk_tx_err(netif, &txreq, i);
@@ -1506,13 +1507,12 @@ static int __init netback_init(void)
        netif_xenbus_init();
 
 #ifdef NETBE_DEBUG_INTERRUPT
-       (void)bind_virq_to_irqhandler(
-               VIRQ_DEBUG,
-               0,
-               netif_be_dbg,
-               SA_SHIRQ, 
-               "net-be-dbg",
-               &netif_be_dbg);
+       (void)bind_virq_to_irqhandler(VIRQ_DEBUG,
+                                     0,
+                                     netif_be_dbg,
+                                     SA_SHIRQ, 
+                                     "net-be-dbg",
+                                     &netif_be_dbg);
 #endif
 
        return 0;
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/xenbus/Makefile
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/Makefile  Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/Makefile  Tue Dec 12 09:58:42 
2006 -0600
@@ -1,13 +1,9 @@ obj-y  += xenbus.o
-obj-y  += xenbus.o
+obj-y += xenbus_client.o xenbus_comms.o xenbus_xs.o xenbus_probe.o
 obj-$(CONFIG_XEN_BACKEND) += xenbus_be.o
 
 xenbus_be-objs =
 xenbus_be-objs += xenbus_backend_client.o
 
-xenbus-objs =
-xenbus-objs += xenbus_client.o
-xenbus-objs += xenbus_comms.o
-xenbus-objs += xenbus_xs.o
-xenbus-objs += xenbus_probe.o
-obj-$(CONFIG_XEN_BACKEND) += xenbus_probe_backend.o
+xenbus-$(CONFIG_XEN_BACKEND) += xenbus_probe_backend.o
+obj-y += $(xenbus-y) $(xenbus-m)
 obj-$(CONFIG_XEN_XENBUS_DEV) += xenbus_dev.o
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_client.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_client.c   Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_client.c   Tue Dec 12 
09:58:42 2006 -0600
@@ -289,6 +289,7 @@ int xenbus_free_evtchn(struct xenbus_dev
 
        return err;
 }
+EXPORT_SYMBOL_GPL(xenbus_free_evtchn);
 
 
 enum xenbus_state xenbus_read_driver_state(const char *path)
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c    Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c    Tue Dec 12 
09:58:42 2006 -0600
@@ -52,7 +52,7 @@ extern int xenstored_ready;
 extern int xenstored_ready;
 static DECLARE_WORK(probe_work, xenbus_probe, NULL);
 
-DECLARE_WAIT_QUEUE_HEAD(xb_waitq);
+static DECLARE_WAIT_QUEUE_HEAD(xb_waitq);
 
 static irqreturn_t wake_waiting(int irq, void *unused, struct pt_regs *regs)
 {
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h    Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.h    Tue Dec 12 
09:58:42 2006 -0600
@@ -38,7 +38,6 @@ int xb_write(const void *data, unsigned 
 int xb_write(const void *data, unsigned len);
 int xb_read(void *data, unsigned len);
 int xs_input_avail(void);
-extern wait_queue_head_t xb_waitq;
 extern struct xenstore_domain_interface *xen_store_interface;
 extern int xen_store_evtchn;
 
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.h
--- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.h    Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.h    Tue Dec 12 
09:58:42 2006 -0600
@@ -34,7 +34,7 @@
 #ifndef _XENBUS_PROBE_H
 #define _XENBUS_PROBE_H
 
-#ifdef CONFIG_XEN_BACKEND
+#if defined(CONFIG_XEN_BACKEND) || defined(CONFIG_XEN_BACKEND_MODULE)
 extern void xenbus_backend_suspend(int (*fn)(struct device *, void *));
 extern void xenbus_backend_resume(int (*fn)(struct device *, void *));
 extern void xenbus_backend_probe_and_watch(void);
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypercall.h
--- a/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypercall.h    Tue Dec 
12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-i386/mach-xen/asm/hypercall.h    Tue Dec 
12 09:58:42 2006 -0600
@@ -395,5 +395,13 @@ HYPERVISOR_xenoprof_op(
        return _hypercall2(int, xenoprof_op, op, arg);
 }
 
+static inline int
+HYPERVISOR_kexec_op(
+       unsigned long op, void *args)
+{
+       return _hypercall2(int, kexec_op, op, args);
+}
+
+
 
 #endif /* __HYPERCALL_H__ */
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-ia64/hypercall.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/hypercall.h Tue Dec 12 09:58:42 
2006 -0600
@@ -271,6 +271,12 @@ HYPERVISOR_physdev_op(int cmd, void *arg
        }
 }
 
+static inline int
+xencomm_arch_hypercall_xenoprof_op(int op, struct xencomm_handle *arg)
+{
+       return _hypercall2(int, xenoprof_op, op, arg);
+}
+
 extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs);
 static inline void exit_idle(void) {}
 #define do_IRQ(irq, regs) ({                   \
@@ -381,6 +387,28 @@ HYPERVISOR_add_physmap(unsigned long gpf
        return ret;
 }
 
+static inline unsigned long
+__HYPERVISOR_add_physmap_with_gmfn(unsigned long gpfn, unsigned long gmfn,
+                                   unsigned long flags, domid_t domid)
+{
+       return _hypercall5(unsigned long, ia64_dom0vp_op,
+                          IA64_DOM0VP_add_physmap_with_gmfn,
+                          gpfn, gmfn, flags, domid);
+}
+
+static inline unsigned long
+HYPERVISOR_add_physmap_with_gmfn(unsigned long gpfn, unsigned long gmfn,
+                                unsigned long flags, domid_t domid)
+{
+       unsigned long ret = 0;
+       BUG_ON(!is_running_on_xen());//XXX
+       if (is_running_on_xen()) {
+               ret = __HYPERVISOR_add_physmap_with_gmfn(gpfn, gmfn,
+                                                        flags, domid);
+       }
+       return ret;
+}
+
 #ifdef CONFIG_XEN_IA64_EXPOSE_P2M
 static inline unsigned long
 HYPERVISOR_expose_p2m(unsigned long conv_start_gpfn,
@@ -392,6 +420,15 @@ HYPERVISOR_expose_p2m(unsigned long conv
                           assign_start_gpfn, expose_size, granule_pfn);
 }
 #endif
+
+static inline int
+xencomm_arch_hypercall_perfmon_op(unsigned long cmd,
+                                  struct xencomm_handle *arg,
+                                  unsigned long count)
+{
+       return _hypercall4(int, ia64_dom0vp_op,
+                          IA64_DOM0VP_perfmon, cmd, arg, count);
+}
 
 // for balloon driver
 #define HYPERVISOR_update_va_mapping(va, new_val, flags) (0)
@@ -406,6 +443,8 @@ HYPERVISOR_expose_p2m(unsigned long conv
 #define HYPERVISOR_console_io xencomm_mini_hypercall_console_io
 #define HYPERVISOR_hvm_op xencomm_mini_hypercall_hvm_op
 #define HYPERVISOR_memory_op xencomm_mini_hypercall_memory_op
+#define HYPERVISOR_xenoprof_op xencomm_mini_hypercall_xenoprof_op
+#define HYPERVISOR_perfmon_op xencomm_mini_hypercall_perfmon_op
 #else
 #define HYPERVISOR_sched_op xencomm_hypercall_sched_op
 #define HYPERVISOR_event_channel_op xencomm_hypercall_event_channel_op
@@ -415,6 +454,8 @@ HYPERVISOR_expose_p2m(unsigned long conv
 #define HYPERVISOR_console_io xencomm_hypercall_console_io
 #define HYPERVISOR_hvm_op xencomm_hypercall_hvm_op
 #define HYPERVISOR_memory_op xencomm_hypercall_memory_op
+#define HYPERVISOR_xenoprof_op xencomm_hypercall_xenoprof_op
+#define HYPERVISOR_perfmon_op xencomm_hypercall_perfmon_op
 #endif
 
 #define HYPERVISOR_suspend xencomm_hypercall_suspend
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/include/asm-ia64/io.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/io.h        Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/io.h        Tue Dec 12 09:58:42 
2006 -0600
@@ -129,6 +129,11 @@ extern int valid_mmap_phys_addr_range (u
        (((bvec_to_bus((vec1)) + (vec1)->bv_len) == bvec_to_bus((vec2))) && \
         ((bvec_to_pseudophys((vec1)) + (vec1)->bv_len) ==              \
          bvec_to_pseudophys((vec2))))
+
+/* We will be supplying our own /dev/mem implementation */
+#define ARCH_HAS_DEV_MEM
+#define ARCH_HAS_DEV_MEM_MMAP_MEM
+int xen_mmap_mem(struct file * file, struct vm_area_struct * vma);
 #endif /* CONFIG_XEN */
 
 # endif /* KERNEL */
@@ -458,6 +463,8 @@ ioremap (unsigned long offset, unsigned 
 ioremap (unsigned long offset, unsigned long size)
 {
        offset = HYPERVISOR_ioremap(offset, size);
+       if (IS_ERR_VALUE(offset))
+               return (void __iomem*)offset;
        return (void __iomem *) (__IA64_UNCACHED_OFFSET | (offset));
 }
 
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/include/asm-ia64/irq.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/irq.h       Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/irq.h       Tue Dec 12 09:58:42 
2006 -0600
@@ -42,7 +42,9 @@
 
 #define RESCHEDULE_VECTOR      0
 #define IPI_VECTOR             1
-#define NR_IPIS                        2
+#define CMCP_VECTOR            2
+#define CPEP_VECTOR            3
+#define NR_IPIS                        4
 #endif /* CONFIG_XEN */
 
 /*
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-ia64/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/privop.h    Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/privop.h    Tue Dec 12 09:58:42 
2006 -0600
@@ -49,6 +49,7 @@
 #define ia64_leave_kernel              __ia64_leave_kernel
 #define ia64_leave_syscall             __ia64_leave_syscall
 #define ia64_trace_syscall             __ia64_trace_syscall
+#define ia64_ret_from_clone            __ia64_ret_from_clone
 #define ia64_switch_to                 __ia64_switch_to
 #define ia64_pal_call_static           __ia64_pal_call_static
 
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/privop.h        Tue Dec 12 
09:58:42 2006 -0600
@@ -295,6 +295,7 @@ extern void xen_ptcga(unsigned long addr
 #define        ia64_leave_kernel               xen_leave_kernel
 #define        ia64_leave_syscall              xen_leave_syscall
 #define        ia64_trace_syscall              xen_trace_syscall
+#define        ia64_ret_from_clone             xen_ret_from_clone
 #define        ia64_switch_to                  xen_switch_to
 #define        ia64_pal_call_static            xen_pal_call_static
 
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-ia64/xen/xcom_hcall.h
--- a/linux-2.6-xen-sparse/include/asm-ia64/xen/xcom_hcall.h    Tue Dec 12 
09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-ia64/xen/xcom_hcall.h    Tue Dec 12 
09:58:42 2006 -0600
@@ -46,6 +46,11 @@ extern unsigned long xencomm_hypercall_h
 
 extern int xencomm_hypercall_suspend(unsigned long srec);
 
+extern int xencomm_hypercall_xenoprof_op(int op, void *arg);
+
+extern int xencomm_hypercall_perfmon_op(unsigned long cmd, void* arg,
+                                        unsigned long count);
+
 /* Using mini xencomm.  */
 extern int xencomm_mini_hypercall_console_io(int cmd, int count, char *str);
 
@@ -68,6 +73,11 @@ extern int xencomm_mini_hypercall_memory
 
 extern unsigned long xencomm_mini_hypercall_hvm_op(int cmd, void *arg);
 
+extern int xencomm_mini_hypercall_xenoprof_op(int op, void *arg);
+
+extern int xencomm_mini_hypercall_perfmon_op(unsigned long cmd, void* arg,
+                                             unsigned long count);
+
 /* For privcmd.  Locally declare argument type to avoid include storm.
    Type coherency will be checked within privcmd.c  */
 struct privcmd_hypercall;
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hypercall.h
--- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hypercall.h  Tue Dec 
12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/hypercall.h  Tue Dec 
12 09:58:42 2006 -0600
@@ -396,4 +396,11 @@ HYPERVISOR_xenoprof_op(
        return _hypercall2(int, xenoprof_op, op, arg);
 }
 
+static inline int
+HYPERVISOR_kexec_op(
+       unsigned long op, void *args)
+{
+       return _hypercall2(int, kexec_op, op, args);
+}
+
 #endif /* __HYPERCALL_H__ */
diff -r a510c94ceaa3 -r 749c399d73df 
linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/ptrace.h
--- a/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/ptrace.h     Tue Dec 
12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/ptrace.h     Tue Dec 
12 09:58:42 2006 -0600
@@ -90,6 +90,8 @@ extern unsigned long profile_pc(struct p
 #define profile_pc(regs) instruction_pointer(regs)
 #endif
 
+#include <linux/compiler.h>
+
 void signal_fault(struct pt_regs *regs, void __user *frame, char *where);
 
 struct task_struct;
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/include/xen/xencons.h
--- a/linux-2.6-xen-sparse/include/xen/xencons.h        Tue Dec 12 09:56:06 
2006 -0600
+++ b/linux-2.6-xen-sparse/include/xen/xencons.h        Tue Dec 12 09:58:42 
2006 -0600
@@ -14,4 +14,6 @@ int xencons_ring_init(void);
 int xencons_ring_init(void);
 int xencons_ring_send(const char *data, unsigned len);
 
+void xencons_early_setup(void);
+
 #endif /* __ASM_XENCONS_H__ */
diff -r a510c94ceaa3 -r 749c399d73df linux-2.6-xen-sparse/mm/memory.c
--- a/linux-2.6-xen-sparse/mm/memory.c  Tue Dec 12 09:56:06 2006 -0600
+++ b/linux-2.6-xen-sparse/mm/memory.c  Tue Dec 12 09:58:42 2006 -0600
@@ -882,6 +882,7 @@ unsigned long zap_page_range(struct vm_a
                tlb_finish_mmu(tlb, address, end);
        return end;
 }
+EXPORT_SYMBOL(zap_page_range);
 
 /*
  * Do a quick page-table lookup for a single page.
diff -r a510c94ceaa3 -r 749c399d73df tools/Makefile
--- a/tools/Makefile    Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/Makefile    Tue Dec 12 09:58:42 2006 -0600
@@ -19,6 +19,8 @@ SUBDIRS-y += libaio
 SUBDIRS-y += libaio
 SUBDIRS-y += blktap
 SUBDIRS-y += libfsimage
+SUBDIRS-$(XENFB_TOOLS) += xenfb
+SUBDIRS-$(LIBXENAPI_BINDINGS) += libxen
 
 # These don't cross-compile
 ifeq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH))
diff -r a510c94ceaa3 -r 749c399d73df tools/blktap/drivers/block-aio.c
--- a/tools/blktap/drivers/block-aio.c  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/blktap/drivers/block-aio.c  Tue Dec 12 09:58:42 2006 -0600
@@ -311,12 +311,8 @@ int tdaio_do_callbacks(struct td_state *
                struct pending_aio *pio;
                
                pio = &prv->pending_aio[(long)io->data];
-               
-               if (ep->res != io->u.c.nbytes) {
-                       /* TODO: handle this case better. */
-                       DPRINTF("AIO did less than I asked it to. \n");
-               }
-               rsp += pio->cb(s, ep->res2, pio->id, pio->private);
+               rsp += pio->cb(s, ep->res == io->u.c.nbytes ? 0 : 1,
+                              pio->id, pio->private);
 
                prv->iocb_free[prv->iocb_free_count++] = io;
        }
diff -r a510c94ceaa3 -r 749c399d73df tools/blktap/drivers/block-qcow.c
--- a/tools/blktap/drivers/block-qcow.c Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/blktap/drivers/block-qcow.c Tue Dec 12 09:58:42 2006 -0600
@@ -1145,13 +1145,6 @@ int tdqcow_do_callbacks(struct td_state 
 
                 pio = &prv->pending_aio[(long)io->data];
 
-                if (ep->res != io->u.c.nbytes) {
-                        /* TODO: handle this case better. */
-                       ptr = (int *)&ep->res;
-                        DPRINTF("AIO did less than I asked it to "
-                               "[%lu,%lu,%d]\n", 
-                               ep->res, io->u.c.nbytes, *ptr);
-                }
                aio_unlock(prv, pio->sector);
                if (pio->id >= 0) {
                        if (prv->crypt_method)
@@ -1162,7 +1155,7 @@ int tdqcow_do_callbacks(struct td_state 
                                                &prv->aes_decrypt_key);
                        prv->nr_reqs[pio->qcow_idx]--;
                        if (prv->nr_reqs[pio->qcow_idx] == 0) 
-                               rsp += pio->cb(s, ep->res2, pio->id, 
+                               rsp += pio->cb(s, ep->res == io->u.c.nbytes ? 0 
: 1, pio->id, 
                                               pio->private);
                } else if (pio->id == -2) free(pio->buf);
 
diff -r a510c94ceaa3 -r 749c399d73df tools/blktap/drivers/tapdisk.c
--- a/tools/blktap/drivers/tapdisk.c    Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/blktap/drivers/tapdisk.c    Tue Dec 12 09:58:42 2006 -0600
@@ -424,8 +424,7 @@ int send_responses(struct td_state *s, i
        }
        
        if (res != 0) {
-               DPRINTF("*** request error %d! \n", res);
-               return 0;
+               blkif->pending_list[idx].status = BLKIF_RSP_ERROR;
        }
 
        blkif->pending_list[idx].count--;
diff -r a510c94ceaa3 -r 749c399d73df tools/check/Makefile
--- a/tools/check/Makefile      Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/check/Makefile      Tue Dec 12 09:58:42 2006 -0600
@@ -1,3 +1,5 @@
+XEN_ROOT = ../..
+include $(XEN_ROOT)/tools/Rules.mk
 
 .PHONY: all
 all: build
@@ -5,7 +7,7 @@ all: build
 # Check this machine is OK for building on.
 .PHONY: build
 build:
-       ./chk build
+       XENFB_TOOLS=$(XENFB_TOOLS) ./chk build
 
 # Check this machine is OK for installing on.
 # DO NOT use this check from 'make install' in the parent
@@ -13,7 +15,7 @@ build:
 # copy rather than actually installing.
 .PHONY: install
 install:
-       ./chk install
+       XENFB_TOOLS=$(XENFB_TOOLS) ./chk install
 
 .PHONY: clean
 clean:
diff -r a510c94ceaa3 -r 749c399d73df tools/examples/init.d/xend
--- a/tools/examples/init.d/xend        Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/examples/init.d/xend        Tue Dec 12 09:58:42 2006 -0600
@@ -36,7 +36,10 @@ case "$1" in
   status)
        xend status
        ;;
-  restart|reload|force-reload)
+  reload)
+        xend reload
+        ;;
+  restart|force-reload)
        xend restart
        await_daemons_up
        ;;
diff -r a510c94ceaa3 -r 749c399d73df tools/examples/init.d/xendomains
--- a/tools/examples/init.d/xendomains  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/examples/init.d/xendomains  Tue Dec 12 09:58:42 2006 -0600
@@ -204,12 +204,14 @@ start()
        return; 
     fi
 
+    saved_domains=" "
     if [ "$XENDOMAINS_RESTORE" = "true" ] &&
        contains_something "$XENDOMAINS_SAVE"
     then
         mkdir -p $(dirname "$LOCKFILE")
        touch $LOCKFILE
        echo -n "Restoring Xen domains:"
+       saved_domains=`ls $XENDOMAINS_SAVE`
        for dom in $XENDOMAINS_SAVE/*; do
            echo -n " ${dom##*/}"
            xm restore $dom
@@ -234,9 +236,14 @@ start()
        # Create all domains with config files in XENDOMAINS_AUTO.
        # TODO: We should record which domain name belongs 
        # so we have the option to selectively shut down / migrate later
+       # If a domain statefile from $XENDOMAINS_SAVE matches a domain name
+       # in $XENDOMAINS_AUTO, do not try to start that domain; if it didn't 
+       # restore correctly it requires administrative attention.
        for dom in $XENDOMAINS_AUTO/*; do
            echo -n " ${dom##*/}"
-           if is_running $dom; then
+           shortdom=$(echo $dom | sed -n 's/^.*\/\(.*\)$/\1/p')
+           echo $saved_domains | grep -w $shortdom > /dev/null
+           if [ $? -eq 0 ] || is_running $dom; then
                echo -n "(skip)"
            else
                xm create --quiet --defconfig $dom
diff -r a510c94ceaa3 -r 749c399d73df tools/examples/network-route
--- a/tools/examples/network-route      Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/examples/network-route      Tue Dec 12 09:58:42 2006 -0600
@@ -16,4 +16,12 @@
 #
 #============================================================================
 
+dir=$(dirname "$0")
+. "$dir/xen-script-common.sh"
+
+evalVariables "$@"
+
+netdev=${netdev:-eth${vifnum}}
+
 echo 1 >/proc/sys/net/ipv4/ip_forward
+echo 1 >/proc/sys/net/ipv4/conf/${netdev}/proxy_arp
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/Makefile
--- a/tools/firmware/hvmloader/Makefile Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/Makefile Tue Dec 12 09:58:42 2006 -0600
@@ -18,18 +18,13 @@
 # Place - Suite 330, Boston, MA 02111-1307 USA.
 #
 
-# External CFLAGS can do more harm than good.
-CFLAGS :=
-
 override XEN_TARGET_ARCH = x86_32
 XEN_ROOT = ../../..
-include $(XEN_ROOT)/Config.mk
+CFLAGS := -I$(XEN_ROOT)/tools/libxc -I.
+include $(XEN_ROOT)/tools/Rules.mk
 
 # The HVM loader is started in 32-bit mode at the address below:
 LOADADDR = 0x100000
-
-DEFINES  =-DDEBUG
-XENINC   =-I$(XEN_ROOT)/tools/libxc
 
 # Disable PIE/SSP if GCC supports them. They can break us.
 CFLAGS  += $(call cc-option,$(CC),-nopie,)
@@ -37,10 +32,10 @@ CFLAGS  += $(call cc-option,$(CC),-fno-s
 CFLAGS  += $(call cc-option,$(CC),-fno-stack-protector-all,)
 
 OBJCOPY  = objcopy
-CFLAGS  += $(DEFINES) -I. $(XENINC) -fno-builtin -O2 -msoft-float
+CFLAGS  += -fno-builtin -O2 -msoft-float
 LDFLAGS  = -nostdlib -Wl,-N -Wl,-Ttext -Wl,$(LOADADDR)
 
-SRCS = hvmloader.c mp_tables.c util.c smbios.c acpi_utils.c
+SRCS = hvmloader.c mp_tables.c util.c smbios.c
 OBJS = $(patsubst %.c,%.o,$(SRCS))
 
 .PHONY: all
@@ -65,5 +60,5 @@ roms.h:       ../rombios/BIOS-bochs-latest ../
 .PHONY: clean
 clean:
        rm -f roms.h acpi.h
-       rm -f hvmloader hvmloader.tmp hvmloader.o $(OBJS)
+       rm -f hvmloader hvmloader.tmp *.o
        $(MAKE) -C acpi clean
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/acpi/Makefile
--- a/tools/firmware/hvmloader/acpi/Makefile    Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/acpi/Makefile    Tue Dec 12 09:58:42 2006 -0600
@@ -27,15 +27,28 @@ IASL_VER = acpica-unix-20050513
 IASL_VER = acpica-unix-20050513
 IASL_URL = 
http://developer.intel.com/technology/iapc/acpi/downloads/$(IASL_VER).tar.gz
 
+# Disable PIE/SSP if GCC supports them. They can break us.
+CFLAGS  += $(call cc-option,$(CC),-nopie,)
+CFLAGS  += $(call cc-option,$(CC),-fno-stack-protector,)
+CFLAGS  += $(call cc-option,$(CC),-fno-stack-protector-all,)
+
+CFLAGS  += -fno-builtin -O2 -msoft-float
+
 vpath iasl $(PATH)
 all: acpi.a
+
+ssdt_tpm.h: ssdt_tpm.asl
+       $(MAKE) iasl
+       iasl -tc ssdt_tpm.asl
+       mv ssdt_tpm.hex ssdt_tpm.h
+       rm -f *.aml
 
 dsdt.c: dsdt.asl
        $(MAKE) iasl
        iasl -tc dsdt.asl
        mv dsdt.hex dsdt.c
        echo "int DsdtLen=sizeof(AmlCode);" >> dsdt.c
-       rm *.aml
+       rm -f *.aml
 
 iasl:
        @echo
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/acpi/acpi2_0.h
--- a/tools/firmware/hvmloader/acpi/acpi2_0.h   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/acpi/acpi2_0.h   Tue Dec 12 09:58:42 2006 -0600
@@ -119,7 +119,7 @@ struct acpi_20_rsdp {
  */
 struct acpi_20_rsdt {
     struct acpi_header header;
-    uint32_t entry[ACPI_MAX_NUM_TABLES];
+    uint32_t entry[1];
 };
 #define ACPI_2_0_RSDT_REVISION 0x01
 
@@ -128,20 +128,19 @@ struct acpi_20_rsdt {
  */
 struct acpi_20_xsdt {
     struct acpi_header header;
-    uint64_t entry[ACPI_MAX_NUM_TABLES];
+    uint64_t entry[1];
 };
 #define ACPI_2_0_XSDT_REVISION 0x01
 
 /*
  * TCG Hardware Interface Table (TCPA)
  */
-
-typedef struct _ACPI_2_0_TCPA_CLIENT {
-    struct acpi_header header;
-    uint16_t PlatformClass;
-    uint32_t LAML;
-    uint64_t LASA;
-} ACPI_2_0_TCPA_CLIENT;
+struct acpi_20_tcpa {
+    struct acpi_header header;
+    uint16_t platform_class;
+    uint32_t laml;
+    uint64_t lasa;
+};
 
 #define ACPI_2_0_TCPA_REVISION 0x02
 #define ACPI_2_0_TCPA_LAML_SIZE (64*1024)
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/acpi/build.c
--- a/tools/firmware/hvmloader/acpi/build.c     Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/acpi/build.c     Tue Dec 12 09:58:42 2006 -0600
@@ -17,8 +17,12 @@
  */
 
 #include "acpi2_0.h"
+#include "ssdt_tpm.h"
 #include "../config.h"
 #include "../util.h"
+#include <xen/hvm/e820.h>
+
+#define align16(sz) (((sz) + 15) & ~15)
 
 extern struct acpi_20_rsdp Rsdp;
 extern struct acpi_20_rsdt Rsdt;
@@ -103,39 +107,88 @@ int construct_madt(struct acpi_20_madt *
     madt->header.length = offset;
     set_checksum(madt, offsetof(struct acpi_header, checksum), offset);
 
-    return offset;
-}
-
-/*
- * Copy all the ACPI table to buffer.
- * Buffer layout: FACS, DSDT, FADT, MADT, XSDT, RSDT, RSDP.
- */
+    return align16(offset);
+}
+
+int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs)
+{
+    int offset = 0, nr_tables = 0;
+    struct acpi_20_madt *madt;
+    struct acpi_20_tcpa *tcpa;
+    static const uint16_t tis_signature[] = {0x0001, 0x0001, 0x0001};
+    uint16_t *tis_hdr;
+
+    /* MADT. */
+    if ( (get_vcpu_nr() > 1) || get_apic_mode() )
+    {
+        madt = (struct acpi_20_madt *)&buf[offset];
+        offset += construct_madt(madt);
+        table_ptrs[nr_tables++] = (unsigned long)madt;
+    }
+
+    /* TPM TCPA and SSDT. */
+    tis_hdr = (uint16_t *)0xFED40F00;
+    if ( (tis_hdr[0] == tis_signature[0]) &&
+         (tis_hdr[1] == tis_signature[1]) &&
+         (tis_hdr[2] == tis_signature[2]) )
+    {
+        memcpy(&buf[offset], AmlCode_TPM, sizeof(AmlCode_TPM));
+        table_ptrs[nr_tables++] = (unsigned long)&buf[offset];
+        offset += align16(sizeof(AmlCode_TPM));
+
+        tcpa = (struct acpi_20_tcpa *)&buf[offset];
+        memset(tcpa, 0, sizeof(*tcpa));
+        offset += align16(sizeof(*tcpa));
+        table_ptrs[nr_tables++] = (unsigned long)tcpa;
+
+        tcpa->header.signature = ACPI_2_0_TCPA_SIGNATURE;
+        tcpa->header.length    = sizeof(*tcpa);
+        tcpa->header.revision  = ACPI_2_0_TCPA_REVISION;
+        strncpy(tcpa->header.oem_id, "IBM   ", 6);
+        tcpa->header.oem_table_id = ASCII64(' ', ' ', ' ', ' ',
+                                            ' ', 'x', 'e', 'n');
+        tcpa->header.oem_revision = 1;
+        tcpa->header.creator_id   = ASCII32('I', 'B', 'M', ' ');
+        tcpa->header.creator_revision = 1;
+        tcpa->lasa = e820_malloc(
+            ACPI_2_0_TCPA_LAML_SIZE, E820_RESERVED, (uint32_t)~0);
+        if ( tcpa->lasa )
+        {
+            tcpa->laml = ACPI_2_0_TCPA_LAML_SIZE;
+            memset((char *)(unsigned long)tcpa->lasa, 0, tcpa->laml);
+            set_checksum(tcpa,
+                         offsetof(struct acpi_header, checksum),
+                         tcpa->header.length);
+        }
+    }
+
+    table_ptrs[nr_tables] = 0;
+    return align16(offset);
+}
+
+/* Copy all the ACPI table to buffer. */
 int acpi_build_tables(uint8_t *buf)
 {
     struct acpi_20_rsdp *rsdp;
     struct acpi_20_rsdt *rsdt;
     struct acpi_20_xsdt *xsdt;
     struct acpi_20_fadt *fadt;
-    struct acpi_20_madt *madt = 0;
     struct acpi_20_facs *facs;
     unsigned char       *dsdt;
-    int offset = 0, requires_madt;
-
-    requires_madt = ((get_vcpu_nr() > 1) || get_apic_mode());
-
-#define inc_offset(sz)  (offset = (offset + (sz) + 15) & ~15)
+    unsigned long        secondary_tables[16];
+    int                  offset = 0, i;
 
     facs = (struct acpi_20_facs *)&buf[offset];
     memcpy(facs, &Facs, sizeof(struct acpi_20_facs));
-    inc_offset(sizeof(struct acpi_20_facs));
+    offset += align16(sizeof(struct acpi_20_facs));
 
     dsdt = (unsigned char *)&buf[offset];
     memcpy(dsdt, &AmlCode, DsdtLen);
-    inc_offset(DsdtLen);
+    offset += align16(DsdtLen);
 
     fadt = (struct acpi_20_fadt *)&buf[offset];
     memcpy(fadt, &Fadt, sizeof(struct acpi_20_fadt));
-    inc_offset(sizeof(struct acpi_20_fadt));
+    offset += align16(sizeof(struct acpi_20_fadt));
     fadt->dsdt   = (unsigned long)dsdt;
     fadt->x_dsdt = (unsigned long)dsdt;
     fadt->firmware_ctrl   = (unsigned long)facs;
@@ -144,43 +197,33 @@ int acpi_build_tables(uint8_t *buf)
                  offsetof(struct acpi_header, checksum),
                  sizeof(struct acpi_20_fadt));
 
-    if ( requires_madt )
-    {
-        madt = (struct acpi_20_madt *)&buf[offset];
-        inc_offset(construct_madt(madt));
-    }
+    offset += construct_secondary_tables(&buf[offset], secondary_tables);
 
     xsdt = (struct acpi_20_xsdt *)&buf[offset];
-    memcpy(xsdt, &Xsdt, sizeof(struct acpi_20_xsdt));
-    inc_offset(sizeof(struct acpi_20_xsdt));
+    memcpy(xsdt, &Xsdt, sizeof(struct acpi_header));
     xsdt->entry[0] = (unsigned long)fadt;
-    xsdt->header.length = sizeof(struct acpi_header) + sizeof(uint64_t);
-    if ( requires_madt )
-    {
-        xsdt->entry[1] = (unsigned long)madt;
-        xsdt->header.length += sizeof(uint64_t);
-    }
+    for ( i = 0; secondary_tables[i]; i++ )
+        xsdt->entry[i+1] = secondary_tables[i];
+    xsdt->header.length = sizeof(struct acpi_header) + (i+1)*sizeof(uint64_t);
+    offset += align16(xsdt->header.length);
     set_checksum(xsdt,
                  offsetof(struct acpi_header, checksum),
                  xsdt->header.length);
 
     rsdt = (struct acpi_20_rsdt *)&buf[offset];
-    memcpy(rsdt, &Rsdt, sizeof(struct acpi_20_rsdt));
-    inc_offset(sizeof(struct acpi_20_rsdt));
+    memcpy(rsdt, &Rsdt, sizeof(struct acpi_header));
     rsdt->entry[0] = (unsigned long)fadt;
-    rsdt->header.length = sizeof(struct acpi_header) + sizeof(uint32_t);
-    if ( requires_madt )
-    {
-        rsdt->entry[1] = (unsigned long)madt;
-        rsdt->header.length += sizeof(uint32_t);
-    }
+    for ( i = 0; secondary_tables[i]; i++ )
+        rsdt->entry[i+1] = secondary_tables[i];
+    rsdt->header.length = sizeof(struct acpi_header) + (i+1)*sizeof(uint32_t);
+    offset += align16(rsdt->header.length);
     set_checksum(rsdt,
                  offsetof(struct acpi_header, checksum),
                  rsdt->header.length);
 
     rsdp = (struct acpi_20_rsdp *)&buf[offset];
     memcpy(rsdp, &Rsdp, sizeof(struct acpi_20_rsdp));
-    inc_offset(sizeof(struct acpi_20_rsdp));
+    offset += align16(sizeof(struct acpi_20_rsdp));
     rsdp->rsdt_address = (unsigned long)rsdt;
     rsdp->xsdt_address = (unsigned long)xsdt;
     set_checksum(rsdp,
@@ -189,8 +232,6 @@ int acpi_build_tables(uint8_t *buf)
     set_checksum(rsdp,
                  offsetof(struct acpi_20_rsdp, extended_checksum),
                  sizeof(struct acpi_20_rsdp));
-
-#undef inc_offset
 
     return offset;
 }
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c      Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/hvmloader.c      Tue Dec 12 09:58:42 2006 -0600
@@ -23,7 +23,6 @@
 #include "acpi/acpi2_0.h"  /* for ACPI_PHYSICAL_ADDRESS */
 #include "hypercall.h"
 #include "util.h"
-#include "acpi_utils.h"
 #include "smbios.h"
 #include "config.h"
 #include "apic_regs.h"
@@ -283,7 +282,6 @@ int main(void)
 int main(void)
 {
     int acpi_sz;
-    uint8_t *freemem;
 
     printf("HVM Loader\n");
 
@@ -318,12 +316,7 @@ int main(void)
     {
         printf("Loading ACPI ...\n");
         acpi_sz = acpi_build_tables((uint8_t *)ACPI_PHYSICAL_ADDRESS);
-        freemem = (uint8_t *)ACPI_PHYSICAL_ADDRESS + acpi_sz;
-        ASSERT(freemem <= (uint8_t *)0xF0000);
-        acpi_update((unsigned char *)ACPI_PHYSICAL_ADDRESS,
-                    freemem - (uint8_t *)ACPI_PHYSICAL_ADDRESS,
-                    (unsigned char *)0xF0000,
-                    &freemem);
+        ASSERT((ACPI_PHYSICAL_ADDRESS + acpi_sz) <= 0xF0000);
     }
 
     if ( check_amd() )
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/mp_tables.c
--- a/tools/firmware/hvmloader/mp_tables.c      Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/mp_tables.c      Tue Dec 12 09:58:42 2006 -0600
@@ -28,7 +28,6 @@
  * Place - Suite 330, Boston, MA 02111-1307 USA.
  */
 
-#include <acpi_utils.h>
 #include "config.h"
 
 /* FIXME find a header that already has types defined!!! */
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/hvmloader/util.h
--- a/tools/firmware/hvmloader/util.h   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/hvmloader/util.h   Tue Dec 12 09:58:42 2006 -0600
@@ -5,6 +5,9 @@
 
 #undef offsetof
 #define offsetof(t, m) ((unsigned long)&((t *)0)->m)
+
+#undef NULL
+#define NULL ((void*)0)
 
 extern void __assert_failed(char *assertion, char *file, int line)
     __attribute__((noreturn));
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/vmxassist/head.S
--- a/tools/firmware/vmxassist/head.S   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/vmxassist/head.S   Tue Dec 12 09:58:42 2006 -0600
@@ -130,7 +130,7 @@ _start:
        clts
 
        /* setup my own stack */
-       movl    $stack_top - 4*4, %esp
+       movl    $stack_top, %esp
        movl    %esp, %ebp
 
        /* go ... */
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/vmxassist/setup.c
--- a/tools/firmware/vmxassist/setup.c  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/vmxassist/setup.c  Tue Dec 12 09:58:42 2006 -0600
@@ -66,7 +66,7 @@ unsigned long memory_size;
 unsigned long memory_size;
 int initialize_real_mode;
 
-extern char stack[], stack_top[];
+extern char stack_top[];
 extern unsigned trap_handlers[];
 
 void
@@ -125,7 +125,7 @@ setup_gdt(void)
        /* setup task state segment */
        memset(&tss, 0, sizeof(tss));
        tss.ss0 = DATA_SELECTOR;
-       tss.esp0 = (unsigned) stack_top - 4*4;
+       tss.esp0 = (unsigned) stack_top;
        tss.iomap_base = offsetof(struct tss, iomap);
 
        /* initialize gdt's tss selector */
@@ -201,7 +201,7 @@ enter_real_mode(struct regs *regs)
 enter_real_mode(struct regs *regs)
 {
        /* mask off TSS busy bit */
-        gdt[TSS_SELECTOR / sizeof(gdt[0])] &= ~0x0000020000000000ULL;
+       gdt[TSS_SELECTOR / sizeof(gdt[0])] &= ~0x0000020000000000ULL;
 
        /* start 8086 emulation of BIOS */
        if (initialize_real_mode) {
@@ -219,8 +219,10 @@ enter_real_mode(struct regs *regs)
                        regs->cs = booting_vector << 8; /* AP entry point */
                        regs->eip = 0;
                }
-               regs->uesp = 0;
-               regs->uss = 0;
+
+               regs->uesp = regs->uss = 0;
+               regs->eax = regs->ecx = regs->edx = regs->ebx = 0;
+               regs->esp = regs->ebp = regs->esi = regs->edi = 0;
 
                /* intercept accesses to the PIC */
                setiomap(PIC_MASTER+PIC_CMD);
@@ -236,14 +238,12 @@ enter_real_mode(struct regs *regs)
 
                /* this should get us into 16-bit mode */
                return;
-       } else {
-               /* go from protected to real mode */
-               regs->eflags |= EFLAGS_VM;
-
-               set_mode(regs, VM86_PROTECTED_TO_REAL);
-
-               emulate(regs);
        }
+
+       /* go from protected to real mode */
+       regs->eflags |= EFLAGS_VM;
+       set_mode(regs, VM86_PROTECTED_TO_REAL);
+       emulate(regs);
 }
 
 /*
@@ -258,7 +258,7 @@ setup_ctx(void)
 
        memset(c, 0, sizeof(*c));
        c->eip = (unsigned long) switch_to_real_mode;
-       c->esp = (unsigned) stack_top - 4*4;
+       c->esp = (unsigned) stack_top;
        c->eflags = 0x2; /* no interrupts, please */
 
        /*
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/vmxassist/trap.S
--- a/tools/firmware/vmxassist/trap.S   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/vmxassist/trap.S   Tue Dec 12 09:58:42 2006 -0600
@@ -100,10 +100,6 @@ trap_handlers:
        .code32
        .align  16
 common_trap:                           /* common trap handler */
-       pushl   %gs
-       pushl   %fs
-       pushl   %ds
-       pushl   %es
        pushal
 
        movl    $(DATA_SELECTOR), %eax  /* make sure these are sane */
@@ -114,17 +110,13 @@ common_trap:                              /* common trap 
handler *
        movl    %esp, %ebp
 
        pushl   %ebp
-       pushl   52(%ebp)
-       pushl   48(%ebp)
+       pushl   36(%ebp)
+       pushl   32(%ebp)
        call    trap                    /* trap(trapno, errno, regs) */
        addl    $12, %esp
 
 trap_return:
        popal
-       popl    %es
-       popl    %ds
-       popl    %fs
-       popl    %gs
        addl    $8, %esp                /* skip trapno, errno */
        iret
        /* NOT REACHED */
@@ -152,10 +144,6 @@ switch_to_real_mode:
        pushl   oldctx+VMX_ASSIST_CTX_EIP
        pushl   $-1                     /* trapno, errno */
        pushl   $-1
-       pushl   %gs
-       pushl   %fs
-       pushl   %ds
-       pushl   %es
        pushal
 
        movl    %esp, %ebp
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/vmxassist/util.c
--- a/tools/firmware/vmxassist/util.c   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/vmxassist/util.c   Tue Dec 12 09:58:42 2006 -0600
@@ -62,17 +62,15 @@ dump_regs(struct regs *regs)
                regs->eax, regs->ecx, regs->edx, regs->ebx);
        printf("esp    %8x ebp    %8x esi    %8x edi    %8x\n",
                regs->esp, regs->ebp, regs->esi, regs->edi);
-       printf("es     %8x ds     %8x fs     %8x gs     %8x\n",
-               regs->es, regs->ds, regs->fs, regs->gs);
        printf("trapno %8x errno  %8x\n", regs->trapno, regs->errno);
        printf("eip    %8x cs     %8x eflags %8x\n",
                regs->eip, regs->cs, regs->eflags);
-       printf("uesp   %8x uss    %8x \n",
+       printf("uesp   %8x uss    %8x\n",
                regs->uesp, regs->uss);
        printf("ves    %8x vds    %8x vfs    %8x vgs    %8x\n",
                regs->ves, regs->vds, regs->vfs, regs->vgs);
 
-       printf("cr0    %8lx cr2    %8x cr3    %8lx cr4    %8lx\n",
+       printf("cr0    %8lx cr2    %8x cr3    %8lx cr4    %8lx\n\n",
                (long)oldctx.cr0, get_cr2(),
                (long)oldctx.cr3, (long)oldctx.cr4);
 }
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/vmxassist/vm86.c
--- a/tools/firmware/vmxassist/vm86.c   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/vmxassist/vm86.c   Tue Dec 12 09:58:42 2006 -0600
@@ -1,6 +1,6 @@
 /*
  * vm86.c: A vm86 emulator. The main purpose of this emulator is to do as
- * little work as possible. 
+ * little work as possible.
  *
  * Leendert van Doorn, leendert@xxxxxxxxxxxxxx
  * Copyright (c) 2005-2006, International Business Machines Corporation.
@@ -52,8 +52,8 @@ static char *rnames[] = { "ax", "cx", "d
 static char *rnames[] = { "ax", "cx", "dx", "bx", "sp", "bp", "si", "di" };
 #endif /* DEBUG */
 
-#define PDE_PS           (1 << 7)
-#define PT_ENTRY_PRESENT 0x1
+#define PDE_PS                         (1 << 7)
+#define PT_ENTRY_PRESENT       0x1
 
 /* We only support access to <=4G physical memory due to 1:1 mapping */
 static uint64_t
@@ -136,7 +136,7 @@ address(struct regs *regs, unsigned seg,
        }
 
        if (mode == VM86_REAL || seg > oldctx.gdtr_limit ||
-           (mode == VM86_REAL_TO_PROTECTED && regs->cs == seg))
+               (mode == VM86_REAL_TO_PROTECTED && regs->cs == seg))
                return ((seg & 0xFFFF) << 4) + off;
 
        gdt_phys_base = guest_linear_to_phys(oldctx.gdtr_base);
@@ -153,13 +153,13 @@ address(struct regs *regs, unsigned seg,
        seg_limit = (entry_high & 0xF0000) | (entry_low & 0xFFFF);
 
        if (entry_high & 0x8000 &&
-           ((entry_high & 0x800000 && off >> 12 <= seg_limit) ||
-           (!(entry_high & 0x800000) && off <= seg_limit)))
+               ((entry_high & 0x800000 && off >> 12 <= seg_limit) ||
+               (!(entry_high & 0x800000) && off <= seg_limit)))
                return seg_base + off;
 
        panic("should never reach here in function address():\n\t"
-             "entry=0x%08x%08x, mode=%d, seg=0x%08x, offset=0x%08x\n",
-             entry_high, entry_low, mode, seg, off);
+                 "entry=0x%08x%08x, mode=%d, seg=0x%08x, offset=0x%08x\n",
+                 entry_high, entry_low, mode, seg, off);
 
        return 0;
 }
@@ -172,7 +172,7 @@ trace(struct regs *regs, int adjust, cha
        va_list ap;
 
        if ((traceset & (1 << mode)) &&
-          (mode == VM86_REAL_TO_PROTECTED || mode == VM86_REAL)) {
+               (mode == VM86_REAL_TO_PROTECTED || mode == VM86_REAL)) {
                /* 16-bit, seg:off addressing */
                unsigned addr = address(regs, regs->cs, off);
                printf("0x%08x: 0x%x:0x%04x ", addr, regs->cs, off);
@@ -183,7 +183,7 @@ trace(struct regs *regs, int adjust, cha
                printf("\n");
        }
        if ((traceset & (1 << mode)) &&
-          (mode == VM86_PROTECTED_TO_REAL || mode == VM86_PROTECTED)) {
+               (mode == VM86_PROTECTED_TO_REAL || mode == VM86_PROTECTED)) {
                /* 16-bit, gdt addressing */
                unsigned addr = address(regs, regs->cs, off);
                printf("0x%08x: 0x%x:0x%08x ", addr, regs->cs, off);
@@ -376,9 +376,9 @@ segment(unsigned prefix, struct regs *re
        if (prefix & SEG_SS)
                seg = regs->uss;
        if (prefix & SEG_FS)
-               seg = regs->fs;
+               seg = regs->vfs;
        if (prefix & SEG_GS)
-               seg = regs->gs;
+               seg = regs->vgs;
        return seg;
 }
 
@@ -430,7 +430,7 @@ operand(unsigned prefix, struct regs *re
                        case 2: return address(regs, seg, regs->edx);
                        case 3: return address(regs, seg, regs->ebx);
                        case 4: return address(regs, seg,
-                                              sib(regs, mod, fetch8(regs)));
+                                                  sib(regs, mod, 
fetch8(regs)));
                        case 5: return address(regs, seg, fetch32(regs));
                        case 6: return address(regs, seg, regs->esi);
                        case 7: return address(regs, seg, regs->edi);
@@ -450,7 +450,7 @@ operand(unsigned prefix, struct regs *re
                        case 2: return address(regs, seg, regs->edx + disp);
                        case 3: return address(regs, seg, regs->ebx + disp);
                        case 4: return address(regs, seg,
-                                              sib(regs, mod, fetch8(regs)));
+                                                  sib(regs, mod, 
fetch8(regs)));
                        case 5: return address(regs, seg, regs->ebp + disp);
                        case 6: return address(regs, seg, regs->esi + disp);
                        case 7: return address(regs, seg, regs->edi + disp);
@@ -507,7 +507,7 @@ operand(unsigned prefix, struct regs *re
                }
        }
 
-       return 0; 
+       return 0;
 }
 
 /*
@@ -859,7 +859,7 @@ mov_to_seg(struct regs *regs, unsigned p
 
  fail:
        printf("%s:%d: missed opcode %02x %02x\n",
-              __FUNCTION__, __LINE__, opc, modrm);
+                  __FUNCTION__, __LINE__, opc, modrm);
        return 0;
 }
 
@@ -896,11 +896,11 @@ load_seg(unsigned long sel, uint32_t *ba
                  ((entry >> (32-16)) & 0x00FF0000) |
                  ((entry >> (   16)) & 0x0000FFFF));
        *limit = (((entry >> (48-16)) & 0x000F0000) |
-                 ((entry           ) & 0x0000FFFF));
+                 (entry & 0x0000FFFF));
 
        arbytes->bytes = 0;
        arbytes->fields.seg_type = (entry >> (8+32)) & 0xF; /* TYPE */
-       arbytes->fields.s =  (entry >> (12+32)) & 0x1; /* S */
+       arbytes->fields.s = (entry >> (12+32)) & 0x1; /* S */
        if (arbytes->fields.s)
                arbytes->fields.seg_type |= 1; /* accessed */
        arbytes->fields.dpl = (entry >> (13+32)) & 0x3; /* DPL */
@@ -924,7 +924,7 @@ load_or_clear_seg(unsigned long sel, uin
 load_or_clear_seg(unsigned long sel, uint32_t *base, uint32_t *limit, union 
vmcs_arbytes *arbytes)
 {
        if (!load_seg(sel, base, limit, arbytes))
-               load_seg(0, base, limit, arbytes);          
+               load_seg(0, base, limit, arbytes);
 }
 
 
@@ -934,6 +934,8 @@ static void
 static void
 protected_mode(struct regs *regs)
 {
+       extern char stack_top[];
+
        regs->eflags &= ~(EFLAGS_TF|EFLAGS_VM);
 
        oldctx.eip = regs->eip;
@@ -958,12 +960,10 @@ protected_mode(struct regs *regs)
                          &oldctx.gs_limit, &oldctx.gs_arbytes);
 
        /* initialize jump environment to warp back to protected mode */
+       regs->uss = DATA_SELECTOR;
+       regs->uesp = stack_top;
        regs->cs = CODE_SELECTOR;
-       regs->ds = DATA_SELECTOR;
-       regs->es = DATA_SELECTOR;
-       regs->fs = DATA_SELECTOR;
-       regs->gs = DATA_SELECTOR;
-       regs->eip = (unsigned) &switch_to_protected_mode;
+       regs->eip = (unsigned) switch_to_protected_mode;
 
        /* this should get us into 32-bit mode */
 }
@@ -975,10 +975,6 @@ real_mode(struct regs *regs)
 real_mode(struct regs *regs)
 {
        regs->eflags |= EFLAGS_VM | 0x02;
-       regs->ds = DATA_SELECTOR;
-       regs->es = DATA_SELECTOR;
-       regs->fs = DATA_SELECTOR;
-       regs->gs = DATA_SELECTOR;
 
        /*
         * When we transition from protected to real-mode and we
@@ -992,21 +988,21 @@ real_mode(struct regs *regs)
                        panic("%%ss 0x%lx higher than 1MB", regs->uss);
                regs->uss = address(regs, regs->uss, 0) >> 4;
        } else {
-         regs->uss = saved_rm_regs.uss;
+               regs->uss = saved_rm_regs.uss;
        }
        if (regs->vds != 0) {
                if (regs->vds >= HIGHMEM)
                        panic("%%ds 0x%lx higher than 1MB", regs->vds);
                regs->vds = address(regs, regs->vds, 0) >> 4;
        } else {
-         regs->vds = saved_rm_regs.vds;
+               regs->vds = saved_rm_regs.vds;
        }
        if (regs->ves != 0) {
                if (regs->ves >= HIGHMEM)
                        panic("%%es 0x%lx higher than 1MB", regs->ves);
                regs->ves = address(regs, regs->ves, 0) >> 4;
        } else {
-         regs->ves = saved_rm_regs.ves;
+               regs->ves = saved_rm_regs.ves;
        }
 
        /* this should get us into 16-bit mode */
@@ -1033,10 +1029,7 @@ set_mode(struct regs *regs, enum vm86_mo
                    (mode == VM86_REAL_TO_PROTECTED)) {
                        regs->eflags &= ~EFLAGS_TF;
                        real_mode(regs);
-                       break;
-               } else if (mode == VM86_REAL) {
-                       break;
-               } else
+               } else if (mode != VM86_REAL)
                        panic("unexpected real mode transition");
                break;
 
@@ -1053,28 +1046,19 @@ set_mode(struct regs *regs, enum vm86_mo
                        oldctx.fs_sel = 0;
                        oldctx.gs_sel = 0;
                        oldctx.ss_sel = 0;
-                       break;
-               } else if (mode == VM86_REAL_TO_PROTECTED) {
-                       break;
-               } else
+               } else if (mode != VM86_REAL_TO_PROTECTED)
                        panic("unexpected real-to-protected mode transition");
                break;
 
        case VM86_PROTECTED_TO_REAL:
-               if (mode == VM86_PROTECTED) {
-                       break;
-               } else
+               if (mode != VM86_PROTECTED)
                        panic("unexpected protected-to-real mode transition");
                break;
 
        case VM86_PROTECTED:
-               if (mode == VM86_REAL_TO_PROTECTED) {
-                       protected_mode(regs);
-//                     printf("<VM86_PROTECTED>\n");
-                       mode = newmode;
-                       return;
-               } else
+               if (mode != VM86_REAL_TO_PROTECTED)
                        panic("unexpected protected mode transition");
+               protected_mode(regs);
                break;
        }
 
@@ -1088,25 +1072,19 @@ jmpl(struct regs *regs, int prefix)
        unsigned n = regs->eip;
        unsigned cs, eip;
 
-       if (mode == VM86_REAL_TO_PROTECTED) { /* jump to protected mode */
-               eip = (prefix & DATA32) ? fetch32(regs) : fetch16(regs);
-               cs = fetch16(regs);
-
-               TRACE((regs, (regs->eip - n) + 1, "jmpl 0x%x:0x%x", cs, eip));
-
-                regs->cs = cs;
-                regs->eip = eip;
+       eip = (prefix & DATA32) ? fetch32(regs) : fetch16(regs);
+       cs = fetch16(regs);
+
+       TRACE((regs, (regs->eip - n) + 1, "jmpl 0x%x:0x%x", cs, eip));
+
+       regs->cs = cs;
+       regs->eip = eip;
+
+       if (mode == VM86_REAL_TO_PROTECTED)             /* jump to protected 
mode */
                set_mode(regs, VM86_PROTECTED);
-       } else if (mode == VM86_PROTECTED_TO_REAL) { /* jump to real mode */
-               eip = (prefix & DATA32) ? fetch32(regs) : fetch16(regs);
-               cs = fetch16(regs);
-
-               TRACE((regs, (regs->eip - n) + 1, "jmpl 0x%x:0x%x", cs, eip));
-
-                regs->cs = cs;
-                regs->eip = eip;
+       else if (mode == VM86_PROTECTED_TO_REAL)/* jump to real mode */
                set_mode(regs, VM86_REAL);
-       } else
+       else
                panic("jmpl");
 }
 
@@ -1117,29 +1095,22 @@ jmpl_indirect(struct regs *regs, int pre
        unsigned cs, eip;
        unsigned addr;
 
-       addr  = operand(prefix, regs, modrm);
-
-       if (mode == VM86_REAL_TO_PROTECTED) { /* jump to protected mode */
-               eip = (prefix & DATA32) ? read32(addr) : read16(addr);
-               addr += (prefix & DATA32) ? 4 : 2;
-               cs = read16(addr);
-
-               TRACE((regs, (regs->eip - n) + 1, "jmpl 0x%x:0x%x", cs, eip));
-
-                regs->cs = cs;
-                regs->eip = eip;
+       addr = operand(prefix, regs, modrm);
+
+       eip = (prefix & DATA32) ? read32(addr) : read16(addr);
+       addr += (prefix & DATA32) ? 4 : 2;
+       cs = read16(addr);
+
+       TRACE((regs, (regs->eip - n) + 1, "jmpl 0x%x:0x%x", cs, eip));
+
+       regs->cs = cs;
+       regs->eip = eip;
+
+       if (mode == VM86_REAL_TO_PROTECTED)             /* jump to protected 
mode */
                set_mode(regs, VM86_PROTECTED);
-       } else if (mode == VM86_PROTECTED_TO_REAL) { /* jump to real mode */
-               eip = (prefix & DATA32) ? read32(addr) : read16(addr);
-               addr += (prefix & DATA32) ? 4 : 2;
-               cs = read16(addr);
-
-               TRACE((regs, (regs->eip - n) + 1, "jmpl 0x%x:0x%x", cs, eip));
-
-                regs->cs = cs;
-                regs->eip = eip;
+       else if (mode == VM86_PROTECTED_TO_REAL)/* jump to real mode */
                set_mode(regs, VM86_REAL);
-       } else
+       else
                panic("jmpl");
 }
 
@@ -1158,15 +1129,14 @@ retl(struct regs *regs, int prefix)
 
        TRACE((regs, 1, "retl (to 0x%x:0x%x)", cs, eip));
 
-       if (mode == VM86_REAL_TO_PROTECTED) { /* jump to protected mode */
-                regs->cs = cs;
-                regs->eip = eip;
+       regs->cs = cs;
+       regs->eip = eip;
+
+       if (mode == VM86_REAL_TO_PROTECTED)             /* jump to protected 
mode */
                set_mode(regs, VM86_PROTECTED);
-       } else if (mode == VM86_PROTECTED_TO_REAL) { /* jump to real mode */
-                regs->cs = cs;
-                regs->eip = eip;
+       else if (mode == VM86_PROTECTED_TO_REAL)/* jump to real mode */
                set_mode(regs, VM86_REAL);
-       } else
+       else
                panic("retl");
 }
 
@@ -1266,8 +1236,8 @@ pushrm(struct regs *regs, int prefix, un
        unsigned addr;
        unsigned data;
 
-       addr  = operand(prefix, regs, modrm);
-       
+       addr = operand(prefix, regs, modrm);
+
        if (prefix & DATA32) {
                data = read32(addr);
                push32(regs, data);
@@ -1393,11 +1363,11 @@ opcode(struct regs *regs)
                case 0x3B: /* addr32 cmp r/m16, r16 */
                        if (mode != VM86_REAL && mode != VM86_REAL_TO_PROTECTED)
                                goto invalid;
-                        if ((prefix & ADDR32) == 0)
-                                goto invalid;
-                        if (!cmp(regs, prefix, opc))
-                                goto invalid;
-                        return OPC_EMULATED;
+                       if ((prefix & ADDR32) == 0)
+                               goto invalid;
+                       if (!cmp(regs, prefix, opc))
+                               goto invalid;
+                       return OPC_EMULATED;
 
                case 0x3E:
                        TRACE((regs, regs->eip - eip, "%%ds:"));
@@ -1419,7 +1389,7 @@ opcode(struct regs *regs)
                        prefix |= DATA32;
                        continue;
 
-               case 0x67: 
+               case 0x67:
                        TRACE((regs, regs->eip - eip, "addr32"));
                        prefix |= ADDR32;
                        continue;
@@ -1428,18 +1398,18 @@ opcode(struct regs *regs)
                case 0x8A: /* addr32 mov r/m8, r8 */
                        if (mode != VM86_REAL && mode != VM86_REAL_TO_PROTECTED)
                                goto invalid;
-                        if ((prefix & ADDR32) == 0)
-                                goto invalid;
-                        if (!movr(regs, prefix, opc))
-                                goto invalid;
-                        return OPC_EMULATED;
+                       if ((prefix & ADDR32) == 0)
+                               goto invalid;
+                       if (!movr(regs, prefix, opc))
+                               goto invalid;
+                       return OPC_EMULATED;
 
                case 0x89: /* addr32 mov r16, r/m16 */
                        if (mode == VM86_PROTECTED_TO_REAL) {
                                unsigned modrm = fetch8(regs);
                                unsigned addr = operand(prefix, regs, modrm);
                                unsigned val, r = (modrm >> 3) & 7;
-                               
+
                                if (prefix & DATA32) {
                                        val = getreg16(regs, r);
                                        write32(addr, val);
@@ -1454,11 +1424,11 @@ opcode(struct regs *regs)
                case 0x8B: /* addr32 mov r/m16, r16 */
                        if (mode != VM86_REAL && mode != VM86_REAL_TO_PROTECTED)
                                goto invalid;
-                        if ((prefix & ADDR32) == 0)
-                                goto invalid;
-                        if (!movr(regs, prefix, opc))
-                                goto invalid;
-                        return OPC_EMULATED;
+                       if ((prefix & ADDR32) == 0)
+                               goto invalid;
+                       if (!movr(regs, prefix, opc))
+                               goto invalid;
+                       return OPC_EMULATED;
 
                case 0x8E: /* mov r16, sreg */
                        if (!mov_to_seg(regs, prefix, opc))
@@ -1466,11 +1436,11 @@ opcode(struct regs *regs)
                        return OPC_EMULATED;
 
                case 0x8F: /* addr32 pop r/m16 */
-                        if ((prefix & ADDR32) == 0)
-                                goto invalid;
-                        if (!pop(regs, prefix, opc))
-                                goto invalid;
-                        return OPC_EMULATED;
+                       if ((prefix & ADDR32) == 0)
+                               goto invalid;
+                       if (!pop(regs, prefix, opc))
+                               goto invalid;
+                       return OPC_EMULATED;
 
                case 0x90: /* nop */
                        TRACE((regs, regs->eip - eip, "nop"));
@@ -1494,7 +1464,7 @@ opcode(struct regs *regs)
                        regs->eflags |= EFLAGS_VM;
                        return OPC_EMULATED;
 
-               case 0xA1: /* mov ax, r/m16 */ 
+               case 0xA1: /* mov ax, r/m16 */
                        {
                                int addr, data;
                                int seg = segment(prefix, regs, regs->vds);
@@ -1528,15 +1498,15 @@ opcode(struct regs *regs)
                        return OPC_EMULATED;
 
                case 0xC6: /* addr32 movb $imm, r/m8 */
-                        if ((prefix & ADDR32) == 0)
-                                goto invalid;
-                        if (!movr(regs, prefix, opc))
-                                goto invalid;
+                       if ((prefix & ADDR32) == 0)
+                               goto invalid;
+                       if (!movr(regs, prefix, opc))
+                               goto invalid;
                        return OPC_EMULATED;
 
                case 0xCB: /* retl */
                        if ((mode == VM86_REAL_TO_PROTECTED) ||
-                           (mode == VM86_PROTECTED_TO_REAL)) {
+                               (mode == VM86_PROTECTED_TO_REAL)) {
                                retl(regs, prefix);
                                return OPC_INVALID;
                        }
@@ -1574,7 +1544,7 @@ opcode(struct regs *regs)
 
                case 0xEA: /* jmpl */
                        if ((mode == VM86_REAL_TO_PROTECTED) ||
-                           (mode == VM86_PROTECTED_TO_REAL)) {
+                               (mode == VM86_PROTECTED_TO_REAL)) {
                                jmpl(regs, prefix);
                                return OPC_INVALID;
                        }
@@ -1586,7 +1556,7 @@ opcode(struct regs *regs)
                                switch((modrm >> 3) & 7) {
                                case 5: /* jmpl (indirect) */
                                        if ((mode == VM86_REAL_TO_PROTECTED) ||
-                                           (mode == VM86_PROTECTED_TO_REAL)) {
+                                               (mode == 
VM86_PROTECTED_TO_REAL)) {
                                                jmpl_indirect(regs, prefix, 
modrm);
                                                return OPC_INVALID;
                                        }
@@ -1603,7 +1573,7 @@ opcode(struct regs *regs)
 
                case 0xEB: /* short jump */
                        if ((mode == VM86_REAL_TO_PROTECTED) ||
-                           (mode == VM86_PROTECTED_TO_REAL)) {
+                               (mode == VM86_PROTECTED_TO_REAL)) {
                                disp = (char) fetch8(regs);
                                TRACE((regs, 2, "jmp 0x%x", regs->eip + disp));
                                regs->eip += disp;
@@ -1626,10 +1596,10 @@ opcode(struct regs *regs)
                        continue;
 
                case 0xF6: /* addr32 testb $imm, r/m8 */
-                        if ((prefix & ADDR32) == 0)
-                                goto invalid;
-                        if (!test(regs, prefix, opc))
-                                goto invalid;
+                       if ((prefix & ADDR32) == 0)
+                               goto invalid;
+                       if (!test(regs, prefix, opc))
+                               goto invalid;
                        return OPC_EMULATED;
 
                case 0xFA: /* cli */
@@ -1689,6 +1659,8 @@ trap(int trapno, int errno, struct regs 
        case 1: /* Debug */
                if (regs->eflags & EFLAGS_VM) {
                        /* emulate any 8086 instructions  */
+                       if (mode == VM86_REAL)
+                               return;
                        if (mode != VM86_REAL_TO_PROTECTED)
                                panic("not in real-to-protected mode");
                        emulate(regs);
@@ -1709,7 +1681,7 @@ trap(int trapno, int errno, struct regs 
        default:
        invalid:
                printf("Trap (0x%x) while in %s mode\n",
-                   trapno, regs->eflags & EFLAGS_VM ? "real" : "protected");
+                       trapno, regs->eflags & EFLAGS_VM ? "real" : 
"protected");
                if (trapno == 14)
                        printf("Page fault address 0x%x\n", get_cr2());
                dump_regs(regs);
diff -r a510c94ceaa3 -r 749c399d73df tools/firmware/vmxassist/vm86.h
--- a/tools/firmware/vmxassist/vm86.h   Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/firmware/vmxassist/vm86.h   Tue Dec 12 09:58:42 2006 -0600
@@ -34,7 +34,6 @@
 
 struct regs {
        unsigned        edi, esi, ebp, esp, ebx, edx, ecx, eax;
-       unsigned        es, ds, fs, gs;
        unsigned        trapno, errno;
        unsigned        eip, cs, eflags, uesp, uss;
        unsigned        ves, vds, vfs, vgs;
@@ -55,7 +54,6 @@ enum vm86_mode {
 
 extern enum vm86_mode prevmode, mode;
 extern struct vmx_assist_context oldctx;
-extern struct vmx_assist_context newctx;
 
 extern void emulate(struct regs *);
 extern void dump_regs(struct regs *);
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/Makefile.target
--- a/tools/ioemu/Makefile.target       Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/Makefile.target       Tue Dec 12 09:58:42 2006 -0600
@@ -296,7 +296,7 @@ endif
 
 # qemu-dm objects
 ifeq ($(ARCH),ia64)
-LIBOBJS=helper2.o exec-dm.o i8259-dm.o
+LIBOBJS=helper2.o exec-dm.o i8259-dm.o piix_pci-dm.o
 else
 LIBOBJS=helper2.o exec-dm.o i8259-dm.o rtc-dm.o piix_pci-dm.o
 endif
@@ -360,7 +360,7 @@ ifeq ($(TARGET_BASE_ARCH), i386)
 # Hardware support
 VL_OBJS+= ide.o pckbd.o ps2.o vga.o $(SOUND_HW) dma.o $(AUDIODRV)
 ifeq ($(ARCH),ia64)
-VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o piix_pci.o
+VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o
 else
 VL_OBJS+= fdc.o serial.o pc.o
 endif
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/hw/ide.c
--- a/tools/ioemu/hw/ide.c      Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/hw/ide.c      Tue Dec 12 09:58:42 2006 -0600
@@ -680,7 +680,7 @@ static void ide_sector_read(IDEState *s)
 static void ide_sector_read(IDEState *s)
 {
     int64_t sector_num;
-    int ret, n;
+    int n;
 
     s->status = READY_STAT | SEEK_STAT;
     s->error = 0; /* not needed by IDE spec, but needed by Windows */
@@ -695,7 +695,11 @@ static void ide_sector_read(IDEState *s)
 #endif
         if (n > s->req_nb_sectors)
             n = s->req_nb_sectors;
-        ret = bdrv_read(s->bs, sector_num, s->io_buffer, n);
+        if (bdrv_read(s->bs, sector_num, s->io_buffer, n) != 0) {
+            ide_abort_command(s);
+            ide_set_irq(s);
+            return;
+        }
         ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_read);
         ide_set_irq(s);
         ide_set_sector(s, sector_num + n);
@@ -721,7 +725,11 @@ static int ide_read_dma_cb(IDEState *s,
             if (n > MAX_MULT_SECTORS)
                 n = MAX_MULT_SECTORS;
             sector_num = ide_get_sector(s);
-            bdrv_read(s->bs, sector_num, s->io_buffer, n);
+            if (bdrv_read(s->bs, sector_num, s->io_buffer, n) != 0) {
+                ide_abort_command(s);
+                ide_set_irq(s);
+                return 0;
+            }
             s->io_buffer_index = 0;
             s->io_buffer_size = n * 512;
             len = s->io_buffer_size;
@@ -767,7 +775,7 @@ static void ide_sector_write(IDEState *s
 static void ide_sector_write(IDEState *s)
 {
     int64_t sector_num;
-    int ret, n, n1;
+    int n, n1;
 
     s->status = READY_STAT | SEEK_STAT;
     sector_num = ide_get_sector(s);
@@ -777,7 +785,11 @@ static void ide_sector_write(IDEState *s
     n = s->nsector;
     if (n > s->req_nb_sectors)
         n = s->req_nb_sectors;
-    ret = bdrv_write(s->bs, sector_num, s->io_buffer, n);
+    if (bdrv_write(s->bs, sector_num, s->io_buffer, n) != 0) {
+        ide_abort_command(s);
+        ide_set_irq(s);
+        return;
+    }
     s->nsector -= n;
     if (s->nsector == 0) {
         /* no more sector to write */
@@ -823,8 +835,13 @@ static int ide_write_dma_cb(IDEState *s,
         if (len == 0) {
             n = s->io_buffer_size >> 9;
             sector_num = ide_get_sector(s);
-            bdrv_write(s->bs, sector_num, s->io_buffer, 
-                       s->io_buffer_size >> 9);
+            if (bdrv_write(s->bs, sector_num, s->io_buffer, 
+                          s->io_buffer_size >> 9) != 0) {
+                ide_abort_command(s);
+                ide_set_irq(s);
+                return 0;
+            }
+
             sector_num += n;
             ide_set_sector(s, sector_num);
             s->nsector -= n;
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/hw/pci.c
--- a/tools/ioemu/hw/pci.c      Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/hw/pci.c      Tue Dec 12 09:58:42 2006 -0600
@@ -221,23 +221,16 @@ uint32_t pci_default_read_config(PCIDevi
                                  uint32_t address, int len)
 {
     uint32_t val;
-
     switch(len) {
+    case 1:
+        val = d->config[address];
+        break;
+    case 2:
+        val = le16_to_cpu(*(uint16_t *)(d->config + address));
+        break;
     default:
     case 4:
-       if (address <= 0xfc) {
-           val = le32_to_cpu(*(uint32_t *)(d->config + address));
-           break;
-       }
-       /* fall through */
-    case 2:
-        if (address <= 0xfe) {
-           val = le16_to_cpu(*(uint16_t *)(d->config + address));
-           break;
-       }
-       /* fall through */
-    case 1:
-        val = d->config[address];
+        val = le32_to_cpu(*(uint32_t *)(d->config + address));
         break;
     }
     return val;
@@ -340,8 +333,7 @@ void pci_default_write_config(PCIDevice 
 
             d->config[addr] = val;
         }
-        if (++addr > 0xff)
-               break;
+        addr++;
         val >>= 8;
     }
 
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/hw/tpm_tis.c
--- a/tools/ioemu/hw/tpm_tis.c  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/hw/tpm_tis.c  Tue Dec 12 09:58:42 2006 -0600
@@ -132,7 +132,7 @@ typedef struct TPMState {
 
 
 /* local prototypes */
-static int TPM_Send(tpmState *s, tpmBuffer *buffer, char *msg);
+static int TPM_Send(tpmState *s, tpmBuffer *buffer, uint8_t locty, char *msg);
 static int TPM_Receive(tpmState *s, tpmBuffer *buffer);
 static uint32_t vtpm_instance_from_xenstore(void);
 static void tis_poll_timer(void *opaque);
@@ -271,6 +271,8 @@ static int create_local_socket(tpmState 
 /*
  * the 'write' method for sending requests to the vTPM
  * four bytes with the vTPM instance number are prepended to each request
+ * the locality in which the command was sent is transmitted in the
+ * highest 3 bits
  */
 static int write_local_socket(tpmState *s, const tpmBuffer *buffer)
 {
@@ -608,7 +610,7 @@ static void tis_mem_writel(void *opaque,
             }
         }
         if (val & STS_TPM_GO) {
-            n = TPM_Send(s, &s->buffer,"tpm_data_write");
+            n = TPM_Send(s, &s->buffer, locty, "tpm_data_write");
             if (n > 0) {
                 /* sending of data was successful */
                 s->offset = 0;
@@ -915,7 +917,7 @@ const static unsigned char tpm_failure[]
 /*
  * Send a TPM request.
  */
-static int TPM_Send(tpmState *s, tpmBuffer *buffer, char *msg)
+static int TPM_Send(tpmState *s, tpmBuffer *buffer, uint8_t locty, char *msg)
 {
     int len;
     uint32_t size = tpm_get_size_from_buffer(buffer->buf);
@@ -944,6 +946,10 @@ static int TPM_Send(tpmState *s, tpmBuff
 #ifdef DEBUG_TPM
     showBuff(buffer->buf, "To TPM");
 #endif
+
+    /* transmit the locality in the highest 3 bits */
+    buffer->instance[0] &= 0x1f;
+    buffer->instance[0] |= (locty << 5);
 
     len = vTPMTransmit[s->Transmitlayer].write(s, buffer);
     if (len < 0) {
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/hw/usb-hid.c
--- a/tools/ioemu/hw/usb-hid.c  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/hw/usb-hid.c  Tue Dec 12 09:58:42 2006 -0600
@@ -39,6 +39,7 @@ typedef struct USBMouseState {
     int x, y;
     int kind;
     int mouse_grabbed;
+    int status_changed;
 } USBMouseState;
 
 /* mostly the same values as the Bochs USB Mouse device */
@@ -231,6 +232,7 @@ static void usb_mouse_event(void *opaque
     s->dy += dy1;
     s->dz += dz1;
     s->buttons_state = buttons_state;
+    s->status_changed = 1;
 }
 
 static void usb_tablet_event(void *opaque,
@@ -242,6 +244,7 @@ static void usb_tablet_event(void *opaqu
     s->y = y;
     s->dz += dz;
     s->buttons_state = buttons_state;
+    s->status_changed = 1;
 }
 
 static inline int int_clamp(int val, int vmin, int vmax)
@@ -483,10 +486,16 @@ static int usb_mouse_handle_data(USBDevi
     switch(pid) {
     case USB_TOKEN_IN:
         if (devep == 1) {
-           if (s->kind == USB_MOUSE)
-               ret = usb_mouse_poll(s, data, len);
-           else if (s->kind == USB_TABLET)
-               ret = usb_tablet_poll(s, data, len);
+            if (s->kind == USB_MOUSE)
+                ret = usb_mouse_poll(s, data, len);
+            else if (s->kind == USB_TABLET)
+                ret = usb_tablet_poll(s, data, len);
+
+            if (!s->status_changed)
+                ret = USB_RET_NAK;
+            else
+                s->status_changed = 0;
+
         } else {
             goto fail;
         }
@@ -523,6 +532,7 @@ USBDevice *usb_tablet_init(void)
     s->dev.handle_data = usb_mouse_handle_data;
     s->dev.handle_destroy = usb_mouse_handle_destroy;
     s->kind = USB_TABLET;
+    s->status_changed = 0;
 
     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Tablet");
 
@@ -544,6 +554,7 @@ USBDevice *usb_mouse_init(void)
     s->dev.handle_data = usb_mouse_handle_data;
     s->dev.handle_destroy = usb_mouse_handle_destroy;
     s->kind = USB_MOUSE;
+    s->status_changed = 0;
 
     pstrcpy(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Mouse");
 
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/hw/usb-uhci.c
--- a/tools/ioemu/hw/usb-uhci.c Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/hw/usb-uhci.c Tue Dec 12 09:58:42 2006 -0600
@@ -421,15 +421,13 @@ static int uhci_handle_td(UHCIState *s, 
 static int uhci_handle_td(UHCIState *s, UHCI_TD *td, int *int_mask)
 {
     uint8_t pid;
-    uint8_t buf[1280];
+    uint8_t buf[2048];
     int len, max_len, err, ret;
 
-    if (td->ctrl & TD_CTRL_IOC) {
-        *int_mask |= 0x01;
-    }
-    
-    if (!(td->ctrl & TD_CTRL_ACTIVE))
-        return 1;
+    if (!(td->ctrl & TD_CTRL_ACTIVE)){
+        ret = 1;
+        goto out;
+    }
 
     /* TD is active */
     max_len = ((td->token >> 21) + 1) & 0x7ff;
@@ -467,7 +465,8 @@ static int uhci_handle_td(UHCIState *s, 
         /* invalid pid : frame interrupted */
         s->status |= UHCI_STS_HCPERR;
         uhci_update_irq(s);
-        return -1;
+        ret = -1;
+        goto out;
     }
     if (td->ctrl & TD_CTRL_IOS)
         td->ctrl &= ~TD_CTRL_ACTIVE;
@@ -479,10 +478,12 @@ static int uhci_handle_td(UHCIState *s, 
             len < max_len) {
             *int_mask |= 0x02;
             /* short packet: do not update QH */
-            return 1;
+            ret = 1;
+            goto out;
         } else {
             /* success */
-            return 0;
+            ret = 0;
+            goto out;
         }
     } else {
         switch(ret) {
@@ -501,23 +502,34 @@ static int uhci_handle_td(UHCIState *s, 
             }
             td->ctrl = (td->ctrl & ~(3 << TD_CTRL_ERROR_SHIFT)) | 
                 (err << TD_CTRL_ERROR_SHIFT);
-            return 1;
+            ret = 1;
+            goto out;
         case USB_RET_NAK:
             td->ctrl |= TD_CTRL_NAK;
             if (pid == USB_TOKEN_SETUP)
                 goto do_timeout;
-            return 1;
+            ret = 1;
+            goto out;
         case USB_RET_STALL:
             td->ctrl |= TD_CTRL_STALL;
             td->ctrl &= ~TD_CTRL_ACTIVE;
-            return 1;
+            ret = 1;
+            goto out;
         case USB_RET_BABBLE:
             td->ctrl |= TD_CTRL_BABBLE | TD_CTRL_STALL;
             td->ctrl &= ~TD_CTRL_ACTIVE;
             /* frame interrupted */
-            return -1;
-        }
-    }
+            ret = -1;
+            goto out;
+        }
+    }
+   
+out:
+    /* If TD is inactive and IOC bit set to 1 then update int_mask */ 
+    if ((td->ctrl & TD_CTRL_IOC) && (!(td->ctrl & TD_CTRL_ACTIVE))) {
+        *int_mask |= 0x01;
+    }
+    return ret;
 }
 
 static void uhci_frame_timer(void *opaque)
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/keymaps.c
--- a/tools/ioemu/keymaps.c     Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/keymaps.c     Tue Dec 12 09:58:42 2006 -0600
@@ -36,8 +36,10 @@ static int get_keysym(const char *name)
 #define MAX_EXTRA_COUNT 256
 typedef struct {
     uint16_t keysym2keycode[MAX_NORMAL_KEYCODE];
+    int keysym2numlock[MAX_NORMAL_KEYCODE];
     struct {
        int keysym;
+       int numlock;
        uint16_t keycode;
     } keysym2keycode_extra[MAX_EXTRA_COUNT];
     int extra_count;
@@ -50,6 +52,8 @@ static kbd_layout_t *parse_keyboard_layo
     char file_name[1024];
     char line[1024];
     int len;
+    int *keycode2numlock;
+    int i;
 
     snprintf(file_name, sizeof(file_name),
              "%s/keymaps/%s", bios_dir, language);
@@ -63,6 +67,15 @@ static kbd_layout_t *parse_keyboard_layo
                "Could not read keymap file: '%s'\n", file_name);
        return 0;
     }
+
+    /* Allocate a temporary map tracking which keycodes change when numlock is
+       set.  Keycodes are 16 bit, so 65536 is safe. */
+    keycode2numlock = malloc(65536 * sizeof(int));
+    if (!keycode2numlock) {
+        perror("Could not read keymap file");
+       return 0;
+    }
+
     for(;;) {
        if (fgets(line, 1024, f) == NULL)
             break;
@@ -86,13 +99,19 @@ static kbd_layout_t *parse_keyboard_layo
                if (keysym == 0) {
                     //             fprintf(stderr, "Warning: unknown keysym 
%s\n", line);
                } else {
-                   const char *rest = end_of_keysym + 1;
-                   int keycode = strtol(rest, NULL, 0);
+                   char *rest = end_of_keysym + 1;
+                   int keycode = strtol(rest, &rest, 0);
+                   int numlock = (rest != NULL &&
+                                  strstr(rest, "numlock") != NULL);
+
+                    keycode2numlock[keycode] = numlock;
+
                    /* if(keycode&0x80)
                       keycode=(keycode<<8)^0x80e0; */
                    if (keysym < MAX_NORMAL_KEYCODE) {
                        //fprintf(stderr,"Setting keysym %s (%d) to 
%d\n",line,keysym,keycode);
                        k->keysym2keycode[keysym] = keycode;
+                       k->keysym2numlock[keysym] = numlock;
                    } else {
                        if (k->extra_count >= MAX_EXTRA_COUNT) {
                            fprintf(stderr,
@@ -107,6 +126,8 @@ static kbd_layout_t *parse_keyboard_layo
                                keysym = keysym;
                            k->keysym2keycode_extra[k->extra_count].
                                keycode = keycode;
+                           k->keysym2keycode_extra[k->extra_count].
+                               numlock = numlock;
                            k->extra_count++;
                        }
                    }
@@ -115,6 +136,22 @@ static kbd_layout_t *parse_keyboard_layo
        }
     }
     fclose(f);
+
+    for (i = 0; i < MAX_NORMAL_KEYCODE; i++) {
+        if (k->keysym2numlock[i] != 1) {
+            k->keysym2numlock[i] = -keycode2numlock[k->keysym2keycode[i]];
+        }
+    }
+
+    for (i = 0; i < k->extra_count; i++) {
+        if (k->keysym2keycode_extra[i].numlock != 1) {
+            k->keysym2keycode_extra[i].numlock =
+                -keycode2numlock[k->keysym2keycode_extra[i].keycode];
+        }
+    }
+
+    free(keycode2numlock);
+
     return k;
 }
 
@@ -143,3 +180,25 @@ static int keysym2scancode(void *kbd_lay
     }
     return 0;
 }
+
+/**
+ * Returns 1 if the given keysym requires numlock to be pressed, -1 if it
+ * requires it to be cleared, and 0 otherwise.
+ */
+static int keysym2numlock(void *kbd_layout, int keysym)
+{
+    kbd_layout_t *k = kbd_layout;
+    if (keysym < MAX_NORMAL_KEYCODE) {
+       return k->keysym2numlock[keysym];
+    } else {
+       int i;
+#ifdef XK_ISO_Left_Tab
+       if (keysym == XK_ISO_Left_Tab)
+           keysym = XK_Tab;
+#endif
+       for (i = 0; i < k->extra_count; i++)
+           if (k->keysym2keycode_extra[i].keysym == keysym)
+               return k->keysym2keycode_extra[i].numlock;
+    }
+    return 0;
+}
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/patches/acpi-support
--- a/tools/ioemu/patches/acpi-support  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/patches/acpi-support  Tue Dec 12 09:58:42 2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/Makefile.target
 Index: ioemu/Makefile.target
 ===================================================================
---- ioemu.orig/Makefile.target 2006-08-17 19:49:50.228216099 +0100
-+++ ioemu/Makefile.target      2006-08-17 19:50:02.405870095 +0100
-@@ -357,6 +357,7 @@
+--- ioemu.orig/Makefile.target 2006-12-08 02:00:40.000000000 +0000
++++ ioemu/Makefile.target      2006-12-08 02:00:40.000000000 +0000
+@@ -358,6 +358,7 @@
  VL_OBJS+= fdc.o mc146818rtc.o serial.o pc.o
  VL_OBJS+= cirrus_vga.o mixeng.o parallel.o acpi.o piix_pci.o
  VL_OBJS+= usb-uhci.o
@@ -12,8 +12,8 @@ Index: ioemu/Makefile.target
  ifeq ($(TARGET_BASE_ARCH), ppc)
 Index: ioemu/hw/pc.c
 ===================================================================
---- ioemu.orig/hw/pc.c 2006-08-17 19:49:59.312212039 +0100
-+++ ioemu/hw/pc.c      2006-08-17 19:50:02.406869984 +0100
+--- ioemu.orig/hw/pc.c 2006-12-08 02:00:40.000000000 +0000
++++ ioemu/hw/pc.c      2006-12-08 02:00:40.000000000 +0000
 @@ -874,13 +874,19 @@
  
      cmos_init(ram_size, boot_device, bs_table, timeoffset);
@@ -49,8 +49,8 @@ Index: ioemu/hw/piix4acpi.c
 Index: ioemu/hw/piix4acpi.c
 ===================================================================
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
-+++ ioemu/hw/piix4acpi.c       2006-08-17 19:50:02.407869874 +0100
-@@ -0,0 +1,388 @@
++++ ioemu/hw/piix4acpi.c       2006-12-08 02:00:40.000000000 +0000
+@@ -0,0 +1,396 @@
 +/*
 + * PIIX4 ACPI controller emulation
 + *
@@ -434,15 +434,23 @@ Index: ioemu/hw/piix4acpi.c
 +    pci_conf[0x0e] = 0x00;
 +    pci_conf[0x3d] = 0x01;  /* Hardwired to PIRQA is used */
 +
-+    pci_register_io_region((PCIDevice *)d, 4, 0x10,
-+                           PCI_ADDRESS_SPACE_IO, acpi_map);
-+
-+    acpi_reset (d);
++
++    /* PMBA POWER MANAGEMENT BASE ADDRESS, hardcoded to 0x1f40 
++     * to make shutdown work for IPF, due to IPF Guest Firmware 
++     * will enumerate pci devices. 
++     *
++     * TODO:  if Guest Firmware or Guest OS will change this PMBA,
++     * More logic will be added.
++     */
++    pci_conf[0x40] = 0x41; /* Special device-specific BAR at 0x40 */
++    pci_conf[0x41] = 0x1f;
++    acpi_map(d, 0, 0x1f40, 0x10, PCI_ADDRESS_SPACE_IO);
++    acpi_reset(d);
 +}
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-08-17 19:49:59.315211708 +0100
-+++ ioemu/vl.c 2006-08-17 19:50:02.410869542 +0100
+--- ioemu.orig/vl.c    2006-12-08 02:00:40.000000000 +0000
++++ ioemu/vl.c 2006-12-08 02:00:40.000000000 +0000
 @@ -156,7 +156,7 @@
  #else
  #define MAX_CPUS 1
@@ -476,7 +484,7 @@ Index: ioemu/vl.c
      { NULL },
  };
  
-@@ -6256,6 +6259,9 @@
+@@ -6240,6 +6243,9 @@
              case QEMU_OPTION_timeoffset:
                  timeoffset = strtol(optarg, NULL, 0);
                  break;
@@ -488,8 +496,8 @@ Index: ioemu/vl.c
      }
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-08-17 19:49:59.316211597 +0100
-+++ ioemu/vl.h 2006-08-17 19:50:02.411869432 +0100
+--- ioemu.orig/vl.h    2006-12-08 02:00:40.000000000 +0000
++++ ioemu/vl.h 2006-12-08 02:00:40.000000000 +0000
 @@ -168,6 +168,7 @@
  extern int kqemu_allowed;
  extern int win2k_install_hack;
@@ -510,8 +518,8 @@ Index: ioemu/vl.h
  extern QEMUMachine isapc_machine;
 Index: ioemu/hw/piix_pci.c
 ===================================================================
---- ioemu.orig/hw/piix_pci.c   2006-08-17 19:38:05.806252180 +0100
-+++ ioemu/hw/piix_pci.c        2006-08-17 19:50:02.411869432 +0100
+--- ioemu.orig/hw/piix_pci.c   2006-12-08 02:00:39.000000000 +0000
++++ ioemu/hw/piix_pci.c        2006-12-08 02:00:40.000000000 +0000
 @@ -241,7 +241,7 @@
  static uint32_t pci_bios_io_addr;
  static uint32_t pci_bios_mem_addr;
@@ -521,33 +529,22 @@ Index: ioemu/hw/piix_pci.c
  
  static void pci_config_writel(PCIDevice *d, uint32_t addr, uint32_t val)
  {
-@@ -336,6 +336,14 @@
+@@ -336,6 +336,18 @@
              pci_set_io_region_addr(d, 3, 0x374);
          }
          break;
 +    case 0x0680:
 +        if (vendor_id == 0x8086 && device_id == 0x7113) {
-+            /* PIIX4 ACPI PM */
-+            pci_config_writew(d, 0x20, 0x0000); /* NO smb bus IO enable in 
PIIX4 */
++            /*
++             * PIIX4 ACPI PM.
++             * Special device with special PCI config space. No ordinary BARs.
++             */
++            pci_config_writew(d, 0x20, 0x0000); // No smb bus IO enable
 +            pci_config_writew(d, 0x22, 0x0000);
-+            goto default_map;
++            pci_config_writew(d, 0x3c, 0x0009); // Hardcoded IRQ9
++            pci_config_writew(d, 0x3d, 0x0001);
 +        }
 +        break;
      case 0x0300:
          if (vendor_id != 0x1234)
              goto default_map;
-@@ -386,6 +394,14 @@
-         pic_irq = pci_irqs[pin];
-         pci_config_writeb(d, PCI_INTERRUPT_LINE, pic_irq);
-     }
-+
-+    if (class== 0x0680&& vendor_id == 0x8086 && device_id == 0x7113) {
-+         // PIIX4 ACPI PM
-+       pci_config_writew(d, 0x20, 0x0000); // NO smb bus IO enable in PIIX4
-+       pci_config_writew(d, 0x22, 0x0000);
-+       pci_config_writew(d, 0x3c, 0x0009); // Hardcodeed IRQ9
-+       pci_config_writew(d, 0x3d, 0x0001);
-+    }
- }
- 
- /*
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/patches/acpi-timer-support
--- a/tools/ioemu/patches/acpi-timer-support    Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/patches/acpi-timer-support    Tue Dec 12 09:58:42 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/piix4acpi.c
 Index: ioemu/hw/piix4acpi.c
 ===================================================================
---- ioemu.orig/hw/piix4acpi.c  2006-08-17 19:50:02.407869874 +0100
-+++ ioemu/hw/piix4acpi.c       2006-08-17 19:50:05.060576667 +0100
+--- ioemu.orig/hw/piix4acpi.c  2006-12-08 01:35:52.000000000 +0000
++++ ioemu/hw/piix4acpi.c       2006-12-08 01:35:59.000000000 +0000
 @@ -24,31 +24,30 @@
   */
  
@@ -186,10 +186,3 @@ Index: ioemu/hw/piix4acpi.c
  
  /* PIIX4 acpi pci configuration space, func 2 */
  void pci_piix4_acpi_init(PCIBus *bus, int devfn)
-@@ -384,5 +383,5 @@
-     pci_register_io_region((PCIDevice *)d, 4, 0x10,
-                            PCI_ADDRESS_SPACE_IO, acpi_map);
- 
--    acpi_reset (d);
-+    acpi_reset(d);
- }
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/patches/domain-destroy
--- a/tools/ioemu/patches/domain-destroy        Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/patches/domain-destroy        Tue Dec 12 09:58:42 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/monitor.c
 Index: ioemu/monitor.c
 ===================================================================
---- ioemu.orig/monitor.c       2006-08-17 19:37:36.489509621 +0100
-+++ ioemu/monitor.c    2006-08-17 19:49:44.491850141 +0100
+--- ioemu.orig/monitor.c       2006-12-08 01:26:07.000000000 +0000
++++ ioemu/monitor.c    2006-12-08 01:26:08.000000000 +0000
 @@ -308,6 +308,7 @@
  
  static void do_quit(void)
@@ -12,11 +12,11 @@ Index: ioemu/monitor.c
  
 Index: ioemu/target-i386-dm/helper2.c
 ===================================================================
---- ioemu.orig/target-i386-dm/helper2.c        2006-08-17 19:49:40.116333768 
+0100
-+++ ioemu/target-i386-dm/helper2.c     2006-08-17 19:49:44.491850141 +0100
-@@ -488,5 +488,25 @@
-             xc_evtchn_notify(xce_handle, ioreq_local_port[send_vcpu]);
-         }
+--- ioemu.orig/target-i386-dm/helper2.c        2006-12-08 01:26:08.000000000 
+0000
++++ ioemu/target-i386-dm/helper2.c     2006-12-08 01:26:08.000000000 +0000
+@@ -507,5 +507,25 @@
+         /* Wait up to 10 msec. */
+         main_loop_wait(10);
      }
 +    destroy_hvm_domain();
      return 0;
@@ -42,8 +42,8 @@ Index: ioemu/target-i386-dm/helper2.c
 +}
 Index: ioemu/vl.h
 ===================================================================
---- ioemu.orig/vl.h    2006-08-17 19:49:40.120333326 +0100
-+++ ioemu/vl.h 2006-08-17 19:49:44.492850031 +0100
+--- ioemu.orig/vl.h    2006-12-08 01:26:08.000000000 +0000
++++ ioemu/vl.h 2006-12-08 01:26:08.000000000 +0000
 @@ -1190,4 +1190,7 @@
  void kqemu_record_dump(void);
  
diff -r a510c94ceaa3 -r 749c399d73df tools/ioemu/patches/domain-reset
--- a/tools/ioemu/patches/domain-reset  Tue Dec 12 09:56:06 2006 -0600
+++ b/tools/ioemu/patches/domain-reset  Tue Dec 12 09:58:42 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/target-i386-dm/helper2.c
 Index: ioemu/target-i386-dm/helper2.c
 ===================================================================
---- ioemu.orig/target-i386-dm/helper2.c        2006-08-17 19:37:36.530505066 
+0100
-+++ ioemu/target-i386-dm/helper2.c     2006-08-17 19:49:40.116333768 +0100
+--- ioemu.orig/target-i386-dm/helper2.c        2006-12-08 01:26:06.000000000 
+0000
++++ ioemu/target-i386-dm/helper2.c     2006-12-08 01:26:08.000000000 +0000
 @@ -127,6 +127,25 @@
  /* called from main_cpu_reset */
  void cpu_reset(CPUX86State *env)
@@ -28,7 +28,7 @@ Index: ioemu/target-i386-dm/helper2.c
  }
  
  void cpu_x86_close(CPUX86State *env)
-@@ -455,6 +474,10 @@
+@@ -479,6 +498,10 @@
          if (vm_running) {
              if (shutdown_requested)
                  break;
@@ -41,8 +41,8 @@ Index: ioemu/target-i386-dm/helper2.c
          /* Wait up to 10 msec. */
 Index: ioemu/vl.c
 ===================================================================
---- ioemu.orig/vl.c    2006-08-17 19:49:39.442408257 +0100
-+++ ioemu/vl.c 2006-08-17 19:49:40.119333436 +0100
+--- ioemu.orig/vl.c    2006-12-08 01:26:08.000000000 +0000
++++ ioemu/vl.c 2006-12-08 01:26:08.000000000 +0000
 @@ -4948,7 +4948,7 @@
  } QEMUResetEntry;
  
@@ -54,8 +54,8 @@ Index: ioemu/vl.c
  
 Index: ioemu/vl.h
 ===================================================================

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [POWERPC] Merge with xen-unstable.hg., Xen patchbot-unstable <=