Mailing List Archive

Marge with xen-ia64-unstable.hg
# HG changeset patch
# User kaf24@firebug.cl.cam.ac.uk
# 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@watson.ibm.com
+ * 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@watson.ibm.com
- * 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@lists.xensource.com
http://lists.xensource.com/xen-changelog