[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Marge with xen-ia64-unstable.hg
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID f7c2cbb5368fc44375cab8db939fea8fc0a7c6c4 # Parent 71c61c288171fa5a4013ee20e75c9a2709bf0f84 # Parent 9bf5a3b24318a41d3a7a9a656facf6dd9341b73d Marge with xen-ia64-unstable.hg diff -r 71c61c288171 -r f7c2cbb5368f linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c --- a/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Tue Jan 3 16:20:05 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c Tue Jan 3 18:03:56 2006 @@ -540,6 +540,9 @@ pending_vaddrs = kmalloc(sizeof(pending_vaddrs[0]) * mmap_pages, GFP_KERNEL); if (!pending_reqs || !pending_grant_handles || !pending_vaddrs) { + kfree(pending_reqs); + kfree(pending_grant_handles); + kfree(pending_vaddrs); printk("%s: out of memory\n", __FUNCTION__); return -1; } diff -r 71c61c288171 -r f7c2cbb5368f linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c --- a/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c Tue Jan 3 16:20:05 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c Tue Jan 3 18:03:56 2006 @@ -225,7 +225,7 @@ /* Allocate the fe ring. */ sring = (blkif_sring_t *)get_zeroed_page(GFP_KERNEL); if (sring == NULL) - goto fail_nomem; + return -ENOMEM; SetPageReserved(virt_to_page(sring)); @@ -233,9 +233,6 @@ FRONT_RING_INIT(&blktap_ufe_ring, sring, PAGE_SIZE); return 0; - - fail_nomem: - return -ENOMEM; } static int blktap_release(struct inode *inode, struct file *filp) @@ -391,12 +388,12 @@ } static struct file_operations blktap_fops = { - owner: THIS_MODULE, - poll: blktap_poll, - ioctl: blktap_ioctl, - open: blktap_open, - release: blktap_release, - mmap: blktap_mmap, + .owner = THIS_MODULE, + .poll = blktap_poll, + .ioctl = blktap_ioctl, + .open = blktap_open, + .release = blktap_release, + .mmap = blktap_mmap, }; diff -r 71c61c288171 -r f7c2cbb5368f linux-2.6-xen-sparse/drivers/xen/console/console.c --- a/linux-2.6-xen-sparse/drivers/xen/console/console.c Tue Jan 3 16:20:05 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/console/console.c Tue Jan 3 18:03:56 2006 @@ -314,39 +314,31 @@ { int sent, sz, work_done = 0; - if (xen_start_info->flags & SIF_INITDOMAIN) { - if (x_char) { + if (x_char) { + if (xen_start_info->flags & SIF_INITDOMAIN) kcons_write_dom0(NULL, &x_char, 1); - x_char = 0; - work_done = 1; - } - - while (wc != wp) { - sz = wp - wc; - if (sz > (wbuf_size - WBUF_MASK(wc))) - sz = wbuf_size - WBUF_MASK(wc); + else + while (x_char) + if (xencons_ring_send(&x_char, 1) == 1) + break; + x_char = 0; + work_done = 1; + } + + while (wc != wp) { + sz = wp - wc; + if (sz > (wbuf_size - WBUF_MASK(wc))) + sz = wbuf_size - WBUF_MASK(wc); + if (xen_start_info->flags & SIF_INITDOMAIN) { kcons_write_dom0(NULL, &wbuf[WBUF_MASK(wc)], sz); wc += sz; - work_done = 1; - } - } else { - while (x_char) { - if (xencons_ring_send(&x_char, 1) == 1) { - x_char = 0; - work_done = 1; - } - } - - while (wc != wp) { - sz = wp - wc; - if (sz > (wbuf_size - WBUF_MASK(wc))) - sz = wbuf_size - WBUF_MASK(wc); + } else { sent = xencons_ring_send(&wbuf[WBUF_MASK(wc)], sz); if (sent == 0) break; wc += sent; - work_done = 1; } + work_done = 1; } if (work_done && (xencons_tty != NULL)) { diff -r 71c61c288171 -r f7c2cbb5368f linux-2.6-xen-sparse/drivers/xen/netback/interface.c --- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Tue Jan 3 16:20:05 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Tue Jan 3 18:03:56 2006 @@ -183,7 +183,7 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref, unsigned long rx_ring_ref, unsigned int evtchn) { - int err; + int err = -ENOMEM; netif_tx_sring_t *txs; netif_rx_sring_t *rxs; evtchn_op_t op = { @@ -199,25 +199,16 @@ if (netif->tx_comms_area == NULL) return -ENOMEM; netif->rx_comms_area = alloc_vm_area(PAGE_SIZE); - if (netif->rx_comms_area == NULL) { - free_vm_area(netif->tx_comms_area); - return -ENOMEM; - } + if (netif->rx_comms_area == NULL) + goto err_rx; err = map_frontend_pages(netif, tx_ring_ref, rx_ring_ref); - if (err) { - free_vm_area(netif->tx_comms_area); - free_vm_area(netif->rx_comms_area); - return err; - } + if (err) + goto err_map; err = HYPERVISOR_event_channel_op(&op); - if (err) { - unmap_frontend_pages(netif); - free_vm_area(netif->tx_comms_area); - free_vm_area(netif->rx_comms_area); - return err; - } + if (err) + goto err_hypervisor; netif->evtchn = op.u.bind_interdomain.local_port; @@ -245,6 +236,13 @@ rtnl_unlock(); return 0; +err_hypervisor: + unmap_frontend_pages(netif); +err_map: + free_vm_area(netif->rx_comms_area); +err_rx: + free_vm_area(netif->tx_comms_area); + return err; } static void free_netif_callback(void *arg) diff -r 71c61c288171 -r f7c2cbb5368f linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c --- a/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Tue Jan 3 16:20:05 2006 +++ b/linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_probe.c Tue Jan 3 18:03:56 2006 @@ -542,14 +542,6 @@ const char *type, const char *nodename) { -#define CHECK_FAIL \ - do { \ - if (err) \ - goto fail; \ - } \ - while (0) \ - - int err; struct xenbus_device *xendev; size_t stringlen; @@ -584,19 +576,18 @@ xendev->dev.release = xenbus_dev_release; err = bus->get_bus_id(xendev->dev.bus_id, xendev->nodename); - CHECK_FAIL; + if (err) + goto fail; /* Register with generic device framework. */ err = device_register(&xendev->dev); - CHECK_FAIL; + if (err) + goto fail; device_create_file(&xendev->dev, &dev_attr_nodename); device_create_file(&xendev->dev, &dev_attr_devtype); return 0; - -#undef CHECK_FAIL - fail: xenbus_dev_free(xendev); return err; diff -r 71c61c288171 -r f7c2cbb5368f tools/Rules.mk --- a/tools/Rules.mk Tue Jan 3 16:20:05 2006 +++ b/tools/Rules.mk Tue Jan 3 18:03:56 2006 @@ -35,6 +35,8 @@ mk-symlinks: mkdir -p xen ( cd xen && ln -sf ../$(XEN_ROOT)/xen/include/public/*.h . ) + mkdir -p xen/hvm + ( cd xen/hvm && ln -sf ../../$(XEN_ROOT)/xen/include/public/hvm/*.h . ) mkdir -p xen/io ( cd xen/io && ln -sf ../../$(XEN_ROOT)/xen/include/public/io/*.h . ) mkdir -p xen/linux diff -r 71c61c288171 -r f7c2cbb5368f tools/examples/xmexample.vmx --- a/tools/examples/xmexample.vmx Tue Jan 3 16:20:05 2006 +++ b/tools/examples/xmexample.vmx Tue Jan 3 18:03:56 2006 @@ -28,10 +28,13 @@ #----------------------------------------------------------------------------- # the number of cpus guest platform has, default=1 -vcpus=1 +#vcpus=1 # enable/disalbe vmx guest ACPI, default=0 (disabled) #acpi=0 + +# enable/disalbe vmx guest APIC, default=0 (disabled) +#apic=0 # List of which CPUS this domain is allowed to use, default Xen picks #cpus = "" # leave to Xen to pick diff -r 71c61c288171 -r f7c2cbb5368f tools/firmware/vmxassist/acpi_madt.c --- a/tools/firmware/vmxassist/acpi_madt.c Tue Jan 3 16:20:05 2006 +++ b/tools/firmware/vmxassist/acpi_madt.c Tue Jan 3 18:03:56 2006 @@ -17,34 +17,34 @@ * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307 USA. */ + #include "../acpi/acpi2_0.h" #include "../acpi/acpi_madt.h" + +#include <xen/hvm/hvm_info_table.h> #define NULL ((void*)0) extern int puts(const char *s); -#define HVM_INFO_PAGE 0x0009F000 -#define HVM_INFO_OFFSET 0x00000800 - -struct hvm_info_table { - char signature[8]; /* "HVM INFO" */ - uint32_t length; - uint8_t checksum; - uint8_t acpi_enabled; - uint8_t pad[2]; - uint32_t nr_vcpus; -}; - static struct hvm_info_table *table = NULL; -static int -checksum_valid(uint8_t *ptr, int len) +static int validate_hvm_info(struct hvm_info_table *t) { - uint8_t sum=0; + char signature[] = "HVM INFO"; + uint8_t *ptr = (uint8_t *)t; + uint8_t sum = 0; int i; - for (i = 0; i < len; i++) + /* strncmp(t->signature, "HVM INFO", 8) */ + for (i = 0; i < 8; i++) { + if (signature[i] != t->signature[i]) { + puts("Bad hvm info signature\n"); + return 0; + } + } + + for (i = 0; i < t->length; i++) sum += ptr[i]; return (sum == 0); @@ -55,24 +55,15 @@ get_hvm_info_table(void) { struct hvm_info_table *t; - char signature[] = "HVM INFO"; int i; if (table != NULL) return table; - t = (struct hvm_info_table *)(HVM_INFO_PAGE + HVM_INFO_OFFSET); + t = (struct hvm_info_table *)HVM_INFO_PADDR; - /* strncmp(t->signature, "HVM INFO", 8) */ - for (i = 0; i < 8; i++) { - if (signature[i] != t->signature[i]) { - puts("Bad hvm info signature\n"); - return NULL; - } - } - - if (!checksum_valid((uint8_t *)t, t->length)) { - puts("Bad hvm info checksum\n"); + if (!validate_hvm_info(t)) { + puts("Bad hvm info table\n"); return NULL; } @@ -126,10 +117,10 @@ return madt; } -static void +static void set_checksum(void *start, int checksum_offset, int len) { - unsigned char sum = 0; + unsigned char sum = 0; unsigned char *ptr; ptr = start; @@ -141,9 +132,9 @@ ptr[checksum_offset] = -sum; } -static int +static int acpi_madt_set_local_apics( - int nr_vcpu, + int nr_vcpu, ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE *madt) { int i; @@ -156,14 +147,14 @@ madt->LocalApic[i].Length = sizeof (ACPI_LOCAL_APIC_STRUCTURE); madt->LocalApic[i].AcpiProcessorId = i; madt->LocalApic[i].ApicId = i; - madt->LocalApic[i].Flags = 1; + madt->LocalApic[i].Flags = 1; } madt->Header.Header.Length = - sizeof(ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE) - + sizeof(ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE) - (MAX_VIRT_CPUS - nr_vcpu)* sizeof(ACPI_LOCAL_APIC_STRUCTURE); - return 0; + return 0; } #define FIELD_OFFSET(TYPE,Field) ((unsigned int)(&(((TYPE *) 0)->Field))) @@ -185,7 +176,7 @@ madt, FIELD_OFFSET(ACPI_TABLE_HEADER, Checksum), madt->Header.Header.Length); - return 0; + return 0; } /* diff -r 71c61c288171 -r f7c2cbb5368f tools/firmware/vmxassist/vm86.h --- a/tools/firmware/vmxassist/vm86.h Tue Jan 3 16:20:05 2006 +++ b/tools/firmware/vmxassist/vm86.h Tue Jan 3 18:03:56 2006 @@ -24,7 +24,7 @@ #include <stdint.h> #endif -#include <xen/vmx_assist.h> +#include <xen/hvm/vmx_assist.h> #define NR_EXCEPTION_HANDLER 32 #define NR_INTERRUPT_HANDLERS 16 diff -r 71c61c288171 -r f7c2cbb5368f tools/ioemu/hw/i8254.c --- a/tools/ioemu/hw/i8254.c Tue Jan 3 16:20:05 2006 +++ b/tools/ioemu/hw/i8254.c Tue Jan 3 18:03:56 2006 @@ -23,7 +23,7 @@ */ #include "vl.h" #include <xenctrl.h> -#include <xen/io/ioreq.h> +#include <xen/hvm/ioreq.h> //#define DEBUG_PIT diff -r 71c61c288171 -r f7c2cbb5368f tools/ioemu/hw/i8259.c --- a/tools/ioemu/hw/i8259.c Tue Jan 3 16:20:05 2006 +++ b/tools/ioemu/hw/i8259.c Tue Jan 3 18:03:56 2006 @@ -23,7 +23,7 @@ */ #include "vl.h" #include <xenctrl.h> -#include <xen/io/ioreq.h> +#include <xen/hvm/ioreq.h> /* debug PIC */ //#define DEBUG_PIC diff -r 71c61c288171 -r f7c2cbb5368f tools/ioemu/hw/i8259_stub.c --- a/tools/ioemu/hw/i8259_stub.c Tue Jan 3 16:20:05 2006 +++ b/tools/ioemu/hw/i8259_stub.c Tue Jan 3 18:03:56 2006 @@ -22,7 +22,7 @@ * THE SOFTWARE. */ #include "xenctrl.h" -#include <xen/io/ioreq.h> +#include <xen/hvm/ioreq.h> #include <stdio.h> #include "cpu.h" #include "cpu-all.h" diff -r 71c61c288171 -r f7c2cbb5368f tools/ioemu/target-i386-dm/helper2.c --- a/tools/ioemu/target-i386-dm/helper2.c Tue Jan 3 16:20:05 2006 +++ b/tools/ioemu/target-i386-dm/helper2.c Tue Jan 3 18:03:56 2006 @@ -48,7 +48,7 @@ #include <sys/ioctl.h> #include <xenctrl.h> -#include <xen/io/ioreq.h> +#include <xen/hvm/ioreq.h> #include <xen/linux/evtchn.h> #include "cpu.h" diff -r 71c61c288171 -r f7c2cbb5368f tools/libxc/xc_ia64_stubs.c --- a/tools/libxc/xc_ia64_stubs.c Tue Jan 3 16:20:05 2006 +++ b/tools/libxc/xc_ia64_stubs.c Tue Jan 3 18:03:56 2006 @@ -5,7 +5,7 @@ #include <stdlib.h> #include <zlib.h> #include "xen/arch-ia64.h" -#include <xen/io/ioreq.h> +#include <xen/hvm/ioreq.h> /* this is a very ugly way of getting FPSR_DEFAULT. struct ia64_fpreg is * mysteriously declared in two places: /usr/include/asm/fpu.h and diff -r 71c61c288171 -r f7c2cbb5368f tools/libxc/xc_vmx_build.c --- a/tools/libxc/xc_vmx_build.c Tue Jan 3 16:20:05 2006 +++ b/tools/libxc/xc_vmx_build.c Tue Jan 3 18:03:56 2006 @@ -9,7 +9,8 @@ #include <stdlib.h> #include <unistd.h> #include <zlib.h> -#include <xen/io/ioreq.h> +#include <xen/hvm/hvm_info_table.h> +#include <xen/hvm/ioreq.h> #define VMX_LOADER_ENTR_ADDR 0x00100000 @@ -33,18 +34,6 @@ #define E820_MAP_NR_OFFSET 0x000001E8 #define E820_MAP_OFFSET 0x000002D0 -#define HVM_INFO_PAGE 0x0009F000 -#define HVM_INFO_OFFSET 0x00000800 - -struct hvm_info_table { - char signature[8]; /* "HVM INFO" */ - uint32_t length; - uint8_t checksum; - uint8_t acpi_enabled; - uint8_t pad[2]; - uint32_t nr_vcpus; -}; - struct e820entry { uint64_t addr; uint64_t size; @@ -128,7 +117,7 @@ return (*(((unsigned char *)e820_page) + E820_MAP_NR_OFFSET) = nr_map); } -static void +static void set_hvm_info_checksum(struct hvm_info_table *t) { uint8_t *ptr = (uint8_t *)t, sum = 0; @@ -148,14 +137,18 @@ */ static int set_hvm_info(int xc_handle, uint32_t dom, unsigned long *pfn_list, unsigned int vcpus, - unsigned int acpi) + unsigned int acpi, unsigned int apic) { char *va_map; struct hvm_info_table *va_hvm; - va_map = xc_map_foreign_range(xc_handle, dom, - PAGE_SIZE, PROT_READ|PROT_WRITE, - pfn_list[HVM_INFO_PAGE >> PAGE_SHIFT]); + va_map = xc_map_foreign_range( + xc_handle, + dom, + PAGE_SIZE, + PROT_READ|PROT_WRITE, + pfn_list[HVM_INFO_PFN]); + if ( va_map == NULL ) return -1; @@ -164,8 +157,9 @@ strncpy(va_hvm->signature, "HVM INFO", 8); va_hvm->length = sizeof(struct hvm_info_table); va_hvm->acpi_enabled = acpi; + va_hvm->apic_enabled = apic; va_hvm->nr_vcpus = vcpus; - + set_hvm_info_checksum(va_hvm); munmap(va_map, PAGE_SIZE); @@ -307,9 +301,9 @@ vcpu_guest_context_t *ctxt, unsigned long shared_info_frame, unsigned int control_evtchn, - unsigned int lapic, unsigned int vcpus, unsigned int acpi, + unsigned int apic, unsigned int store_evtchn, unsigned long *store_mfn) { @@ -519,20 +513,14 @@ goto error_out; } - if (set_hvm_info(xc_handle, dom, page_array, vcpus, acpi)) { + if ( set_hvm_info(xc_handle, dom, page_array, vcpus, acpi, apic) ) { fprintf(stderr, "Couldn't set hvm info for VMX guest.\n"); goto error_out; } - *store_mfn = page_array[(v_end-2) >> PAGE_SHIFT]; - if ( xc_clear_domain_page(xc_handle, dom, *store_mfn) ) - goto error_out; - - shared_page_frame = (v_end - PAGE_SIZE) >> PAGE_SHIFT; - - if ((e820_page = xc_map_foreign_range( - xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, - page_array[E820_MAP_PAGE >> PAGE_SHIFT])) == 0) + if ( (e820_page = xc_map_foreign_range( + xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, + page_array[E820_MAP_PAGE >> PAGE_SHIFT])) == 0 ) goto error_out; memset(e820_page, 0, PAGE_SIZE); e820_map_nr = build_e820map(e820_page, v_end); @@ -547,25 +535,29 @@ munmap(e820_page, PAGE_SIZE); /* shared_info page starts its life empty. */ - if ((shared_info = xc_map_foreign_range( - xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, - shared_info_frame)) == 0) + if ( (shared_info = xc_map_foreign_range( + xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, + shared_info_frame)) == 0 ) goto error_out; memset(shared_info, 0, sizeof(shared_info_t)); /* Mask all upcalls... */ for ( i = 0; i < MAX_VIRT_CPUS; i++ ) shared_info->vcpu_info[i].evtchn_upcall_mask = 1; - munmap(shared_info, PAGE_SIZE); /* Populate the event channel port in the shared page */ - if ((sp = (shared_iopage_t *) xc_map_foreign_range( - xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, - page_array[shared_page_frame])) == 0) + shared_page_frame = page_array[(v_end >> PAGE_SHIFT) - 1]; + if ( (sp = (shared_iopage_t *) xc_map_foreign_range( + xc_handle, dom, PAGE_SIZE, PROT_READ|PROT_WRITE, + shared_page_frame)) == 0 ) goto error_out; memset(sp, 0, PAGE_SIZE); sp->sp_global.eport = control_evtchn; munmap(sp, PAGE_SIZE); + + *store_mfn = page_array[(v_end >> PAGE_SHIFT) - 2]; + if ( xc_clear_domain_page(xc_handle, dom, *store_mfn) ) + goto error_out; /* Send the page update requests down to the hypervisor. */ if ( xc_finish_mmu_updates(xc_handle, mmu) ) @@ -588,7 +580,7 @@ ctxt->user_regs.eax = 0; ctxt->user_regs.esp = 0; ctxt->user_regs.ebx = 0; /* startup_32 expects this to be 0 to signal boot cpu */ - ctxt->user_regs.ecx = lapic; + ctxt->user_regs.ecx = 0; ctxt->user_regs.esi = 0; ctxt->user_regs.edi = 0; ctxt->user_regs.ebp = 0; @@ -608,9 +600,9 @@ int memsize, const char *image_name, unsigned int control_evtchn, - unsigned int lapic, unsigned int vcpus, unsigned int acpi, + unsigned int apic, unsigned int store_evtchn, unsigned long *store_mfn) { @@ -674,7 +666,7 @@ if ( setup_guest(xc_handle, domid, memsize, image, image_size, nr_pages, ctxt, op.u.getdomaininfo.shared_info_frame, control_evtchn, - lapic, vcpus, acpi, store_evtchn, store_mfn) < 0) + vcpus, acpi, apic, store_evtchn, store_mfn) < 0) { ERROR("Error constructing guest OS"); goto error_out; diff -r 71c61c288171 -r f7c2cbb5368f tools/libxc/xenguest.h --- a/tools/libxc/xenguest.h Tue Jan 3 16:20:05 2006 +++ b/tools/libxc/xenguest.h Tue Jan 3 18:03:56 2006 @@ -56,9 +56,9 @@ int memsize, const char *image_name, unsigned int control_evtchn, - unsigned int lapic, unsigned int vcpus, unsigned int acpi, + unsigned int apic, unsigned int store_evtchn, unsigned long *store_mfn); diff -r 71c61c288171 -r f7c2cbb5368f tools/python/xen/lowlevel/xc/xc.c --- a/tools/python/xen/lowlevel/xc/xc.c Tue Jan 3 16:20:05 2006 +++ b/tools/python/xen/lowlevel/xc/xc.c Tue Jan 3 18:03:56 2006 @@ -362,22 +362,23 @@ uint32_t dom; char *image; int control_evtchn, store_evtchn; + int memsize; int vcpus = 1; - int lapic = 0; int acpi = 0; - int memsize; + int apic = 0; unsigned long store_mfn = 0; static char *kwd_list[] = { "dom", "control_evtchn", "store_evtchn", - "memsize", "image", "lapic", "vcpus", "acpi",NULL }; + "memsize", "image", "vcpus", "acpi", "apic", + NULL }; if ( !PyArg_ParseTupleAndKeywords(args, kwds, "iiiisiii", kwd_list, &dom, &control_evtchn, &store_evtchn, - &memsize, &image, &lapic, &vcpus,&acpi) ) + &memsize, &image, &vcpus, &acpi, &apic) ) return NULL; if ( xc_vmx_build(self->xc_handle, dom, memsize, image, control_evtchn, - lapic, vcpus, acpi, store_evtchn, &store_mfn) != 0 ) + vcpus, acpi, apic, store_evtchn, &store_mfn) != 0 ) return PyErr_SetFromErrno(xc_error); return Py_BuildValue("{s:i}", "store_mfn", store_mfn); diff -r 71c61c288171 -r f7c2cbb5368f tools/python/xen/xend/image.py --- a/tools/python/xen/xend/image.py Tue Jan 3 16:20:05 2006 +++ b/tools/python/xen/xend/image.py Tue Jan 3 18:03:56 2006 @@ -209,13 +209,9 @@ self.dmargs += self.configVNC(imageConfig) - self.lapic = 0 - lapic = sxp.child_value(imageConfig, 'lapic') - if not lapic is None: - self.lapic = int(lapic) - self.acpi = int(sxp.child_value(imageConfig, 'acpi', 0)) - + self.apic = int(sxp.child_value(imageConfig, 'apic', 0)) + def buildDomain(self): # Create an event channel self.device_channel = xc.evtchn_alloc_unbound(dom=self.vm.getDomid(), @@ -229,18 +225,18 @@ log.debug("control_evtchn = %d", self.device_channel) log.debug("store_evtchn = %d", store_evtchn) log.debug("memsize = %d", self.vm.getMemoryTarget() / 1024) - log.debug("lapic = %d", self.lapic) log.debug("vcpus = %d", self.vm.getVCpuCount()) log.debug("acpi = %d", self.acpi) + log.debug("apic = %d", self.apic) return xc.vmx_build(dom = self.vm.getDomid(), image = self.kernel, control_evtchn = self.device_channel, store_evtchn = store_evtchn, memsize = self.vm.getMemoryTarget() / 1024, - lapic = self.lapic, + vcpus = self.vm.getVCpuCount(), acpi = self.acpi, - vcpus = self.vm.getVCpuCount()) + apic = self.apic) # Return a list of cmd line args to the device models based on the # xm config file diff -r 71c61c288171 -r f7c2cbb5368f tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Tue Jan 3 16:20:05 2006 +++ b/tools/python/xen/xm/create.py Tue Jan 3 18:03:56 2006 @@ -160,13 +160,13 @@ fn=set_int, default=None, use="CPUS to run the domain on.") -gopts.var('lapic', val='LAPIC', - fn=set_int, default=0, - use="Disable or enable local APIC of VMX domain.") - gopts.var('acpi', val='ACPI', fn=set_int, default=0, use="Disable or enable ACPI of VMX domain.") + +gopts.var('apic', val='APIC', + fn=set_int, default=0, + use="Disable or enable APIC of VMX domain.") gopts.var('vcpus', val='VCPUS', fn=set_int, default=1, @@ -534,8 +534,8 @@ """ args = [ 'device_model', 'vcpus', 'cdrom', 'boot', 'fda', 'fdb', 'localtime', 'serial', 'stdvga', 'isa', 'nographic', 'audio', - 'vnc', 'vncviewer', 'sdl', 'display', 'ne2000', 'lapic', - 'xauthority', 'acpi' ] + 'vnc', 'vncviewer', 'sdl', 'display', 'ne2000', 'acpi', 'apic', + 'xauthority' ] for a in args: if (vals.__dict__[a]): config_image.append([a, vals.__dict__[a]]) diff -r 71c61c288171 -r f7c2cbb5368f tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Tue Jan 3 16:20:05 2006 +++ b/tools/python/xen/xm/main.py Tue Jan 3 18:03:56 2006 @@ -390,7 +390,6 @@ def xm_vcpu_list(args): - print 'Name ID VCPU CPU State Time(s) CPU Affinity' from xen.xend.XendClient import server if args: @@ -400,6 +399,8 @@ dominfo = map( lambda x: server.xend_domain_vcpuinfo(sxp.child_value(x, 'name')), doms) + + print 'Name ID VCPU CPU State Time(s) CPU Affinity' for dom in dominfo: def get_info(n): @@ -625,6 +626,8 @@ server.xend_domain_cpu_sedf_set(dom, *v) def xm_info(args): + arg_check(args, "info", 0) + from xen.xend.XendClient import server info = server.xend_node() @@ -645,9 +648,12 @@ def xm_top(args): + arg_check(args, "top", 0) + os.execvp('xentop', ['xentop']) def xm_dmesg(args): + arg_check(args, "dmesg", 0) gopts = Opts(use="""[-c|--clear] diff -r 71c61c288171 -r f7c2cbb5368f tools/xm-test/tests/network-attach/Makefile.am --- a/tools/xm-test/tests/network-attach/Makefile.am Tue Jan 3 16:20:05 2006 +++ b/tools/xm-test/tests/network-attach/Makefile.am Tue Jan 3 18:03:56 2006 @@ -6,7 +6,7 @@ 03_network_attach_detach_multiple_pos.test \ 04_network_attach_baddomain_neg.test -XFAIL_TESTS = 03_network_attach_detach_multiple_pos.test +XFAIL_TESTS = EXTRA_DIST = $(TESTS) $(XFAIL_TESTS) network_utils.py diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/ia64/vmx/mmio.c --- a/xen/arch/ia64/vmx/mmio.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/ia64/vmx/mmio.c Tue Jan 3 18:03:56 2006 @@ -29,7 +29,7 @@ #include <asm/vmx_vcpu.h> #include <asm/privop.h> #include <asm/types.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <asm/mm.h> #include <asm/vmx.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/ia64/vmx/vmx_init.c --- a/xen/arch/ia64/vmx/vmx_init.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/ia64/vmx/vmx_init.c Tue Jan 3 18:03:56 2006 @@ -42,7 +42,7 @@ #include <xen/lib.h> #include <asm/vmmu.h> #include <public/arch-ia64.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <asm/vmx_phy_mode.h> #include <asm/processor.h> #include <asm/vmx.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/ia64/vmx/vmx_support.c --- a/xen/arch/ia64/vmx/vmx_support.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/ia64/vmx/vmx_support.c Tue Jan 3 18:03:56 2006 @@ -21,7 +21,7 @@ */ #include <xen/config.h> #include <xen/sched.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <asm/vmx.h> #include <asm/vmx_vcpu.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/ia64/xen/domain.c --- a/xen/arch/ia64/xen/domain.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/ia64/xen/domain.c Tue Jan 3 18:03:56 2006 @@ -46,7 +46,7 @@ #include <asm/vmx_vcpu.h> #include <asm/vmx_vpd.h> #include <asm/pal.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #define CONFIG_DOMAIN0_CONTIGUOUS unsigned long dom0_start = -1L; diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/dm/i8259.c --- a/xen/arch/x86/dm/i8259.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/dm/i8259.c Tue Jan 3 18:03:56 2006 @@ -29,7 +29,7 @@ #include <xen/lib.h> #include <xen/errno.h> #include <xen/sched.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <asm/vmx.h> #include <asm/vmx_vpic.h> #include <asm/current.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/dm/vmx_vioapic.c --- a/xen/arch/x86/dm/vmx_vioapic.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/dm/vmx_vioapic.c Tue Jan 3 18:03:56 2006 @@ -37,7 +37,7 @@ #include <xen/lib.h> #include <xen/errno.h> #include <xen/sched.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <asm/vmx.h> #include <asm/vmx_vpic.h> #include <asm/current.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/vmx.c --- a/xen/arch/x86/vmx.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/vmx.c Tue Jan 3 18:03:56 2006 @@ -42,7 +42,7 @@ #include <asm/shadow_64.h> #endif #include <public/sched.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <asm/vmx_vpic.h> #include <asm/vmx_vlapic.h> @@ -65,11 +65,6 @@ { struct domain *d = v->domain; struct vcpu *vc; - - d->arch.vmx_platform.lapic_enable = v->arch.guest_context.user_regs.ecx; - v->arch.guest_context.user_regs.ecx = 0; - VMX_DBG_LOG(DBG_LEVEL_VLAPIC, "lapic enable is %d.\n", - d->arch.vmx_platform.lapic_enable); /* Initialize monitor page table */ for_each_vcpu(d, vc) @@ -95,7 +90,7 @@ void vmx_relinquish_resources(struct vcpu *v) { struct vmx_virpit *vpit; - + if ( !VMX_DOMAIN(v) ) return; diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/vmx_intercept.c --- a/xen/arch/x86/vmx_intercept.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/vmx_intercept.c Tue Jan 3 18:03:56 2006 @@ -24,7 +24,7 @@ #include <asm/vmx_vpit.h> #include <asm/vmx_intercept.h> #include <asm/vmx_vlapic.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <xen/lib.h> #include <xen/sched.h> #include <asm/current.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/vmx_io.c --- a/xen/arch/x86/vmx_io.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/vmx_io.c Tue Jan 3 18:03:56 2006 @@ -37,7 +37,7 @@ #include <asm/shadow.h> #include <asm/vmx_vpic.h> #include <asm/vmx_vlapic.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #ifdef CONFIG_VMX #if defined (__i386__) diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/vmx_platform.c --- a/xen/arch/x86/vmx_platform.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/vmx_platform.c Tue Jan 3 18:03:56 2006 @@ -27,7 +27,7 @@ #include <xen/trace.h> #include <asm/vmx.h> #include <asm/vmx_platform.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #include <xen/lib.h> #include <xen/sched.h> diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/vmx_vlapic.c --- a/xen/arch/x86/vmx_vlapic.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/vmx_vlapic.c Tue Jan 3 18:03:56 2006 @@ -32,7 +32,7 @@ #include <xen/lib.h> #include <xen/sched.h> #include <asm/current.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #ifdef CONFIG_VMX @@ -62,7 +62,7 @@ int vmx_apic_support(struct domain *d) { - return d->arch.vmx_platform.lapic_enable; + return d->arch.vmx_platform.apic_enabled; } s_time_t get_apictime_scheduled(struct vcpu *v) diff -r 71c61c288171 -r f7c2cbb5368f xen/arch/x86/vmx_vmcs.c --- a/xen/arch/x86/vmx_vmcs.c Tue Jan 3 16:20:05 2006 +++ b/xen/arch/x86/vmx_vmcs.c Tue Jan 3 18:03:56 2006 @@ -32,7 +32,7 @@ #include <asm/flushtlb.h> #include <xen/event.h> #include <xen/kernel.h> -#include <public/io/ioreq.h> +#include <public/hvm/hvm_info_table.h> #if CONFIG_PAGING_LEVELS >= 4 #include <asm/shadow_64.h> #endif @@ -206,35 +206,55 @@ &d->shared_info->evtchn_mask[0]); } -#define VCPU_NR_PAGE 0x0009F000 -#define VCPU_NR_OFFSET 0x00000800 -#define VCPU_MAGIC 0x76637075 /* "vcpu" */ - -static void vmx_set_vcpu_nr(struct domain *d) +static int validate_hvm_info(struct hvm_info_table *t) +{ + char signature[] = "HVM INFO"; + uint8_t *ptr = (uint8_t *)t; + uint8_t sum = 0; + int i; + + /* strncmp(t->signature, "HVM INFO", 8) */ + for ( i = 0; i < 8; i++ ) { + if ( signature[i] != t->signature[i] ) { + printk("Bad hvm info signature\n"); + return 0; + } + } + + for ( i = 0; i < t->length; i++ ) + sum += ptr[i]; + + return (sum == 0); +} + +static void vmx_get_hvm_info(struct domain *d) { unsigned char *p; unsigned long mpfn; - unsigned int *vcpus; - - mpfn = get_mfn_from_pfn(VCPU_NR_PAGE >> PAGE_SHIFT); - if (mpfn == INVALID_MFN) { - printk("Can not get vcpu number page mfn for VMX domain.\n"); + struct hvm_info_table *t; + + mpfn = get_mfn_from_pfn(HVM_INFO_PFN); + if ( mpfn == INVALID_MFN ) { + printk("Can not get hvm info page mfn for VMX domain.\n"); domain_crash_synchronous(); } p = map_domain_page(mpfn); - if (p == NULL) { - printk("Can not map vcpu number page for VMX domain.\n"); - domain_crash_synchronous(); - } - - vcpus = (unsigned int *)(p + VCPU_NR_OFFSET); - if (vcpus[0] != VCPU_MAGIC) { - printk("Bad vcpus magic, set vcpu number to 1 by default.\n"); - d->arch.vmx_platform.nr_vcpu = 1; - } - - d->arch.vmx_platform.nr_vcpu = vcpus[1]; + if ( p == NULL ) { + printk("Can not map hvm info page for VMX domain.\n"); + domain_crash_synchronous(); + } + + t = (struct hvm_info_table *)(p + HVM_INFO_OFFSET); + + if ( validate_hvm_info(t) ) { + d->arch.vmx_platform.nr_vcpus = t->nr_vcpus; + d->arch.vmx_platform.apic_enabled = t->apic_enabled; + } else { + printk("Bad hvm info table\n"); + d->arch.vmx_platform.nr_vcpus = 1; + d->arch.vmx_platform.apic_enabled = 0; + } unmap_domain_page(p); } @@ -244,10 +264,10 @@ struct vmx_platform *platform; vmx_map_io_shared_page(d); - vmx_set_vcpu_nr(d); + vmx_get_hvm_info(d); platform = &d->arch.vmx_platform; - pic_init(&platform->vmx_pic, pic_irq_request, + pic_init(&platform->vmx_pic, pic_irq_request, &platform->interrupt_request); register_pic_io_hook(); diff -r 71c61c288171 -r f7c2cbb5368f xen/include/asm-ia64/vmx.h --- a/xen/include/asm-ia64/vmx.h Tue Jan 3 16:20:05 2006 +++ b/xen/include/asm-ia64/vmx.h Tue Jan 3 18:03:56 2006 @@ -23,7 +23,7 @@ #define _ASM_IA64_VT_H #define RR7_SWITCH_SHIFT 12 /* 4k enough */ -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> extern void identify_vmx_feature(void); extern unsigned int vmx_enabled; diff -r 71c61c288171 -r f7c2cbb5368f xen/include/asm-x86/vmx.h --- a/xen/include/asm-x86/vmx.h Tue Jan 3 16:20:05 2006 +++ b/xen/include/asm-x86/vmx.h Tue Jan 3 18:03:56 2006 @@ -26,7 +26,7 @@ #include <asm/vmx_vmcs.h> #include <asm/i387.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> extern int hvm_enabled; @@ -506,7 +506,7 @@ static inline unsigned int vmx_get_vcpu_nr(struct domain *d) { - return d->arch.vmx_platform.nr_vcpu; + return d->arch.vmx_platform.nr_vcpus; } static inline shared_iopage_t *get_sp(struct domain *d) diff -r 71c61c288171 -r f7c2cbb5368f xen/include/asm-x86/vmx_intercept.h --- a/xen/include/asm-x86/vmx_intercept.h Tue Jan 3 16:20:05 2006 +++ b/xen/include/asm-x86/vmx_intercept.h Tue Jan 3 18:03:56 2006 @@ -6,7 +6,7 @@ #include <xen/lib.h> #include <xen/time.h> #include <xen/errno.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #define MAX_IO_HANDLER 8 diff -r 71c61c288171 -r f7c2cbb5368f xen/include/asm-x86/vmx_platform.h --- a/xen/include/asm-x86/vmx_platform.h Tue Jan 3 16:20:05 2006 +++ b/xen/include/asm-x86/vmx_platform.h Tue Jan 3 18:03:56 2006 @@ -33,10 +33,10 @@ (((size_reg) << 24) | ((index) << 16) | ((seg) << 8) | (flag)) #define operand_size(operand) \ - ((operand >> 24) & 0xFF) + ((operand >> 24) & 0xFF) #define operand_index(operand) \ - ((operand >> 16) & 0xFF) + ((operand >> 16) & 0xFF) /* for instruction.operand[].size */ #define BYTE 1 @@ -81,13 +81,13 @@ struct vmx_platform { unsigned long shared_page_va; - unsigned int nr_vcpu; - unsigned int lapic_enable; + unsigned int nr_vcpus; + unsigned int apic_enabled; struct vmx_virpit vmx_pit; struct vmx_io_handler vmx_io_handler; struct vmx_virpic vmx_pic; - struct vmx_vioapic vmx_vioapic; + struct vmx_vioapic vmx_vioapic; unsigned char round_info[256]; spinlock_t round_robin_lock; int interrupt_request; diff -r 71c61c288171 -r f7c2cbb5368f xen/include/asm-x86/vmx_vlapic.h --- a/xen/include/asm-x86/vmx_vlapic.h Tue Jan 3 16:20:05 2006 +++ b/xen/include/asm-x86/vmx_vlapic.h Tue Jan 3 18:03:56 2006 @@ -21,7 +21,7 @@ #define VMX_VLAPIC_H #include <asm/msr.h> -#include <public/io/ioreq.h> +#include <public/hvm/ioreq.h> #if defined(__i386__) || defined(__x86_64__) static inline int __fls(uint32_t word) diff -r 71c61c288171 -r f7c2cbb5368f xen/include/asm-x86/vmx_vmcs.h --- a/xen/include/asm-x86/vmx_vmcs.h Tue Jan 3 16:20:05 2006 +++ b/xen/include/asm-x86/vmx_vmcs.h Tue Jan 3 18:03:56 2006 @@ -23,7 +23,7 @@ #include <asm/vmx_cpu.h> #include <asm/vmx_platform.h> #include <asm/vmx_vlapic.h> -#include <public/vmx_assist.h> +#include <public/hvm/vmx_assist.h> extern int start_vmx(void); extern void stop_vmx(void); diff -r 71c61c288171 -r f7c2cbb5368f xen/include/public/hvm/hvm_info_table.h --- /dev/null Tue Jan 3 16:20:05 2006 +++ b/xen/include/public/hvm/hvm_info_table.h Tue Jan 3 18:03:56 2006 @@ -0,0 +1,24 @@ +/****************************************************************************** + * hvm/hvm_info_table.h + * + * HVM parameter and information table, written into guest memory map. + */ + +#ifndef __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ +#define __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ + +#define HVM_INFO_PFN 0x09F +#define HVM_INFO_OFFSET 0x800 +#define HVM_INFO_PADDR ((HVM_INFO_PFN << 12) + HVM_INFO_OFFSET) + +struct hvm_info_table { + char signature[8]; /* "HVM INFO" */ + uint32_t length; + uint8_t checksum; + uint8_t acpi_enabled; + uint8_t apic_enabled; + uint8_t pad[1]; + uint32_t nr_vcpus; +}; + +#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */ diff -r 71c61c288171 -r f7c2cbb5368f xen/include/public/hvm/ioreq.h --- /dev/null Tue Jan 3 16:20:05 2006 +++ b/xen/include/public/hvm/ioreq.h Tue Jan 3 18:03:56 2006 @@ -0,0 +1,90 @@ +/* + * ioreq.h: I/O request definitions for device models + * Copyright (c) 2004, Intel Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + */ + +#ifndef _IOREQ_H_ +#define _IOREQ_H_ + +#define IOREQ_READ 1 +#define IOREQ_WRITE 0 + +#define STATE_INVALID 0 +#define STATE_IOREQ_READY 1 +#define STATE_IOREQ_INPROCESS 2 +#define STATE_IORESP_READY 3 +#define STATE_IORESP_HOOK 4 + +#define IOREQ_TYPE_PIO 0 /* pio */ +#define IOREQ_TYPE_COPY 1 /* mmio ops */ +#define IOREQ_TYPE_AND 2 +#define IOREQ_TYPE_OR 3 +#define IOREQ_TYPE_XOR 4 + +/* + * VMExit dispatcher should cooperate with instruction decoder to + * prepare this structure and notify service OS and DM by sending + * virq + */ +typedef struct { + uint64_t addr; /* physical address */ + uint64_t size; /* size in bytes */ + uint64_t count; /* for rep prefixes */ + union { + uint64_t data; /* data */ + void *pdata; /* pointer to data */ + } u; + uint8_t state:4; + uint8_t pdata_valid:1; /* if 1, use pdata above */ + uint8_t dir:1; /* 1=read, 0=write */ + uint8_t df:1; + uint8_t type; /* I/O type */ +} ioreq_t; + +#define MAX_VECTOR 256 +#define BITS_PER_BYTE 8 +#define INTR_LEN (MAX_VECTOR/(BITS_PER_BYTE * sizeof(uint64_t))) +#define INTR_LEN_32 (MAX_VECTOR/(BITS_PER_BYTE * sizeof(uint32_t))) + +typedef struct { + uint16_t pic_elcr; + uint16_t pic_irr; + uint16_t pic_last_irr; + uint16_t pic_clear_irr; + int eport; /* Event channel port */ +} global_iodata_t; + +typedef struct { + ioreq_t vp_ioreq; +} vcpu_iodata_t; + +typedef struct { + global_iodata_t sp_global; + vcpu_iodata_t vcpu_iodata[1]; +} shared_iopage_t; + +#endif /* _IOREQ_H_ */ + +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff -r 71c61c288171 -r f7c2cbb5368f xen/include/public/hvm/vmx_assist.h --- /dev/null Tue Jan 3 16:20:05 2006 +++ b/xen/include/public/hvm/vmx_assist.h Tue Jan 3 18:03:56 2006 @@ -0,0 +1,97 @@ +/* + * vmx_assist.h: Context definitions for the VMXASSIST world switch. + * + * Leendert van Doorn, leendert@xxxxxxxxxxxxxx + * Copyright (c) 2005, International Business Machines Corporation. + */ + +#ifndef _VMX_ASSIST_H_ +#define _VMX_ASSIST_H_ + +#define VMXASSIST_BASE 0xD0000 +#define VMXASSIST_MAGIC 0x17101966 +#define VMXASSIST_MAGIC_OFFSET (VMXASSIST_BASE+8) + +#define VMXASSIST_NEW_CONTEXT (VMXASSIST_BASE + 12) +#define VMXASSIST_OLD_CONTEXT (VMXASSIST_NEW_CONTEXT + 4) + +#ifndef __ASSEMBLY__ + +union vmcs_arbytes { + struct arbyte_fields { + unsigned int seg_type : 4, + s : 1, + dpl : 2, + p : 1, + reserved0 : 4, + avl : 1, + reserved1 : 1, + default_ops_size: 1, + g : 1, + null_bit : 1, + reserved2 : 15; + } fields; + unsigned int bytes; +}; + +/* + * World switch state + */ +typedef struct vmx_assist_context { + uint32_t eip; /* execution pointer */ + uint32_t esp; /* stack pointer */ + uint32_t eflags; /* flags register */ + uint32_t cr0; + uint32_t cr3; /* page table directory */ + uint32_t cr4; + uint32_t idtr_limit; /* idt */ + uint32_t idtr_base; + uint32_t gdtr_limit; /* gdt */ + uint32_t gdtr_base; + uint32_t cs_sel; /* cs selector */ + uint32_t cs_limit; + uint32_t cs_base; + union vmcs_arbytes cs_arbytes; + uint32_t ds_sel; /* ds selector */ + uint32_t ds_limit; + uint32_t ds_base; + union vmcs_arbytes ds_arbytes; + uint32_t es_sel; /* es selector */ + uint32_t es_limit; + uint32_t es_base; + union vmcs_arbytes es_arbytes; + uint32_t ss_sel; /* ss selector */ + uint32_t ss_limit; + uint32_t ss_base; + union vmcs_arbytes ss_arbytes; + uint32_t fs_sel; /* fs selector */ + uint32_t fs_limit; + uint32_t fs_base; + union vmcs_arbytes fs_arbytes; + uint32_t gs_sel; /* gs selector */ + uint32_t gs_limit; + uint32_t gs_base; + union vmcs_arbytes gs_arbytes; + uint32_t tr_sel; /* task selector */ + uint32_t tr_limit; + uint32_t tr_base; + union vmcs_arbytes tr_arbytes; + uint32_t ldtr_sel; /* ldtr selector */ + uint32_t ldtr_limit; + uint32_t ldtr_base; + union vmcs_arbytes ldtr_arbytes; +} vmx_assist_context_t; + +#endif /* __ASSEMBLY__ */ + +#endif /* _VMX_ASSIST_H_ */ + +/* + * Local variables: + * mode: C + * c-set-style: "BSD" + * c-basic-offset: 4 + * tab-width: 4 + * indent-tabs-mode: nil + * End: + */ diff -r 71c61c288171 -r f7c2cbb5368f xen/include/public/io/ioreq.h --- a/xen/include/public/io/ioreq.h Tue Jan 3 16:20:05 2006 +++ /dev/null Tue Jan 3 18:03:56 2006 @@ -1,91 +0,0 @@ -/* - * ioreq.h: I/O request definitions for device models - * Copyright (c) 2004, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - */ - -#ifndef _IOREQ_H_ -#define _IOREQ_H_ - -#define IOREQ_READ 1 -#define IOREQ_WRITE 0 - -#define STATE_INVALID 0 -#define STATE_IOREQ_READY 1 -#define STATE_IOREQ_INPROCESS 2 -#define STATE_IORESP_READY 3 -#define STATE_IORESP_HOOK 4 - -#define IOREQ_TYPE_PIO 0 /* pio */ -#define IOREQ_TYPE_COPY 1 /* mmio ops */ -#define IOREQ_TYPE_AND 2 -#define IOREQ_TYPE_OR 3 -#define IOREQ_TYPE_XOR 4 - -/* - * VMExit dispatcher should cooperate with instruction decoder to - * prepare this structure and notify service OS and DM by sending - * virq - */ -typedef struct { - uint64_t addr; /* physical address */ - uint64_t size; /* size in bytes */ - uint64_t count; /* for rep prefixes */ - union { - uint64_t data; /* data */ - void *pdata; /* pointer to data */ - } u; - uint8_t state:4; - uint8_t pdata_valid:1; /* if 1, use pdata above */ - uint8_t dir:1; /* 1=read, 0=write */ - uint8_t df:1; - uint8_t type; /* I/O type */ -} ioreq_t; - -#define MAX_VECTOR 256 -#define BITS_PER_BYTE 8 -#define INTR_LEN (MAX_VECTOR/(BITS_PER_BYTE * sizeof(uint64_t))) -#define INTR_LEN_32 (MAX_VECTOR/(BITS_PER_BYTE * sizeof(uint32_t))) - -typedef struct { - uint16_t pic_elcr; - uint16_t pic_irr; - uint16_t pic_last_irr; - uint16_t pic_clear_irr; - int eport; /* Event channel port */ -} global_iodata_t; - -typedef struct { - ioreq_t vp_ioreq; - unsigned long vp_intr[INTR_LEN]; -} vcpu_iodata_t; - -typedef struct { - global_iodata_t sp_global; - vcpu_iodata_t vcpu_iodata[1]; -} shared_iopage_t; - -#endif /* _IOREQ_H_ */ - -/* - * Local variables: - * mode: C - * c-set-style: "BSD" - * c-basic-offset: 4 - * tab-width: 4 - * indent-tabs-mode: nil - * End: - */ diff -r 71c61c288171 -r f7c2cbb5368f xen/include/public/vmx_assist.h --- a/xen/include/public/vmx_assist.h Tue Jan 3 16:20:05 2006 +++ /dev/null Tue Jan 3 18:03:56 2006 @@ -1,97 +0,0 @@ -/* - * vmx_assist.h: Context definitions for the VMXASSIST world switch. - * - * Leendert van Doorn, leendert@xxxxxxxxxxxxxx - * Copyright (c) 2005, International Business Machines Corporation. - */ - -#ifndef _VMX_ASSIST_H_ -#define _VMX_ASSIST_H_ - -#define VMXASSIST_BASE 0xD0000 -#define VMXASSIST_MAGIC 0x17101966 -#define VMXASSIST_MAGIC_OFFSET (VMXASSIST_BASE+8) - -#define VMXASSIST_NEW_CONTEXT (VMXASSIST_BASE + 12) -#define VMXASSIST_OLD_CONTEXT (VMXASSIST_NEW_CONTEXT + 4) - -#ifndef __ASSEMBLY__ - -union vmcs_arbytes { - struct arbyte_fields { - unsigned int seg_type : 4, - s : 1, - dpl : 2, - p : 1, - reserved0 : 4, - avl : 1, - reserved1 : 1, - default_ops_size: 1, - g : 1, - null_bit : 1, - reserved2 : 15; - } fields; - unsigned int bytes; -}; - -/* - * World switch state - */ -typedef struct vmx_assist_context { - uint32_t eip; /* execution pointer */ - uint32_t esp; /* stack pointer */ - uint32_t eflags; /* flags register */ - uint32_t cr0; - uint32_t cr3; /* page table directory */ - uint32_t cr4; - uint32_t idtr_limit; /* idt */ - uint32_t idtr_base; - uint32_t gdtr_limit; /* gdt */ - uint32_t gdtr_base; - uint32_t cs_sel; /* cs selector */ - uint32_t cs_limit; - uint32_t cs_base; - union vmcs_arbytes cs_arbytes; - uint32_t ds_sel; /* ds selector */ - uint32_t ds_limit; - uint32_t ds_base; - union vmcs_arbytes ds_arbytes; - uint32_t es_sel; /* es selector */ - uint32_t es_limit; - uint32_t es_base; - union vmcs_arbytes es_arbytes; - uint32_t ss_sel; /* ss selector */ - uint32_t ss_limit; - uint32_t ss_base; - union vmcs_arbytes ss_arbytes; - uint32_t fs_sel; /* fs selector */ - uint32_t fs_limit; - uint32_t fs_base; - union vmcs_arbytes fs_arbytes; - uint32_t gs_sel; /* gs selector */ - uint32_t gs_limit; - uint32_t gs_base; - union vmcs_arbytes gs_arbytes; - uint32_t tr_sel; /* task selector */ - uint32_t tr_limit; - uint32_t tr_base; - union vmcs_arbytes tr_arbytes; - uint32_t ldtr_sel; /* ldtr selector */ - uint32_t ldtr_limit; - uint32_t ldtr_base; - union vmcs_arbytes ldtr_arbytes; -} vmx_assist_context_t; - -#endif /* __ASSEMBLY__ */ - -#endif /* _VMX_ASSIST_H_ */ - -/* - * Local variables: - * mode: C - * c-set-style: "BSD" - * c-basic-offset: 4 - * tab-width: 4 - * indent-tabs-mode: nil - * End: - */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |