# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 2d73714911c2103958e3bc82957a78cacf4d8bfe
# Parent 199d53efd02974b9e78f4492a3baee426e4e03c3
# Parent 5848356af8da250becd856b244a33c9391b9ab1c
merge with xen-unstable.hg
---
Config.mk | 2
linux-2.6-xen-sparse/drivers/xen/netback/netback.c | 11 ++--
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c | 2
tools/ioemu/hw/vga.c | 2
tools/ioemu/patches/domain-reset | 8 +-
tools/ioemu/patches/domain-timeoffset | 18 +++---
tools/ioemu/patches/hypervisor-pit | 10 +--
tools/ioemu/patches/ioemu-ia64 | 2
tools/ioemu/patches/qemu-bugfixes | 14 ++++-
tools/ioemu/patches/qemu-init-vgabios | 9 ++-
tools/ioemu/patches/qemu-logging | 16 ++---
tools/ioemu/patches/qemu-smp | 10 +--
tools/ioemu/patches/shared-vram | 16 ++---
tools/ioemu/patches/support-xm-console | 12 ++--
tools/ioemu/patches/vnc-cleanup | 22 ++++----
tools/ioemu/patches/vnc-fixes | 8 +-
tools/ioemu/patches/vnc-start-vncviewer | 18 +++---
tools/ioemu/patches/xen-domain-name | 14 ++---
tools/ioemu/patches/xen-domid | 15 ++---
tools/ioemu/patches/xen-mm | 12 ++--
tools/ioemu/patches/xen-network | 6 +-
tools/ioemu/vl.c | 1
tools/libxc/xc_hvm_build.c | 32 +----------
xen/arch/x86/hvm/vmx/vmx.c | 18 +++---
xen/arch/x86/shadow32.c | 24 ++------
xen/arch/x86/shadow_public.c | 19 +++---
xen/common/memory.c | 2
xen/include/asm-ia64/mm.h | 5 +
xen/include/asm-x86/hvm/vmx/vmx.h | 52 +++++++++++++------
xen/include/asm-x86/mm.h | 5 +
30 files changed, 207 insertions(+), 178 deletions(-)
diff -r 199d53efd029 -r 2d73714911c2 Config.mk
--- a/Config.mk Thu Jul 27 10:00:00 2006 -0600
+++ b/Config.mk Thu Jul 27 10:43:34 2006 -0600
@@ -36,6 +36,8 @@ CFLAGS ?= -O2 -fomit-frame-pointer
CFLAGS ?= -O2 -fomit-frame-pointer
CFLAGS += -DNDEBUG
else
+# Less than -O1 produces bad code and large stack frames
+CFLAGS ?= -O1 -fno-omit-frame-pointer
CFLAGS += -g
endif
diff -r 199d53efd029 -r 2d73714911c2
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Thu Jul 27
10:00:00 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Thu Jul 27
10:43:34 2006 -0600
@@ -99,24 +99,21 @@ static spinlock_t net_schedule_list_lock
#define MAX_MFN_ALLOC 64
static unsigned long mfn_list[MAX_MFN_ALLOC];
static unsigned int alloc_index = 0;
-static DEFINE_SPINLOCK(mfn_lock);
static unsigned long alloc_mfn(void)
{
- unsigned long mfn = 0, flags;
+ unsigned long mfn = 0;
struct xen_memory_reservation reservation = {
.nr_extents = MAX_MFN_ALLOC,
.extent_order = 0,
.domid = DOMID_SELF
};
set_xen_guest_handle(reservation.extent_start, mfn_list);
- spin_lock_irqsave(&mfn_lock, flags);
if ( unlikely(alloc_index == 0) )
alloc_index = HYPERVISOR_memory_op(
XENMEM_increase_reservation, &reservation);
if ( alloc_index != 0 )
mfn = mfn_list[--alloc_index];
- spin_unlock_irqrestore(&mfn_lock, flags);
return mfn;
}
@@ -222,9 +219,13 @@ static void net_rx_action(unsigned long
unsigned long vdata, old_mfn, new_mfn;
struct sk_buff_head rxq;
struct sk_buff *skb;
- u16 notify_list[NET_RX_RING_SIZE];
int notify_nr = 0;
int ret;
+ /*
+ * Putting hundreds of bytes on the stack is considered rude.
+ * Static works because a tasklet can only be on one CPU at any time.
+ */
+ static u16 notify_list[NET_RX_RING_SIZE];
skb_queue_head_init(&rxq);
diff -r 199d53efd029 -r 2d73714911c2
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c Thu Jul 27
10:00:00 2006 -0600
+++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c Thu Jul 27
10:43:34 2006 -0600
@@ -788,6 +788,8 @@ static int network_start_xmit(struct sk_
gso->u.gso.size = skb_shinfo(skb)->gso_size;
gso->u.gso.type = XEN_NETIF_GSO_TYPE_TCPV4;
+ gso->u.gso.pad = 0;
+ gso->u.gso.features = 0;
gso->type = XEN_NETIF_EXTRA_TYPE_GSO;
gso->flags = 0;
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/hw/vga.c
--- a/tools/ioemu/hw/vga.c Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/hw/vga.c Thu Jul 27 10:43:34 2006 -0600
@@ -1953,6 +1953,8 @@ void vga_common_init(VGAState *s, Displa
vga_screen_dump, s);
/* XXX: currently needed for display */
vga_state = s;
+
+ vga_bios_init(s);
}
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/domain-reset
--- a/tools/ioemu/patches/domain-reset Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/domain-reset Thu Jul 27 10:43:34 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-07-12 11:35:00.710827712
+0100
-+++ ioemu/target-i386-dm/helper2.c 2006-07-12 11:35:02.419613627 +0100
+--- ioemu.orig/target-i386-dm/helper2.c 2006-07-27 11:16:57.527492229
+0100
++++ ioemu/target-i386-dm/helper2.c 2006-07-27 11:16:59.381287013 +0100
@@ -123,6 +123,25 @@
/* called from main_cpu_reset */
void cpu_reset(CPUX86State *env)
@@ -41,9 +41,9 @@ Index: ioemu/target-i386-dm/helper2.c
/* Wait up to 10 msec. */
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-12 11:35:02.273631916 +0100
-+++ ioemu/vl.c 2006-07-12 11:35:02.421613376 +0100
-@@ -4411,7 +4411,7 @@
+--- ioemu.orig/vl.c 2006-07-27 11:16:59.317294097 +0100
++++ ioemu/vl.c 2006-07-27 11:16:59.384286681 +0100
+@@ -4412,7 +4412,7 @@
} QEMUResetEntry;
static QEMUResetEntry *first_reset_entry;
@@ -54,8 +54,8 @@ Index: ioemu/vl.c
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-07-12 11:35:01.454734511 +0100
-+++ ioemu/vl.h 2006-07-12 11:35:02.422613251 +0100
+--- ioemu.orig/vl.h 2006-07-27 11:16:58.127425816 +0100
++++ ioemu/vl.h 2006-07-27 11:16:59.384286681 +0100
@@ -122,6 +122,7 @@
void qemu_register_reset(QEMUResetHandler *func, void *opaque);
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/domain-timeoffset
--- a/tools/ioemu/patches/domain-timeoffset Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/domain-timeoffset Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/mc146818rtc.c
Index: ioemu/hw/mc146818rtc.c
===================================================================
---- ioemu.orig/hw/mc146818rtc.c 2006-07-26 15:17:35.110819901 +0100
-+++ ioemu/hw/mc146818rtc.c 2006-07-26 15:17:40.292255496 +0100
+--- ioemu.orig/hw/mc146818rtc.c 2006-07-27 11:17:18.007225084 +0100
++++ ioemu/hw/mc146818rtc.c 2006-07-27 11:17:48.250876949 +0100
@@ -178,10 +178,27 @@
}
}
@@ -46,8 +46,8 @@ Index: ioemu/hw/mc146818rtc.c
static void rtc_copy_date(RTCState *s)
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-07-26 15:17:39.820306906 +0100
-+++ ioemu/hw/pc.c 2006-07-26 15:17:40.293255388 +0100
+--- ioemu.orig/hw/pc.c 2006-07-27 11:17:47.993905398 +0100
++++ ioemu/hw/pc.c 2006-07-27 11:17:48.251876839 +0100
@@ -151,7 +151,7 @@
}
@@ -117,8 +117,8 @@ Index: ioemu/hw/pc.c
QEMUMachine pc_machine = {
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-26 15:17:40.169268893 +0100
-+++ ioemu/vl.c 2006-07-26 15:17:40.296255061 +0100
+--- ioemu.orig/vl.c 2006-07-27 11:17:48.126890676 +0100
++++ ioemu/vl.c 2006-07-27 11:17:48.254876507 +0100
@@ -164,6 +164,8 @@
int xc_handle;
@@ -128,7 +128,7 @@ Index: ioemu/vl.c
char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
extern int domid;
-@@ -4799,6 +4801,7 @@
+@@ -4800,6 +4802,7 @@
#endif
"-loadvm file start right away with a saved state (loadvm in
monitor)\n"
"-vnc display start a VNC server on display\n"
@@ -136,7 +136,7 @@ Index: ioemu/vl.c
"\n"
"During emulation, the following keys are useful:\n"
"ctrl-alt-f toggle full screen\n"
-@@ -4889,6 +4892,7 @@
+@@ -4890,6 +4893,7 @@
QEMU_OPTION_d,
QEMU_OPTION_vcpus,
@@ -144,7 +144,7 @@ Index: ioemu/vl.c
};
typedef struct QEMUOption {
-@@ -4967,6 +4971,7 @@
+@@ -4968,6 +4972,7 @@
{ "d", HAS_ARG, QEMU_OPTION_d },
{ "vcpus", 1, QEMU_OPTION_vcpus },
@@ -152,7 +152,7 @@ Index: ioemu/vl.c
{ NULL },
};
-@@ -5669,6 +5674,9 @@
+@@ -5670,6 +5675,9 @@
vcpus = atoi(optarg);
fprintf(logfile, "qemu: the number of cpus is %d\n", vcpus);
break;
@@ -162,7 +162,7 @@ Index: ioemu/vl.c
}
}
}
-@@ -5992,7 +6000,8 @@
+@@ -5993,7 +6001,8 @@
machine->init(ram_size, vga_ram_size, boot_device,
ds, fd_filename, snapshot,
@@ -174,8 +174,8 @@ Index: ioemu/vl.c
qemu_mod_timer(gui_timer, qemu_get_clock(rt_clock));
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-07-26 15:17:39.825306361 +0100
-+++ ioemu/vl.h 2006-07-26 15:17:40.297254952 +0100
+--- ioemu.orig/vl.h 2006-07-27 11:17:47.998904845 +0100
++++ ioemu/vl.h 2006-07-27 11:17:48.254876507 +0100
@@ -556,7 +556,7 @@
int boot_device,
DisplayState *ds, const char **fd_filename, int snapshot,
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/hypervisor-pit
--- a/tools/ioemu/patches/hypervisor-pit Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/hypervisor-pit Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/Makefile.target
Index: ioemu/Makefile.target
===================================================================
---- ioemu.orig/Makefile.target 2006-07-12 11:35:01.899678766 +0100
-+++ ioemu/Makefile.target 2006-07-12 11:35:02.711577049 +0100
+--- ioemu.orig/Makefile.target 2006-07-27 11:16:58.970332506 +0100
++++ ioemu/Makefile.target 2006-07-27 11:16:59.758245283 +0100
@@ -333,7 +333,7 @@
ifeq ($(TARGET_BASE_ARCH), i386)
# Hardware support
@@ -13,8 +13,8 @@ Index: ioemu/Makefile.target
endif
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-07-12 11:35:02.059658723 +0100
-+++ ioemu/hw/pc.c 2006-07-12 11:35:02.712576924 +0100
+--- ioemu.orig/hw/pc.c 2006-07-27 11:16:59.036325200 +0100
++++ ioemu/hw/pc.c 2006-07-27 11:16:59.759245173 +0100
@@ -38,7 +38,9 @@
static fdctrl_t *floppy_controller;
@@ -38,9 +38,9 @@ Index: ioemu/hw/pc.c
pic_set_alt_irq_func(isa_pic, ioapic_set_irq, ioapic);
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-12 11:35:02.649584815 +0100
-+++ ioemu/vl.c 2006-07-12 11:35:02.715576548 +0100
-@@ -5033,6 +5033,7 @@
+--- ioemu.orig/vl.c 2006-07-27 11:16:59.614261222 +0100
++++ ioemu/vl.c 2006-07-27 11:16:59.762244841 +0100
+@@ -5034,6 +5034,7 @@
#ifdef HAS_AUDIO
struct soundhw soundhw[] = {
@@ -48,7 +48,7 @@ Index: ioemu/vl.c
#ifdef TARGET_I386
{
"pcspk",
-@@ -5042,6 +5043,7 @@
+@@ -5043,6 +5044,7 @@
{ .init_isa = pcspk_audio_init }
},
#endif
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/ioemu-ia64
--- a/tools/ioemu/patches/ioemu-ia64 Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/ioemu-ia64 Thu Jul 27 10:43:34 2006 -0600
@@ -62,7 +62,7 @@ Index: ioemu/vl.c
if (xc_get_pfn_list(xc_handle, domid, page_array, nr_pages) != nr_pages) {
fprintf(logfile, "xc_get_pfn_list returned error %d\n", errno);
exit(-1);
-@@ -5597,6 +5598,34 @@
+@@ -5598,6 +5599,34 @@
fprintf(logfile, "shared page at pfn:%lx, mfn: %"PRIx64"\n", nr_pages - 1,
(uint64_t)(page_array[nr_pages - 1]));
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/qemu-bugfixes
--- a/tools/ioemu/patches/qemu-bugfixes Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/qemu-bugfixes Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/console.c
Index: ioemu/console.c
===================================================================
---- ioemu.orig/console.c 2006-07-26 13:39:11.999009495 +0100
-+++ ioemu/console.c 2006-07-26 14:15:19.413719225 +0100
+--- ioemu.orig/console.c 2006-07-27 11:16:53.732912290 +0100
++++ ioemu/console.c 2006-07-27 11:16:57.753467214 +0100
@@ -449,7 +449,7 @@
c++;
}
@@ -50,8 +50,8 @@ Index: ioemu/console.c
s->y_base = 0;
Index: ioemu/usb-linux.c
===================================================================
---- ioemu.orig/usb-linux.c 2006-07-26 13:39:11.999009495 +0100
-+++ ioemu/usb-linux.c 2006-07-26 13:39:16.622514851 +0100
+--- ioemu.orig/usb-linux.c 2006-07-27 11:16:53.732912290 +0100
++++ ioemu/usb-linux.c 2006-07-27 11:16:57.754467103 +0100
@@ -26,6 +26,7 @@
#if defined(__linux__)
#include <dirent.h>
@@ -60,3 +60,15 @@ Index: ioemu/usb-linux.c
#include <linux/usbdevice_fs.h>
#include <linux/version.h>
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-07-27 11:16:57.681475183 +0100
++++ ioemu/vl.c 2006-07-27 11:17:33.279534373 +0100
+@@ -3201,6 +3201,7 @@
+ if (net_tap_fd_init(vlan, fd))
+ ret = 0;
+ } else {
++ ifname[0] = '\0';
+ get_param_value(ifname, sizeof(ifname), "ifname", p);
+ if (get_param_value(setup_script, sizeof(setup_script), "script",
p) == 0) {
+ pstrcpy(setup_script, sizeof(setup_script),
DEFAULT_NETWORK_SCRIPT);
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/qemu-init-vgabios
--- a/tools/ioemu/patches/qemu-init-vgabios Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/qemu-init-vgabios Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/vga.c
Index: ioemu/hw/vga.c
===================================================================
---- ioemu.orig/hw/vga.c 2006-07-26 15:16:41.955609165 +0100
-+++ ioemu/hw/vga.c 2006-07-26 15:17:16.910802283 +0100
+--- ioemu.orig/hw/vga.c 2006-07-27 11:10:44.847738090 +0100
++++ ioemu/hw/vga.c 2006-07-27 11:11:02.008839258 +0100
@@ -1669,6 +1669,136 @@
}
}
@@ -139,3 +139,12 @@ Index: ioemu/hw/vga.c
void vga_common_init(VGAState *s, DisplayState *ds, uint8_t *vga_ram_base,
unsigned long vga_ram_offset, int vga_ram_size)
{
+@@ -1710,6 +1840,8 @@
+ vga_screen_dump, s);
+ /* XXX: currently needed for display */
+ vga_state = s;
++
++ vga_bios_init(s);
+ }
+
+
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/qemu-logging
--- a/tools/ioemu/patches/qemu-logging Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/qemu-logging Thu Jul 27 10:43:34 2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-14 15:55:59.491503372 +0100
-+++ ioemu/vl.c 2006-07-14 15:55:59.693480386 +0100
-@@ -4697,7 +4697,7 @@
+--- ioemu.orig/vl.c 2006-07-27 11:16:57.756466882 +0100
++++ ioemu/vl.c 2006-07-27 11:16:57.828458912 +0100
+@@ -4698,7 +4698,7 @@
"-S freeze CPU at startup (use 'c' to start
execution)\n"
"-s wait gdb connection to port %d\n"
"-p port change gdb connection port\n"
@@ -11,7 +11,7 @@ Index: ioemu/vl.c
"-hdachs c,h,s[,t] force hard disk 0 physical geometry and the
optional BIOS\n"
" translation (t=none or lba) (usually qemu can
guess them)\n"
"-L path set the directory for the BIOS and VGA BIOS\n"
-@@ -4775,7 +4775,7 @@
+@@ -4776,7 +4776,7 @@
QEMU_OPTION_S,
QEMU_OPTION_s,
QEMU_OPTION_p,
@@ -20,7 +20,7 @@ Index: ioemu/vl.c
QEMU_OPTION_hdachs,
QEMU_OPTION_L,
#ifdef USE_CODE_COPY
-@@ -4844,7 +4844,7 @@
+@@ -4845,7 +4845,7 @@
{ "S", 0, QEMU_OPTION_S },
{ "s", 0, QEMU_OPTION_s },
{ "p", HAS_ARG, QEMU_OPTION_p },
@@ -29,7 +29,7 @@ Index: ioemu/vl.c
{ "hdachs", HAS_ARG, QEMU_OPTION_hdachs },
{ "L", HAS_ARG, QEMU_OPTION_L },
#ifdef USE_CODE_COPY
-@@ -5095,6 +5095,8 @@
+@@ -5096,6 +5096,8 @@
char usb_devices[MAX_VM_USB_PORTS][128];
int usb_devices_index;
@@ -38,7 +38,7 @@ Index: ioemu/vl.c
LIST_INIT (&vm_change_state_head);
#if !defined(CONFIG_SOFTMMU)
/* we never want that malloc() uses mmap() */
-@@ -5144,6 +5146,11 @@
+@@ -5145,6 +5147,11 @@
nb_nics = 0;
/* default mac address of the first network interface */
@@ -50,7 +50,7 @@ Index: ioemu/vl.c
optind = 1;
for(;;) {
if (optind >= argc)
-@@ -5329,7 +5336,7 @@
+@@ -5330,7 +5337,7 @@
exit(1);
}
break;
@@ -59,7 +59,7 @@ Index: ioemu/vl.c
{
int mask;
CPULogItem *item;
-@@ -5700,7 +5707,7 @@
+@@ -5701,7 +5708,7 @@
stk.ss_flags = 0;
if (sigaltstack(&stk, NULL) < 0) {
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/qemu-smp
--- a/tools/ioemu/patches/qemu-smp Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/qemu-smp Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-12 11:35:01.687705323 +0100
-+++ ioemu/vl.c 2006-07-12 11:35:01.753697055 +0100
+--- ioemu.orig/vl.c 2006-07-27 11:16:58.619371357 +0100
++++ ioemu/vl.c 2006-07-27 11:16:58.823348777 +0100
@@ -159,6 +159,8 @@
#define MAX_CPUS 1
#endif
@@ -11,7 +11,7 @@ Index: ioemu/vl.c
int xc_handle;
char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
-@@ -4635,6 +4637,7 @@
+@@ -4636,6 +4638,7 @@
"-m megs set virtual RAM size to megs MB [default=%d]\n"
"-smp n set the number of CPUs to 'n' [default=1]\n"
"-nographic disable graphical output and redirect serial I/Os
to console\n"
@@ -19,7 +19,7 @@ Index: ioemu/vl.c
#ifndef _WIN32
"-k language use keyboard layout (for example \"fr\" for
French)\n"
#endif
-@@ -4809,6 +4812,7 @@
+@@ -4810,6 +4813,7 @@
QEMU_OPTION_vnc,
QEMU_OPTION_d,
@@ -27,7 +27,7 @@ Index: ioemu/vl.c
};
typedef struct QEMUOption {
-@@ -4886,6 +4890,7 @@
+@@ -4887,6 +4891,7 @@
{ "cirrusvga", 0, QEMU_OPTION_cirrusvga },
{ "d", HAS_ARG, QEMU_OPTION_d },
@@ -35,7 +35,7 @@ Index: ioemu/vl.c
{ NULL },
};
-@@ -5508,6 +5513,10 @@
+@@ -5509,6 +5514,10 @@
domid = atoi(optarg);
fprintf(logfile, "domid: %d\n", domid);
break;
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/shared-vram
--- a/tools/ioemu/patches/shared-vram Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/shared-vram Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/cirrus_vga.c
Index: ioemu/hw/cirrus_vga.c
===================================================================
---- ioemu.orig/hw/cirrus_vga.c 2006-07-26 15:17:35.230806831 +0100
-+++ ioemu/hw/cirrus_vga.c 2006-07-26 15:17:39.819307015 +0100
+--- ioemu.orig/hw/cirrus_vga.c 2006-07-27 11:16:53.059986783 +0100
++++ ioemu/hw/cirrus_vga.c 2006-07-27 11:16:59.923227020 +0100
@@ -28,6 +28,9 @@
*/
#include "vl.h"
@@ -176,8 +176,8 @@ Index: ioemu/hw/cirrus_vga.c
}
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-07-26 15:17:39.752314312 +0100
-+++ ioemu/hw/pc.c 2006-07-26 15:17:39.820306906 +0100
+--- ioemu.orig/hw/pc.c 2006-07-27 11:16:59.759245173 +0100
++++ ioemu/hw/pc.c 2006-07-27 11:16:59.924226909 +0100
@@ -783,14 +783,14 @@
if (cirrus_vga_enabled) {
if (pci_enabled) {
@@ -198,8 +198,8 @@ Index: ioemu/hw/pc.c
Index: ioemu/hw/vga.c
===================================================================
---- ioemu.orig/hw/vga.c 2006-07-26 15:17:39.352357879 +0100
-+++ ioemu/hw/vga.c 2006-07-26 15:17:39.821306797 +0100
+--- ioemu.orig/hw/vga.c 2006-07-27 11:16:59.103317784 +0100
++++ ioemu/hw/vga.c 2006-07-27 11:16:59.925226798 +0100
@@ -1799,6 +1799,7 @@
/* TODO: add vbe support if enabled */
}
@@ -217,7 +217,7 @@ Index: ioemu/hw/vga.c
s->vram_offset = vga_ram_offset;
s->vram_size = vga_ram_size;
s->ds = ds;
-@@ -1941,6 +1942,31 @@
+@@ -1943,6 +1944,31 @@
return 0;
}
@@ -251,8 +251,8 @@ Index: ioemu/hw/vga.c
Index: ioemu/hw/vga_int.h
===================================================================
---- ioemu.orig/hw/vga_int.h 2006-07-26 15:17:38.201483242 +0100
-+++ ioemu/hw/vga_int.h 2006-07-26 15:17:39.822306688 +0100
+--- ioemu.orig/hw/vga_int.h 2006-07-27 11:16:57.447501084 +0100
++++ ioemu/hw/vga_int.h 2006-07-27 11:16:59.925226798 +0100
@@ -166,5 +166,6 @@
unsigned int color0, unsigned int color1,
unsigned int color_xor);
@@ -262,9 +262,9 @@ Index: ioemu/hw/vga_int.h
extern const uint8_t gr_mask[16];
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-26 15:17:39.755313985 +0100
-+++ ioemu/vl.c 2006-07-26 15:17:39.824306470 +0100
-@@ -5148,6 +5148,78 @@
+--- ioemu.orig/vl.c 2006-07-27 11:16:59.762244841 +0100
++++ ioemu/vl.c 2006-07-27 11:16:59.928226466 +0100
+@@ -5149,6 +5149,78 @@
#define MAX_NET_CLIENTS 32
@@ -345,8 +345,8 @@ Index: ioemu/vl.c
#ifdef CONFIG_GDBSTUB
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-07-26 15:17:39.621328580 +0100
-+++ ioemu/vl.h 2006-07-26 15:17:39.825306361 +0100
+--- ioemu.orig/vl.h 2006-07-27 11:16:59.549268417 +0100
++++ ioemu/vl.h 2006-07-27 11:16:59.929226356 +0100
@@ -136,6 +136,13 @@
void main_loop_wait(int timeout);
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/support-xm-console
--- a/tools/ioemu/patches/support-xm-console Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/support-xm-console Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,8 @@ diff -r d08c08f8fbf3 vl.c
-diff -r d08c08f8fbf3 vl.c
---- a/vl.c Mon Jun 26 15:18:25 2006 +0100
-+++ b/vl.c Mon Jun 26 15:18:37 2006 +0100
-@@ -1535,26 +1535,65 @@ CharDriverState *qemu_chr_open_stdio(voi
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-07-27 11:16:59.384286681 +0100
++++ ioemu/vl.c 2006-07-27 11:16:59.614261222 +0100
+@@ -1535,26 +1535,65 @@
return chr;
}
@@ -65,19 +66,18 @@ diff -r d08c08f8fbf3 vl.c
- tty.c_cc[VMIN] = 1;
- tty.c_cc[VTIME] = 0;
- tcsetattr (master_fd, TCSAFLUSH, &tty);
--
-- fprintf(stderr, "char device redirected to %s\n", slave_name);
+ /* Set raw attributes on the pty. */
+ cfmakeraw(&tty);
+ tcsetattr(slave_fd, TCSAFLUSH, &tty);
+
+ fprintf(stderr, "char device redirected to %s\n", ptsname(master_fd));
+ store_console_dev(domid, ptsname(master_fd));
-+
+
+- fprintf(stderr, "char device redirected to %s\n", slave_name);
return qemu_chr_open_fd(master_fd, master_fd);
}
-@@ -5297,7 +5336,9 @@ int main(int argc, char **argv)
+@@ -5298,7 +5337,9 @@
break;
case QEMU_OPTION_nographic:
pstrcpy(monitor_device, sizeof(monitor_device), "stdio");
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/vnc-cleanup
--- a/tools/ioemu/patches/vnc-cleanup Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/vnc-cleanup Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,8 @@ diff -r c84300f3abc2 vnc.c
-diff -r c84300f3abc2 vnc.c
---- a/vnc.c Wed Jul 05 18:11:23 2006 +0100
-+++ b/vnc.c Thu Jul 06 14:27:28 2006 +0100
-@@ -83,13 +83,16 @@ static void vnc_dpy_update(DisplayState
+Index: ioemu/vnc.c
+===================================================================
+--- ioemu.orig/vnc.c 2006-07-27 11:16:52.783017443 +0100
++++ ioemu/vnc.c 2006-07-27 11:17:00.722138579 +0100
+@@ -83,13 +83,16 @@
static void vnc_dpy_update(DisplayState *ds, int x, int y, int w, int h)
{
VncState *vs = ds->opaque;
@@ -21,7 +22,7 @@ diff -r c84300f3abc2 vnc.c
}
static void vnc_framebuffer_update(VncState *vs, int x, int y, int w, int h,
-@@ -262,6 +265,7 @@ static void vnc_update_client(void *opaq
+@@ -262,6 +265,7 @@
static void vnc_update_client(void *opaque)
{
VncState *vs = opaque;
@@ -29,7 +30,7 @@ diff -r c84300f3abc2 vnc.c
if (vs->need_update && vs->csock != -1) {
int y;
-@@ -282,7 +286,7 @@ static void vnc_update_client(void *opaq
+@@ -282,7 +286,7 @@
row = vs->ds->data;
old_row = vs->old_data;
@@ -38,7 +39,7 @@ diff -r c84300f3abc2 vnc.c
if (vs->dirty_row[y] & width_mask) {
int x;
char *ptr, *old_ptr;
-@@ -307,10 +311,8 @@ static void vnc_update_client(void *opaq
+@@ -307,10 +311,8 @@
old_row += vs->ds->linesize;
}
@@ -51,7 +52,7 @@ diff -r c84300f3abc2 vnc.c
/* Count rectangles */
n_rectangles = 0;
-@@ -348,7 +350,9 @@ static void vnc_update_client(void *opaq
+@@ -348,7 +350,9 @@
vnc_flush(vs);
}
@@ -62,10 +63,11 @@ diff -r c84300f3abc2 vnc.c
}
static void vnc_timer_init(VncState *vs)
-diff -r c84300f3abc2 vl.c
---- a/vl.c Wed Jul 05 18:11:23 2006 +0100
-+++ b/vl.c Thu Jul 06 14:27:28 2006 +0100
-@@ -4586,10 +4586,10 @@ void main_loop_wait(int timeout)
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-07-27 11:17:00.311184072 +0100
++++ ioemu/vl.c 2006-07-27 11:17:00.724138358 +0100
+@@ -4587,10 +4587,10 @@
/* XXX: better handling of removal */
for(ioh = first_io_handler; ioh != NULL; ioh = ioh_next) {
ioh_next = ioh->next;
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/vnc-fixes
--- a/tools/ioemu/patches/vnc-fixes Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/vnc-fixes Thu Jul 27 10:43:34 2006 -0600
@@ -1,8 +1,8 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-26 14:29:04.481598583 +0100
-+++ ioemu/vl.c 2006-07-26 14:31:22.668325993 +0100
-@@ -6003,8 +6003,10 @@
+--- ioemu.orig/vl.c 2006-07-27 11:17:00.724138358 +0100
++++ ioemu/vl.c 2006-07-27 11:17:00.874121755 +0100
+@@ -6004,8 +6004,10 @@
kernel_filename, kernel_cmdline, initrd_filename,
timeoffset);
@@ -17,8 +17,8 @@ Index: ioemu/vl.c
if (use_gdbstub) {
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-07-26 14:29:04.479598804 +0100
-+++ ioemu/vnc.c 2006-07-26 14:31:22.669325883 +0100
+--- ioemu.orig/vnc.c 2006-07-27 11:17:00.722138579 +0100
++++ ioemu/vnc.c 2006-07-27 11:17:00.875121644 +0100
@@ -3,6 +3,7 @@
*
* Copyright (C) 2006 Anthony Liguori <anthony@xxxxxxxxxxxxx>
@@ -493,8 +493,8 @@ Index: ioemu/vnc.c
}
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-07-26 14:31:22.669325883 +0100
-+++ ioemu/vl.h 2006-07-26 14:32:44.505279724 +0100
+--- ioemu.orig/vl.h 2006-07-27 11:17:00.311184072 +0100
++++ ioemu/vl.h 2006-07-27 11:17:00.875121644 +0100
@@ -301,6 +301,7 @@
int is_graphic_console(void);
CharDriverState *text_console_init(DisplayState *ds);
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/vnc-start-vncviewer
--- a/tools/ioemu/patches/vnc-start-vncviewer Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/vnc-start-vncviewer Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/vnc.c
Index: ioemu/vnc.c
===================================================================
---- ioemu.orig/vnc.c 2006-07-26 14:33:08.166663983 +0100
-+++ ioemu/vnc.c 2006-07-26 14:33:08.225657462 +0100
+--- ioemu.orig/vnc.c 2006-07-27 11:17:00.875121644 +0100
++++ ioemu/vnc.c 2006-07-27 11:17:01.032104266 +0100
@@ -1002,3 +1002,25 @@
vnc_dpy_resize(vs->ds, 640, 400);
@@ -30,8 +30,8 @@ Index: ioemu/vnc.c
+}
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-26 14:33:08.165664094 +0100
-+++ ioemu/vl.c 2006-07-26 14:33:08.227657240 +0100
+--- ioemu.orig/vl.c 2006-07-27 11:17:00.874121755 +0100
++++ ioemu/vl.c 2006-07-27 11:17:01.035103934 +0100
@@ -121,6 +121,7 @@
int bios_size;
static DisplayState display_state;
@@ -40,7 +40,7 @@ Index: ioemu/vl.c
const char* keyboard_layout = NULL;
int64_t ticks_per_sec;
int boot_device = 'c';
-@@ -4801,6 +4802,7 @@
+@@ -4802,6 +4803,7 @@
#endif
"-loadvm file start right away with a saved state (loadvm in
monitor)\n"
"-vnc display start a VNC server on display\n"
@@ -48,7 +48,7 @@ Index: ioemu/vl.c
"-timeoffset time offset (in seconds) from local time\n"
"\n"
"During emulation, the following keys are useful:\n"
-@@ -4889,6 +4891,7 @@
+@@ -4890,6 +4892,7 @@
QEMU_OPTION_usbdevice,
QEMU_OPTION_smp,
QEMU_OPTION_vnc,
@@ -56,7 +56,7 @@ Index: ioemu/vl.c
QEMU_OPTION_d,
QEMU_OPTION_vcpus,
-@@ -4964,6 +4967,7 @@
+@@ -4965,6 +4968,7 @@
{ "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice },
{ "smp", HAS_ARG, QEMU_OPTION_smp },
{ "vnc", HAS_ARG, QEMU_OPTION_vnc },
@@ -64,7 +64,7 @@ Index: ioemu/vl.c
/* temporary options */
{ "usb", 0, QEMU_OPTION_usb },
-@@ -5294,6 +5298,7 @@
+@@ -5295,6 +5299,7 @@
#endif
snapshot = 0;
nographic = 0;
@@ -72,7 +72,7 @@ Index: ioemu/vl.c
kernel_filename = NULL;
kernel_cmdline = "";
#ifdef TARGET_PPC
-@@ -5663,6 +5668,9 @@
+@@ -5664,6 +5669,9 @@
exit(1);
}
break;
@@ -82,7 +82,7 @@ Index: ioemu/vl.c
case QEMU_OPTION_domainname:
strncat(domain_name, optarg, sizeof(domain_name) - 20);
break;
-@@ -5910,6 +5918,8 @@
+@@ -5911,6 +5919,8 @@
dumb_display_init(ds);
} else if (vnc_display != -1) {
vnc_display_init(ds, vnc_display);
@@ -93,8 +93,8 @@ Index: ioemu/vl.c
sdl_display_init(ds, full_screen);
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-07-26 14:33:08.167663873 +0100
-+++ ioemu/vl.h 2006-07-26 14:33:08.228657130 +0100
+--- ioemu.orig/vl.h 2006-07-27 11:17:00.875121644 +0100
++++ ioemu/vl.h 2006-07-27 11:17:01.036103823 +0100
@@ -733,6 +733,7 @@
/* vnc.c */
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/xen-domain-name
--- a/tools/ioemu/patches/xen-domain-name Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/xen-domain-name Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/sdl.c
Index: ioemu/sdl.c
===================================================================
---- ioemu.orig/sdl.c 2006-07-12 11:33:54.665109493 +0100
-+++ ioemu/sdl.c 2006-07-12 11:35:01.450735012 +0100
+--- ioemu.orig/sdl.c 2006-07-27 11:16:53.590928008 +0100
++++ ioemu/sdl.c 2006-07-27 11:16:58.124426148 +0100
@@ -268,14 +268,14 @@
static void sdl_update_caption(void)
{
@@ -21,8 +21,8 @@ Index: ioemu/sdl.c
static void sdl_hide_cursor(void)
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-12 11:35:01.094779608 +0100
-+++ ioemu/vl.c 2006-07-12 11:35:01.453734636 +0100
+--- ioemu.orig/vl.c 2006-07-27 11:16:57.828458912 +0100
++++ ioemu/vl.c 2006-07-27 11:16:58.126425927 +0100
@@ -159,6 +159,8 @@
#define MAX_CPUS 1
#endif
@@ -32,7 +32,7 @@ Index: ioemu/vl.c
/***********************************************************/
/* x86 ISA bus support */
-@@ -4698,6 +4700,7 @@
+@@ -4699,6 +4701,7 @@
"-s wait gdb connection to port %d\n"
"-p port change gdb connection port\n"
"-l item1,... output log to %s (use -d ? for a list of log
items)\n"
@@ -40,7 +40,7 @@ Index: ioemu/vl.c
"-hdachs c,h,s[,t] force hard disk 0 physical geometry and the
optional BIOS\n"
" translation (t=none or lba) (usually qemu can
guess them)\n"
"-L path set the directory for the BIOS and VGA BIOS\n"
-@@ -4787,6 +4790,7 @@
+@@ -4788,6 +4791,7 @@
QEMU_OPTION_g,
QEMU_OPTION_std_vga,
QEMU_OPTION_monitor,
@@ -48,7 +48,7 @@ Index: ioemu/vl.c
QEMU_OPTION_serial,
QEMU_OPTION_parallel,
QEMU_OPTION_loadvm,
-@@ -4860,6 +4864,7 @@
+@@ -4861,6 +4865,7 @@
{ "localtime", 0, QEMU_OPTION_localtime },
{ "std-vga", 0, QEMU_OPTION_std_vga },
{ "monitor", 1, QEMU_OPTION_monitor },
@@ -56,7 +56,7 @@ Index: ioemu/vl.c
{ "serial", 1, QEMU_OPTION_serial },
{ "parallel", 1, QEMU_OPTION_parallel },
{ "loadvm", HAS_ARG, QEMU_OPTION_loadvm },
-@@ -5483,6 +5488,9 @@
+@@ -5484,6 +5489,9 @@
exit(1);
}
break;
@@ -68,8 +68,8 @@ Index: ioemu/vl.c
}
Index: ioemu/vl.h
===================================================================
---- ioemu.orig/vl.h 2006-07-12 11:35:00.955797021 +0100
-+++ ioemu/vl.h 2006-07-12 11:35:01.454734511 +0100
+--- ioemu.orig/vl.h 2006-07-27 11:16:57.682475072 +0100
++++ ioemu/vl.h 2006-07-27 11:16:58.127425816 +0100
@@ -1094,4 +1094,5 @@
void kqemu_record_dump(void);
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/xen-domid
--- a/tools/ioemu/patches/xen-domid Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/xen-domid Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,8 @@ diff -r 03705e837ce8 vl.c
-diff -r 03705e837ce8 vl.c
---- a/vl.c Tue May 30 14:10:44 2006 +0100
-+++ b/vl.c Tue May 30 14:11:16 2006 +0100
-@@ -160,6 +160,7 @@ int vnc_display = -1;
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-07-27 11:16:58.126425927 +0100
++++ ioemu/vl.c 2006-07-27 11:16:58.296407110 +0100
+@@ -160,6 +160,7 @@
#endif
char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
@@ -9,7 +10,7 @@ diff -r 03705e837ce8 vl.c
/***********************************************************/
/* x86 ISA bus support */
-@@ -4700,6 +4701,7 @@ void help(void)
+@@ -4701,6 +4702,7 @@
"-s wait gdb connection to port %d\n"
"-p port change gdb connection port\n"
"-l item1,... output log to %s (use -d ? for a list of log
items)\n"
@@ -17,7 +18,7 @@ diff -r 03705e837ce8 vl.c
"-domain-name domain name that we're serving\n"
"-hdachs c,h,s[,t] force hard disk 0 physical geometry and the
optional BIOS\n"
" translation (t=none or lba) (usually qemu can
guess them)\n"
-@@ -4803,6 +4805,8 @@ enum {
+@@ -4804,6 +4806,8 @@
QEMU_OPTION_usbdevice,
QEMU_OPTION_smp,
QEMU_OPTION_vnc,
@@ -26,7 +27,7 @@ diff -r 03705e837ce8 vl.c
};
typedef struct QEMUOption {
-@@ -4878,6 +4882,8 @@ const QEMUOption qemu_options[] = {
+@@ -4879,6 +4883,8 @@
/* temporary options */
{ "usb", 0, QEMU_OPTION_usb },
{ "cirrusvga", 0, QEMU_OPTION_cirrusvga },
@@ -35,7 +36,7 @@ diff -r 03705e837ce8 vl.c
{ NULL },
};
-@@ -5491,6 +5497,10 @@ int main(int argc, char **argv)
+@@ -5492,6 +5498,10 @@
case QEMU_OPTION_domainname:
strncat(domain_name, optarg, sizeof(domain_name) - 20);
break;
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/xen-mm
--- a/tools/ioemu/patches/xen-mm Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/xen-mm Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/hw/pc.c
Index: ioemu/hw/pc.c
===================================================================
---- ioemu.orig/hw/pc.c 2006-07-14 15:55:59.489503600 +0100
-+++ ioemu/hw/pc.c 2006-07-14 15:56:00.354405169 +0100
+--- ioemu.orig/hw/pc.c 2006-07-27 11:16:57.678475515 +0100
++++ ioemu/hw/pc.c 2006-07-27 11:16:58.447390396 +0100
@@ -639,7 +639,9 @@
}
@@ -25,8 +25,8 @@ Index: ioemu/hw/pc.c
isa_bios_size = bios_size;
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-14 15:56:00.271414614 +0100
-+++ ioemu/vl.c 2006-07-14 15:56:00.358404714 +0100
+--- ioemu.orig/vl.c 2006-07-27 11:16:58.296407110 +0100
++++ ioemu/vl.c 2006-07-27 11:16:58.450390064 +0100
@@ -159,6 +159,8 @@
#define MAX_CPUS 1
#endif
@@ -36,7 +36,7 @@ Index: ioemu/vl.c
char domain_name[1024] = { 'H','V', 'M', 'X', 'E', 'N', '-'};
extern int domid;
-@@ -5105,6 +5107,9 @@
+@@ -5106,6 +5108,9 @@
QEMUMachine *machine;
char usb_devices[MAX_VM_USB_PORTS][128];
int usb_devices_index;
@@ -46,7 +46,7 @@ Index: ioemu/vl.c
char qemu_dm_logfilename[64];
-@@ -5341,11 +5346,13 @@
+@@ -5342,11 +5347,13 @@
ram_size = atol(optarg) * 1024 * 1024;
if (ram_size <= 0)
help();
@@ -60,7 +60,7 @@ Index: ioemu/vl.c
break;
case QEMU_OPTION_l:
{
-@@ -5559,6 +5566,39 @@
+@@ -5560,6 +5567,39 @@
/* init the memory */
phys_ram_size = ram_size + vga_ram_size + bios_size;
@@ -100,7 +100,7 @@ Index: ioemu/vl.c
#ifdef CONFIG_SOFTMMU
phys_ram_base = qemu_vmalloc(phys_ram_size);
if (!phys_ram_base) {
-@@ -5599,6 +5639,8 @@
+@@ -5600,6 +5640,8 @@
}
#endif
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/patches/xen-network
--- a/tools/ioemu/patches/xen-network Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/patches/xen-network Thu Jul 27 10:43:34 2006 -0600
@@ -1,7 +1,7 @@ Index: ioemu/vl.c
Index: ioemu/vl.c
===================================================================
---- ioemu.orig/vl.c 2006-07-12 11:35:01.753697055 +0100
-+++ ioemu/vl.c 2006-07-12 11:35:02.126650330 +0100
+--- ioemu.orig/vl.c 2006-07-27 11:16:58.823348777 +0100
++++ ioemu/vl.c 2006-07-27 11:16:59.169310479 +0100
@@ -89,6 +89,7 @@
#include "exec-all.h"
@@ -40,7 +40,7 @@ Index: ioemu/vl.c
int fd;
if (get_param_value(buf, sizeof(buf), "fd", p) > 0) {
fd = strtol(buf, NULL, 0);
-@@ -3212,7 +3215,10 @@
+@@ -3213,7 +3216,10 @@
if (get_param_value(setup_script, sizeof(setup_script), "script",
p) == 0) {
pstrcpy(setup_script, sizeof(setup_script),
DEFAULT_NETWORK_SCRIPT);
}
@@ -52,7 +52,7 @@ Index: ioemu/vl.c
}
} else
#endif
-@@ -4671,7 +4677,7 @@
+@@ -4672,7 +4678,7 @@
"-net tap[,vlan=n],ifname=name\n"
" connect the host TAP network interface to VLAN
'n'\n"
#else
diff -r 199d53efd029 -r 2d73714911c2 tools/ioemu/vl.c
--- a/tools/ioemu/vl.c Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/ioemu/vl.c Thu Jul 27 10:43:34 2006 -0600
@@ -3284,6 +3284,7 @@ int net_client_init(const char *str)
if (net_tap_fd_init(vlan, fd))
ret = 0;
} else {
+ ifname[0] = '\0';
get_param_value(ifname, sizeof(ifname), "ifname", p);
if (get_param_value(setup_script, sizeof(setup_script), "script",
p) == 0) {
pstrcpy(setup_script, sizeof(setup_script),
DEFAULT_NETWORK_SCRIPT);
diff -r 199d53efd029 -r 2d73714911c2 tools/libxc/xc_hvm_build.c
--- a/tools/libxc/xc_hvm_build.c Thu Jul 27 10:00:00 2006 -0600
+++ b/tools/libxc/xc_hvm_build.c Thu Jul 27 10:43:34 2006 -0600
@@ -15,12 +15,6 @@
#define HVM_LOADER_ENTR_ADDR 0x00100000
-#define L1_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_USER)
-#define L2_PROT (_PAGE_PRESENT|_PAGE_RW|_PAGE_ACCESSED|_PAGE_DIRTY|_PAGE_USER)
-#ifdef __x86_64__
-#define L3_PROT (_PAGE_PRESENT)
-#endif
-
#define E820MAX 128
#define E820_RAM 1
@@ -41,9 +35,6 @@ struct e820entry {
uint32_t type;
} __attribute__((packed));
-#define round_pgup(_p) (((_p)+(PAGE_SIZE-1))&PAGE_MASK)
-#define round_pgdown(_p) ((_p)&PAGE_MASK)
-
static int
parseelfimage(
char *elfbase, unsigned long elfsize, struct domain_setup_info *dsi);
@@ -52,7 +43,7 @@ loadelfimage(
char *elfbase, int xch, uint32_t dom, unsigned long *parray,
struct domain_setup_info *dsi);
-static unsigned char build_e820map(void *e820_page, unsigned long long
mem_size)
+static void build_e820map(void *e820_page, unsigned long long mem_size)
{
struct e820entry *e820entry =
(struct e820entry *)(((unsigned char *)e820_page) + E820_MAP_OFFSET);
@@ -115,7 +106,7 @@ static unsigned char build_e820map(void
e820entry[nr_map].type = E820_IO;
nr_map++;
- return (*(((unsigned char *)e820_page) + E820_MAP_NR_OFFSET) = nr_map);
+ *(((unsigned char *)e820_page) + E820_MAP_NR_OFFSET) = nr_map;
}
static void set_hvm_info_checksum(struct hvm_info_table *t)
@@ -186,7 +177,6 @@ static int setup_guest(int xc_handle,
shared_info_t *shared_info;
void *e820_page;
- unsigned char e820_map_nr;
struct domain_setup_info dsi;
uint64_t v_end;
@@ -261,7 +251,7 @@ static int setup_guest(int xc_handle,
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);
+ build_e820map(e820_page, v_end);
munmap(e820_page, PAGE_SIZE);
/* shared_info page starts its life empty. */
@@ -311,23 +301,7 @@ static int setup_guest(int xc_handle,
/*
* Initial register values:
*/
- ctxt->user_regs.ds = 0;
- ctxt->user_regs.es = 0;
- ctxt->user_regs.fs = 0;
- ctxt->user_regs.gs = 0;
- ctxt->user_regs.ss = 0;
- ctxt->user_regs.cs = 0;
ctxt->user_regs.eip = dsi.v_kernentry;
- ctxt->user_regs.edx = 0;
- 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 = 0;
- ctxt->user_regs.esi = 0;
- ctxt->user_regs.edi = 0;
- ctxt->user_regs.ebp = 0;
-
- ctxt->user_regs.eflags = 0;
return 0;
diff -r 199d53efd029 -r 2d73714911c2 xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/arch/x86/hvm/vmx/vmx.c Thu Jul 27 10:43:34 2006 -0600
@@ -286,7 +286,7 @@ static inline int long_mode_do_msr_write
if ( msr_content & ~(EFER_LME | EFER_LMA | EFER_NX | EFER_SCE) )
{
printk("trying to set reserved bit in EFER\n");
- vmx_inject_exception(v, TRAP_gp_fault, 0);
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
return 0;
}
@@ -300,7 +300,7 @@ static inline int long_mode_do_msr_write
{
printk("trying to set LME bit when "
"in paging mode or PAE bit is not set\n");
- vmx_inject_exception(v, TRAP_gp_fault, 0);
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
return 0;
}
@@ -318,7 +318,7 @@ static inline int long_mode_do_msr_write
if ( !IS_CANO_ADDRESS(msr_content) )
{
HVM_DBG_LOG(DBG_LEVEL_1, "Not cano address of msr write\n");
- vmx_inject_exception(v, TRAP_gp_fault, 0);
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
return 0;
}
@@ -1438,7 +1438,7 @@ static int vmx_set_cr0(unsigned long val
&v->arch.hvm_vmx.cpu_state) )
{
HVM_DBG_LOG(DBG_LEVEL_1, "Enable paging before PAE enabled\n");
- vmx_inject_exception(v, TRAP_gp_fault, 0);
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
}
if ( test_bit(VMX_CPU_STATE_LME_ENABLED,
@@ -1520,7 +1520,7 @@ static int vmx_set_cr0(unsigned long val
{
if ( value & X86_CR0_PG ) {
/* inject GP here */
- vmx_inject_exception(v, TRAP_gp_fault, 0);
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
return 0;
} else {
/*
@@ -1764,7 +1764,7 @@ static int mov_to_cr(int gp, int cr, str
else
{
if ( test_bit(VMX_CPU_STATE_LMA_ENABLED,
&v->arch.hvm_vmx.cpu_state) )
- vmx_inject_exception(v, TRAP_gp_fault, 0);
+ vmx_inject_hw_exception(v, TRAP_gp_fault, 0);
clear_bit(VMX_CPU_STATE_PAE_ENABLED, &v->arch.hvm_vmx.cpu_state);
}
@@ -2192,7 +2192,7 @@ asmlinkage void vmx_vmexit_handler(struc
if ( test_bit(_DOMF_debugging, &v->domain->domain_flags) )
domain_pause_for_debugger();
else
- vmx_inject_exception(v, TRAP_int3, VMX_DELIVER_NO_ERROR_CODE);
+ vmx_reflect_exception(v);
break;
}
#endif
@@ -2219,7 +2219,7 @@ asmlinkage void vmx_vmexit_handler(struc
/*
* Inject #PG using Interruption-Information Fields
*/
- vmx_inject_exception(v, TRAP_page_fault, regs.error_code);
+ vmx_inject_hw_exception(v, TRAP_page_fault, regs.error_code);
v->arch.hvm_vmx.cpu_cr2 = va;
TRACE_3D(TRC_VMX_INT, v->domain->domain_id, TRAP_page_fault,
va);
}
@@ -2335,7 +2335,7 @@ asmlinkage void vmx_vmexit_handler(struc
case EXIT_REASON_VMON:
/* Report invalid opcode exception when a VMX guest tries to execute
any of the VMX instructions */
- vmx_inject_exception(v, TRAP_invalid_op, VMX_DELIVER_NO_ERROR_CODE);
+ vmx_inject_hw_exception(v, TRAP_invalid_op, VMX_DELIVER_NO_ERROR_CODE);
break;
default:
diff -r 199d53efd029 -r 2d73714911c2 xen/arch/x86/shadow32.c
--- a/xen/arch/x86/shadow32.c Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/arch/x86/shadow32.c Thu Jul 27 10:43:34 2006 -0600
@@ -835,12 +835,12 @@ void free_monitor_pagetable(struct vcpu
}
static int
-map_p2m_entry(l1_pgentry_t *l1tab, unsigned long va,
- unsigned long gpa, unsigned long mfn)
+map_p2m_entry(l1_pgentry_t *l1tab, unsigned long gpfn, unsigned long mfn)
{
unsigned long *l0tab = NULL;
l1_pgentry_t l1e = { 0 };
struct page_info *page;
+ unsigned long va = RO_MPT_VIRT_START + (gpfn * sizeof(mfn));
l1e = l1tab[l1_table_offset(va)];
if ( !(l1e_get_flags(l1e) & _PAGE_PRESENT) )
@@ -858,7 +858,7 @@ map_p2m_entry(l1_pgentry_t *l1tab, unsig
else
l0tab = map_domain_page(l1e_get_pfn(l1e));
- l0tab[gpa & ((PAGE_SIZE / sizeof(mfn)) - 1)] = mfn;
+ l0tab[gpfn & ((PAGE_SIZE / sizeof(mfn)) - 1)] = mfn;
unmap_domain_page(l0tab);
@@ -877,15 +877,9 @@ set_p2m_entry(struct domain *d, unsigned
unsigned long va = pfn << PAGE_SHIFT;
if ( shadow_mode_external(d) )
- {
tabpfn = pagetable_get_pfn(d->vcpu[0]->arch.monitor_table);
- va = RO_MPT_VIRT_START + (pfn * sizeof (unsigned long));
- }
else
- {
tabpfn = pagetable_get_pfn(d->arch.phys_table);
- va = pfn << PAGE_SHIFT;
- }
ASSERT(tabpfn != 0);
ASSERT(shadow_lock_is_acquired(d));
@@ -902,12 +896,12 @@ set_p2m_entry(struct domain *d, unsigned
l1_pgentry_t *l1tab = NULL;
l2_pgentry_t l2e;
- l2e = l2[l2_table_offset(va)];
+ l2e = l2[l2_table_offset(RO_MPT_VIRT_START)];
ASSERT( l2e_get_flags(l2e) & _PAGE_PRESENT );
l1tab = map_domain_page(l2e_get_pfn(l2e));
- if ( !(error = map_p2m_entry(l1tab, va, pfn, mfn)) )
+ if ( !(error = map_p2m_entry(l1tab, pfn, mfn)) )
domain_crash(d);
unmap_domain_page(l1tab);
@@ -952,7 +946,6 @@ alloc_p2m_table(struct domain *d)
alloc_p2m_table(struct domain *d)
{
struct list_head *list_ent;
- unsigned long va = RO_MPT_VIRT_START; /* phys_to_machine_mapping */
l2_pgentry_t *l2tab = NULL;
l1_pgentry_t *l1tab = NULL;
@@ -965,14 +958,14 @@ alloc_p2m_table(struct domain *d)
{
l2tab = map_domain_page(
pagetable_get_pfn(d->vcpu[0]->arch.monitor_table));
- l2e = l2tab[l2_table_offset(va)];
+ l2e = l2tab[l2_table_offset(RO_MPT_VIRT_START)];
if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) )
{
page = alloc_domheap_page(NULL);
l1tab = map_domain_page(page_to_mfn(page));
memset(l1tab, 0, PAGE_SIZE);
- l2e = l2tab[l2_table_offset(va)] =
+ l2e = l2tab[l2_table_offset(RO_MPT_VIRT_START)] =
l2e_from_page(page, __PAGE_HYPERVISOR);
}
else
@@ -1002,14 +995,13 @@ alloc_p2m_table(struct domain *d)
page = list_entry(list_ent, struct page_info, list);
mfn = page_to_mfn(page);
- if ( !(error = map_p2m_entry(l1tab, va, gpfn, mfn)) )
+ if ( !(error = map_p2m_entry(l1tab, gpfn, mfn)) )
{
domain_crash(d);
break;
}
list_ent = frame_table[mfn].list.next;
- va += sizeof(mfn);
}
unmap_domain_page(l1tab);
diff -r 199d53efd029 -r 2d73714911c2 xen/arch/x86/shadow_public.c
--- a/xen/arch/x86/shadow_public.c Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/arch/x86/shadow_public.c Thu Jul 27 10:43:34 2006 -0600
@@ -438,6 +438,8 @@ static void alloc_monitor_pagetable(stru
(l3e_get_flags(mpl3e[i]) & _PAGE_PRESENT) ?
l2e_from_pfn(l3e_get_pfn(mpl3e[i]), __PAGE_HYPERVISOR) :
l2e_empty();
+ for ( i = 0; i < (MACHPHYS_MBYTES >> (L2_PAGETABLE_SHIFT - 20)); i++ )
+ mpl2e[l2_table_offset(RO_MPT_VIRT_START) + i] = l2e_empty();
if ( v->vcpu_id == 0 )
{
@@ -1471,8 +1473,7 @@ int _shadow_mode_refcounts(struct domain
}
static int
-map_p2m_entry(pgentry_64_t *top_tab, unsigned long va,
- unsigned long gpfn, unsigned long mfn)
+map_p2m_entry(pgentry_64_t *top_tab, unsigned long gpfn, unsigned long mfn)
{
#if CONFIG_PAGING_LEVELS >= 4
pgentry_64_t l4e = { 0 };
@@ -1487,6 +1488,7 @@ map_p2m_entry(pgentry_64_t *top_tab, uns
l2_pgentry_t l2e = { 0 };
l1_pgentry_t l1e = { 0 };
struct page_info *page;
+ unsigned long va = RO_MPT_VIRT_START + (gpfn * sizeof(mfn));
#if CONFIG_PAGING_LEVELS >= 4
l4e = top_tab[l4_table_offset(va)];
@@ -1568,7 +1570,7 @@ map_p2m_entry(pgentry_64_t *top_tab, uns
unmap_domain_page(l1tab);
- l0tab[gpfn & ((PAGE_SIZE / sizeof (mfn)) - 1) ] = mfn;
+ l0tab[gpfn & ((PAGE_SIZE / sizeof(mfn)) - 1)] = mfn;
unmap_domain_page(l0tab);
@@ -1584,7 +1586,6 @@ set_p2m_entry(struct domain *d, unsigned
struct domain_mmap_cache *l1cache)
{
unsigned long tabmfn = pagetable_get_pfn(d->vcpu[0]->arch.monitor_table);
- unsigned long va = RO_MPT_VIRT_START + (gpfn * sizeof(unsigned long));
pgentry_64_t *top_tab;
int error;
@@ -1593,7 +1594,7 @@ set_p2m_entry(struct domain *d, unsigned
top_tab = map_domain_page_with_cache(tabmfn, l2cache);
- if ( !(error = map_p2m_entry(top_tab, va, gpfn, mfn)) )
+ if ( !(error = map_p2m_entry(top_tab, gpfn, mfn)) )
domain_crash(d);
unmap_domain_page_with_cache(top_tab, l2cache);
@@ -1605,10 +1606,9 @@ alloc_p2m_table(struct domain *d)
alloc_p2m_table(struct domain *d)
{
struct list_head *list_ent;
- unsigned long va = RO_MPT_VIRT_START; /* phys_to_machine_mapping */
pgentry_64_t *top_tab = NULL;
- unsigned long mfn;
- int gpfn, error = 0;
+ unsigned long gpfn, mfn;
+ int error = 0;
ASSERT( pagetable_get_pfn(d->vcpu[0]->arch.monitor_table) );
@@ -1624,14 +1624,13 @@ alloc_p2m_table(struct domain *d)
page = list_entry(list_ent, struct page_info, list);
mfn = page_to_mfn(page);
- if ( !(error = map_p2m_entry(top_tab, va, gpfn, mfn)) )
+ if ( !(error = map_p2m_entry(top_tab, gpfn, mfn)) )
{
domain_crash(d);
break;
}
list_ent = frame_table[mfn].list.next;
- va += sizeof(mfn);
}
unmap_domain_page(top_tab);
diff -r 199d53efd029 -r 2d73714911c2 xen/common/memory.c
--- a/xen/common/memory.c Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/common/memory.c Thu Jul 27 10:43:34 2006 -0600
@@ -170,7 +170,7 @@ guest_remove_page(
if ( test_and_clear_bit(_PGC_allocated, &page->count_info) )
put_page(page);
- if ( unlikely((page->count_info & PGC_count_mask) != 1) )
+ if ( unlikely(!page_is_removable(page)) )
{
/* We'll make this a guest-visible error in future, so take heed! */
DPRINTK("Dom%d freeing in-use page %lx (pseudophys %lx):"
diff -r 199d53efd029 -r 2d73714911c2 xen/include/asm-ia64/mm.h
--- a/xen/include/asm-ia64/mm.h Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/include/asm-ia64/mm.h Thu Jul 27 10:43:34 2006 -0600
@@ -211,6 +211,11 @@ static inline int get_page_and_type(stru
}
return rc;
+}
+
+static inline int page_is_removable(struct page_info *page)
+{
+ return ((page->count_info & PGC_count_mask) == 2);
}
#define set_machinetophys(_mfn, _pfn) do { } while(0);
diff -r 199d53efd029 -r 2d73714911c2 xen/include/asm-x86/hvm/vmx/vmx.h
--- a/xen/include/asm-x86/hvm/vmx/vmx.h Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/include/asm-x86/hvm/vmx/vmx.h Thu Jul 27 10:43:34 2006 -0600
@@ -143,11 +143,12 @@ extern unsigned int cpu_rev;
*/
#define INTR_INFO_VECTOR_MASK 0xff /* 7:0 */
#define INTR_INFO_INTR_TYPE_MASK 0x700 /* 10:8 */
-#define INTR_INFO_DELIEVER_CODE_MASK 0x800 /* 11 */
+#define INTR_INFO_DELIVER_CODE_MASK 0x800 /* 11 */
#define INTR_INFO_VALID_MASK 0x80000000 /* 31 */
#define INTR_TYPE_EXT_INTR (0 << 8) /* external interrupt */
-#define INTR_TYPE_EXCEPTION (3 << 8) /* processor exception */
+#define INTR_TYPE_HW_EXCEPTION (3 << 8) /* hardware exception */
+#define INTR_TYPE_SW_EXCEPTION (6 << 8) /* software exception */
/*
* Exit Qualifications for MOV for Control Register Access
@@ -421,7 +422,7 @@ static inline int vmx_pgbit_test(struct
}
static inline int __vmx_inject_exception(struct vcpu *v, int trap, int type,
- int error_code)
+ int error_code, int ilen)
{
unsigned long intr_fields;
@@ -429,22 +430,33 @@ static inline int __vmx_inject_exception
intr_fields = (INTR_INFO_VALID_MASK | type | trap);
if (error_code != VMX_DELIVER_NO_ERROR_CODE) {
__vmwrite(VM_ENTRY_EXCEPTION_ERROR_CODE, error_code);
- intr_fields |= INTR_INFO_DELIEVER_CODE_MASK;
+ intr_fields |= INTR_INFO_DELIVER_CODE_MASK;
}
-
+
+ if(ilen)
+ __vmwrite(VM_ENTRY_INSTRUCTION_LEN, ilen);
+
__vmwrite(VM_ENTRY_INTR_INFO_FIELD, intr_fields);
return 0;
}
-static inline int vmx_inject_exception(struct vcpu *v, int trap, int
error_code)
+static inline int vmx_inject_hw_exception(struct vcpu *v, int trap, int
error_code)
{
v->arch.hvm_vmx.vector_injected = 1;
- return __vmx_inject_exception(v, trap, INTR_TYPE_EXCEPTION, error_code);
+ return __vmx_inject_exception(v, trap, INTR_TYPE_HW_EXCEPTION,
+ error_code, 0);
+}
+
+static inline int vmx_inject_sw_exception(struct vcpu *v, int trap, int
instruction_len) {
+ v->arch.hvm_vmx.vector_injected=1;
+ return __vmx_inject_exception(v, trap, INTR_TYPE_SW_EXCEPTION,
+ VMX_DELIVER_NO_ERROR_CODE,
+ instruction_len);
}
static inline int vmx_inject_extint(struct vcpu *v, int trap, int error_code)
{
- __vmx_inject_exception(v, trap, INTR_TYPE_EXT_INTR, error_code);
+ __vmx_inject_exception(v, trap, INTR_TYPE_EXT_INTR, error_code, 0);
__vmwrite(GUEST_INTERRUPTIBILITY_INFO, 0);
return 0;
@@ -452,14 +464,14 @@ static inline int vmx_inject_extint(stru
static inline int vmx_reflect_exception(struct vcpu *v)
{
- int error_code, vector;
-
- __vmread(VM_EXIT_INTR_INFO, &vector);
- if (vector & INTR_INFO_DELIEVER_CODE_MASK)
+ int error_code, intr_info, vector;
+
+ __vmread(VM_EXIT_INTR_INFO, &intr_info);
+ vector = intr_info & 0xff;
+ if (intr_info & INTR_INFO_DELIVER_CODE_MASK)
__vmread(VM_EXIT_INTR_ERROR_CODE, &error_code);
else
error_code = VMX_DELIVER_NO_ERROR_CODE;
- vector &= 0xff;
#ifndef NDEBUG
{
@@ -472,7 +484,19 @@ static inline int vmx_reflect_exception(
}
#endif /* NDEBUG */
- vmx_inject_exception(v, vector, error_code);
+ /* According to Intel Virtualization Technology Specification for
+ the IA-32 Intel Architecture (C97063-002 April 2005), section
+ 2.8.3, SW_EXCEPTION should be used for #BP and #OV, and
+ HW_EXCPEPTION used for everything else. The main difference
+ appears to be that for SW_EXCEPTION, the EIP/RIP is incremented
+ by VM_ENTER_INSTRUCTION_LEN bytes, whereas for HW_EXCEPTION,
+ it is not. */
+ if((intr_info & INTR_INFO_INTR_TYPE_MASK) == INTR_TYPE_SW_EXCEPTION) {
+ int ilen;
+ __vmread(VM_EXIT_INSTRUCTION_LEN, &ilen);
+ vmx_inject_sw_exception(v, vector, ilen);
+ } else
+ vmx_inject_hw_exception(v, vector, error_code);
return 0;
}
diff -r 199d53efd029 -r 2d73714911c2 xen/include/asm-x86/mm.h
--- a/xen/include/asm-x86/mm.h Thu Jul 27 10:00:00 2006 -0600
+++ b/xen/include/asm-x86/mm.h Thu Jul 27 10:43:34 2006 -0600
@@ -241,6 +241,11 @@ static inline int get_page_and_type(stru
return rc;
}
+static inline int page_is_removable(struct page_info *page)
+{
+ return ((page->count_info & PGC_count_mask) == 1);
+}
+
#define ASSERT_PAGE_IS_TYPE(_p, _t) \
ASSERT(((_p)->u.inuse.type_info & PGT_type_mask) == (_t)); \
ASSERT(((_p)->u.inuse.type_info & PGT_count_mask) != 0)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|