# HG changeset patch
# User chris@xxxxxxxxxxxxxxxxxxxxxxxx
# Node ID f20f1e7091a416a7aff644c4aa8fbd025d3f632a
# Parent 14642f36a201af34b62169dce69ba92e94cff9ee
[qemu] Fix HVM guests with more than 2G RAM on x86_64,
where "startx" will cause qemu dm to die.
Signed-off-by: Xin Li <xin.b.li@xxxxxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
---
tools/ioemu/hw/vga.c | 3 -
tools/ioemu/patches/domain-timeoffset | 8 +--
tools/ioemu/patches/qemu-64bit | 49 +++++++++++++++--------
tools/ioemu/patches/shadow-vram | 16 ++++---
tools/ioemu/patches/shared-vram | 71 +++++++++++++++++-----------------
5 files changed, 84 insertions(+), 63 deletions(-)
diff -r 14642f36a201 -r f20f1e7091a4 tools/ioemu/hw/vga.c
--- a/tools/ioemu/hw/vga.c Wed Jul 26 11:47:44 2006 +0100
+++ b/tools/ioemu/hw/vga.c Wed Jul 26 13:23:05 2006 +0100
@@ -1392,7 +1392,8 @@ static void vga_draw_graphic(VGAState *s
static void vga_draw_graphic(VGAState *s, int full_update)
{
int y1, y, update, page_min, page_max, linesize, y_start, double_scan,
mask;
- int width, height, shift_control, line_offset, page0, page1, bwidth;
+ int width, height, shift_control, line_offset, bwidth;
+ ram_addr_t page0, page1;
int disp_width, multi_scan, multi_run;
uint8_t *d;
uint32_t v, addr1, addr;
diff -r 14642f36a201 -r f20f1e7091a4 tools/ioemu/patches/domain-timeoffset
--- a/tools/ioemu/patches/domain-timeoffset Wed Jul 26 11:47:44 2006 +0100
+++ b/tools/ioemu/patches/domain-timeoffset Wed Jul 26 13:23:05 2006 +0100
@@ -1,7 +1,7 @@ Index: ioemu/hw/mc146818rtc.c
Index: ioemu/hw/mc146818rtc.c
===================================================================
---- ioemu.orig/hw/mc146818rtc.c 2006-07-14 15:55:55.450963213 +0100
-+++ ioemu/hw/mc146818rtc.c 2006-07-14 15:56:02.195195680 +0100
+--- ioemu.orig/hw/mc146818rtc.c 2006-07-26 13:18:13.783025944 +0100
++++ ioemu/hw/mc146818rtc.c 2006-07-26 13:20:34.934314196 +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-14 15:56:01.774243586 +0100
-+++ ioemu/hw/pc.c 2006-07-14 15:56:02.196195566 +0100
+--- ioemu.orig/hw/pc.c 2006-07-26 13:20:34.463363339 +0100
++++ ioemu/hw/pc.c 2006-07-26 13:20:34.935314092 +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-14 15:56:02.010216731 +0100
-+++ ioemu/vl.c 2006-07-14 15:56:02.198195338 +0100
+--- ioemu.orig/vl.c 2006-07-26 13:20:34.812326925 +0100
++++ ioemu/vl.c 2006-07-26 13:20:34.937313883 +0100
@@ -164,6 +164,8 @@
int xc_handle;
@@ -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-14 15:56:01.779243017 +0100
-+++ ioemu/vl.h 2006-07-14 15:56:02.199195224 +0100
+--- ioemu.orig/vl.h 2006-07-26 13:20:34.467362921 +0100
++++ ioemu/vl.h 2006-07-26 13:20:34.938313779 +0100
@@ -556,7 +556,7 @@
int boot_device,
DisplayState *ds, const char **fd_filename, int snapshot,
diff -r 14642f36a201 -r f20f1e7091a4 tools/ioemu/patches/qemu-64bit
--- a/tools/ioemu/patches/qemu-64bit Wed Jul 26 11:47:44 2006 +0100
+++ b/tools/ioemu/patches/qemu-64bit Wed Jul 26 13:23:05 2006 +0100
@@ -1,7 +1,8 @@ diff -r 2b3e57b3e1ec cpu-all.h
-diff -r 2b3e57b3e1ec cpu-all.h
---- a/cpu-all.h Mon Jun 26 15:16:39 2006 +0100
-+++ b/cpu-all.h Mon Jun 26 15:16:44 2006 +0100
-@@ -822,7 +822,7 @@ int cpu_inl(CPUState *env, int addr);
+Index: ioemu/cpu-all.h
+===================================================================
+--- ioemu.orig/cpu-all.h 2006-07-26 13:19:49.515051864 +0100
++++ ioemu/cpu-all.h 2006-07-26 13:19:49.563046860 +0100
+@@ -822,7 +822,7 @@
/* memory API */
@@ -10,10 +11,11 @@ diff -r 2b3e57b3e1ec cpu-all.h
extern int phys_ram_fd;
extern uint8_t *phys_ram_base;
extern uint8_t *phys_ram_dirty;
-diff -r 2b3e57b3e1ec hw/pc.c
---- a/hw/pc.c Mon Jun 26 15:16:39 2006 +0100
-+++ b/hw/pc.c Mon Jun 26 15:16:44 2006 +0100
-@@ -147,7 +147,7 @@ static void cmos_init_hd(int type_ofs, i
+Index: ioemu/hw/pc.c
+===================================================================
+--- ioemu.orig/hw/pc.c 2006-07-26 13:19:49.516051760 +0100
++++ ioemu/hw/pc.c 2006-07-26 13:19:49.564046755 +0100
+@@ -147,7 +147,7 @@
}
/* hd_table must contain 4 block drivers */
@@ -22,7 +24,7 @@ diff -r 2b3e57b3e1ec hw/pc.c
{
RTCState *s = rtc_state;
int val;
-@@ -604,7 +604,7 @@ static void pc_init_ne2k_isa(NICInfo *nd
+@@ -604,7 +604,7 @@
}
/* PC hardware initialisation */
@@ -31,7 +33,7 @@ diff -r 2b3e57b3e1ec hw/pc.c
DisplayState *ds, const char **fd_filename, int snapshot,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename,
-@@ -853,7 +853,7 @@ static void pc_init1(int ram_size, int v
+@@ -853,7 +853,7 @@
}
}
@@ -40,7 +42,7 @@ diff -r 2b3e57b3e1ec hw/pc.c
DisplayState *ds, const char **fd_filename,
int snapshot,
const char *kernel_filename,
-@@ -866,7 +866,7 @@ static void pc_init_pci(int ram_size, in
+@@ -866,7 +866,7 @@
initrd_filename, 1);
}
@@ -49,10 +51,11 @@ diff -r 2b3e57b3e1ec hw/pc.c
DisplayState *ds, const char **fd_filename,
int snapshot,
const char *kernel_filename,
-diff -r 2b3e57b3e1ec vl.c
---- a/vl.c Mon Jun 26 15:16:39 2006 +0100
-+++ b/vl.c Mon Jun 26 15:16:44 2006 +0100
-@@ -123,7 +123,7 @@ const char* keyboard_layout = NULL;
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-07-26 13:19:49.552048007 +0100
++++ ioemu/vl.c 2006-07-26 13:19:49.566046547 +0100
+@@ -123,7 +123,7 @@
const char* keyboard_layout = NULL;
int64_t ticks_per_sec;
int boot_device = 'c';
@@ -61,7 +64,7 @@ diff -r 2b3e57b3e1ec vl.c
int pit_min_timer_count = 0;
int nb_nics;
NICInfo nd_table[MAX_NICS];
-@@ -5320,7 +5320,7 @@ int main(int argc, char **argv)
+@@ -5320,7 +5320,7 @@
help();
break;
case QEMU_OPTION_m:
@@ -70,10 +73,11 @@ diff -r 2b3e57b3e1ec vl.c
if (ram_size <= 0)
help();
if (ram_size > PHYS_RAM_MAX_SIZE) {
-diff -r 2b3e57b3e1ec vl.h
---- a/vl.h Mon Jun 26 15:16:39 2006 +0100
-+++ b/vl.h Mon Jun 26 15:16:44 2006 +0100
-@@ -138,7 +138,7 @@ extern int xc_handle;
+Index: ioemu/vl.h
+===================================================================
+--- ioemu.orig/vl.h 2006-07-26 13:19:49.552048007 +0100
++++ ioemu/vl.h 2006-07-26 13:19:49.567046443 +0100
+@@ -138,7 +138,7 @@
extern int xc_handle;
extern int domid;
@@ -82,7 +86,7 @@ diff -r 2b3e57b3e1ec vl.h
extern int bios_size;
extern int rtc_utc;
extern int cirrus_vga_enabled;
-@@ -542,7 +542,7 @@ int qcow_compress_cluster(BlockDriverSta
+@@ -542,7 +542,7 @@
#ifndef QEMU_TOOL
@@ -91,3 +95,17 @@ diff -r 2b3e57b3e1ec vl.h
int boot_device,
DisplayState *ds, const char **fd_filename, int snapshot,
const char *kernel_filename, const char *kernel_cmdline,
+Index: ioemu/hw/vga.c
+===================================================================
+--- ioemu.orig/hw/vga.c 2006-07-26 13:19:49.549048319 +0100
++++ ioemu/hw/vga.c 2006-07-26 13:20:17.956085603 +0100
+@@ -1293,7 +1293,8 @@
+ static void vga_draw_graphic(VGAState *s, int full_update)
+ {
+ int y1, y, update, page_min, page_max, linesize, y_start, double_scan,
mask;
+- int width, height, shift_control, line_offset, page0, page1, bwidth;
++ int width, height, shift_control, line_offset, bwidth;
++ ram_addr_t page0, page1;
+ int disp_width, multi_scan, multi_run;
+ uint8_t *d;
+ uint32_t v, addr1, addr;
diff -r 14642f36a201 -r f20f1e7091a4 tools/ioemu/patches/shadow-vram
--- a/tools/ioemu/patches/shadow-vram Wed Jul 26 11:47:44 2006 +0100
+++ b/tools/ioemu/patches/shadow-vram Wed Jul 26 13:23:05 2006 +0100
@@ -1,7 +1,8 @@ diff -r 0ef2ae12258c hw/vga.c
-diff -r 0ef2ae12258c hw/vga.c
---- a/hw/vga.c Mon Jun 26 16:07:22 2006 +0100
-+++ b/hw/vga.c Tue Jun 27 09:42:44 2006 +0100
-@@ -1287,6 +1287,105 @@ void vga_invalidate_scanlines(VGAState *
+Index: ioemu/hw/vga.c
+===================================================================
+--- ioemu.orig/hw/vga.c 2006-07-26 13:20:34.464363234 +0100
++++ ioemu/hw/vga.c 2006-07-26 13:20:34.660342784 +0100
+@@ -1287,6 +1287,105 @@
}
}
@@ -107,7 +108,7 @@ diff -r 0ef2ae12258c hw/vga.c
/*
* graphic modes
*/
-@@ -1381,6 +1480,11 @@ static void vga_draw_graphic(VGAState *s
+@@ -1382,6 +1481,11 @@
printf("w=%d h=%d v=%d line_offset=%d cr[0x09]=0x%02x cr[0x17]=0x%02x
linecmp=%d sr[0x01]=0x%02x\n",
width, height, v, line_offset, s->cr[9], s->cr[0x17],
s->line_compare, s->sr[0x01]);
#endif
@@ -119,7 +120,7 @@ diff -r 0ef2ae12258c hw/vga.c
addr1 = (s->start_addr * 4);
bwidth = width * 4;
y_start = -1;
-@@ -1699,6 +1803,14 @@ void vga_common_init(VGAState *s, Displa
+@@ -1700,6 +1804,14 @@
vga_reset(s);
@@ -134,9 +135,10 @@ diff -r 0ef2ae12258c hw/vga.c
s->vram_ptr = qemu_malloc(vga_ram_size);
s->vram_offset = vga_ram_offset;
s->vram_size = vga_ram_size;
-diff -r 0ef2ae12258c hw/vga_int.h
---- a/hw/vga_int.h Mon Jun 26 16:07:22 2006 +0100
-+++ b/hw/vga_int.h Tue Jun 27 09:42:44 2006 +0100
+Index: ioemu/hw/vga_int.h
+===================================================================
+--- ioemu.orig/hw/vga_int.h 2006-07-26 13:20:34.464363234 +0100
++++ ioemu/hw/vga_int.h 2006-07-26 13:20:34.661342680 +0100
@@ -76,6 +76,7 @@
#define VGA_STATE_COMMON \
diff -r 14642f36a201 -r f20f1e7091a4 tools/ioemu/patches/shared-vram
--- a/tools/ioemu/patches/shared-vram Wed Jul 26 11:47:44 2006 +0100
+++ b/tools/ioemu/patches/shared-vram Wed Jul 26 13:23:05 2006 +0100
@@ -1,6 +1,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
-diff -r 62e05863ec04 hw/cirrus_vga.c
---- a/hw/cirrus_vga.c Mon Jun 26 15:18:40 2006 +0100
-+++ b/hw/cirrus_vga.c Mon Jun 26 15:19:40 2006 +0100
+Index: ioemu/hw/cirrus_vga.c
+===================================================================
+--- ioemu.orig/hw/cirrus_vga.c 2006-07-26 13:18:13.906013141 +0100
++++ ioemu/hw/cirrus_vga.c 2006-07-26 13:20:34.462363443 +0100
@@ -28,6 +28,9 @@
*/
#include "vl.h"
@@ -11,7 +12,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
/*
* TODO:
-@@ -231,6 +234,8 @@ typedef struct CirrusVGAState {
+@@ -231,6 +234,8 @@
int cirrus_linear_io_addr;
int cirrus_linear_bitblt_io_addr;
int cirrus_mmio_io_addr;
@@ -20,7 +21,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
uint32_t cirrus_addr_mask;
uint32_t linear_mmio_mask;
uint8_t cirrus_shadow_gr0;
-@@ -267,6 +272,8 @@ typedef struct CirrusVGAState {
+@@ -267,6 +272,8 @@
int last_hw_cursor_y_end;
int real_vram_size; /* XXX: suppress that */
CPUWriteMemoryFunc **cirrus_linear_write;
@@ -29,7 +30,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
} CirrusVGAState;
typedef struct PCICirrusVGAState {
-@@ -276,6 +283,8 @@ typedef struct PCICirrusVGAState {
+@@ -276,6 +283,8 @@
static uint8_t rop_to_index[256];
@@ -38,7 +39,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
/***************************************
*
* prototypes.
-@@ -2520,6 +2529,80 @@ static CPUWriteMemoryFunc *cirrus_linear
+@@ -2520,6 +2529,80 @@
cirrus_linear_bitblt_writel,
};
@@ -119,7 +120,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
/* Compute the memory access functions */
static void cirrus_update_memory_access(CirrusVGAState *s)
{
-@@ -2538,11 +2621,39 @@ static void cirrus_update_memory_access(
+@@ -2538,11 +2621,39 @@
mode = s->gr[0x05] & 0x7;
if (mode < 4 || mode > 5 || ((s->gr[0x0B] & 0x4) == 0)) {
@@ -159,7 +160,7 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
s->cirrus_linear_write[0] = cirrus_linear_writeb;
s->cirrus_linear_write[1] = cirrus_linear_writew;
s->cirrus_linear_write[2] = cirrus_linear_writel;
-@@ -3136,6 +3247,13 @@ static void cirrus_pci_lfb_map(PCIDevice
+@@ -3136,6 +3247,13 @@
/* XXX: add byte swapping apertures */
cpu_register_physical_memory(addr, s->vram_size,
s->cirrus_linear_io_addr);
@@ -173,10 +174,11 @@ diff -r 62e05863ec04 hw/cirrus_vga.c
cpu_register_physical_memory(addr + 0x1000000, 0x400000,
s->cirrus_linear_bitblt_io_addr);
}
-diff -r 62e05863ec04 hw/pc.c
---- a/hw/pc.c Mon Jun 26 15:18:40 2006 +0100
-+++ b/hw/pc.c Mon Jun 26 15:19:40 2006 +0100
-@@ -783,14 +783,14 @@ static void pc_init1(uint64_t ram_size,
+Index: ioemu/hw/pc.c
+===================================================================
+--- ioemu.orig/hw/pc.c 2006-07-26 13:20:34.396370329 +0100
++++ ioemu/hw/pc.c 2006-07-26 13:20:34.463363339 +0100
+@@ -783,14 +783,14 @@
if (cirrus_vga_enabled) {
if (pci_enabled) {
pci_cirrus_vga_init(pci_bus,
@@ -194,10 +196,11 @@ diff -r 62e05863ec04 hw/pc.c
vga_ram_size, 0, 0);
}
-diff -r 62e05863ec04 hw/vga.c
---- a/hw/vga.c Mon Jun 26 15:18:40 2006 +0100
-+++ b/hw/vga.c Mon Jun 26 15:19:40 2006 +0100
-@@ -1668,6 +1668,7 @@ static void vga_map(PCIDevice *pci_dev,
+Index: ioemu/hw/vga.c
+===================================================================
+--- ioemu.orig/hw/vga.c 2006-07-26 13:20:33.293485412 +0100
++++ ioemu/hw/vga.c 2006-07-26 13:20:34.464363234 +0100
+@@ -1669,6 +1669,7 @@
}
}
@@ -205,7 +208,7 @@ diff -r 62e05863ec04 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)
{
-@@ -1698,7 +1699,7 @@ void vga_common_init(VGAState *s, Displa
+@@ -1699,7 +1700,7 @@
vga_reset(s);
@@ -214,12 +217,10 @@ diff -r 62e05863ec04 hw/vga.c
s->vram_offset = vga_ram_offset;
s->vram_size = vga_ram_size;
s->ds = ds;
-@@ -1808,6 +1809,31 @@ int vga_initialize(PCIBus *bus, DisplayS
- #endif
- }
+@@ -1811,6 +1812,31 @@
return 0;
-+}
-+
+ }
+
+void *vga_update_vram(VGAState *s, void *vga_ram_base, int vga_ram_size)
+{
+ uint8_t *old_pointer;
@@ -243,27 +244,30 @@ diff -r 62e05863ec04 hw/vga.c
+ s->vram_ptr = vga_ram_base;
+
+ return old_pointer;
- }
-
++}
++
/********************************************************/
-diff -r 62e05863ec04 hw/vga_int.h
---- a/hw/vga_int.h Mon Jun 26 15:18:40 2006 +0100
-+++ b/hw/vga_int.h Mon Jun 26 15:19:40 2006 +0100
-@@ -166,5 +166,6 @@ void vga_draw_cursor_line_32(uint8_t *d1
+ /* vga screen dump */
+
+Index: ioemu/hw/vga_int.h
+===================================================================
+--- ioemu.orig/hw/vga_int.h 2006-07-26 13:20:33.063509409 +0100
++++ ioemu/hw/vga_int.h 2006-07-26 13:20:34.464363234 +0100
+@@ -166,5 +166,6 @@
unsigned int color0, unsigned int color1,
unsigned int color_xor);
+void *vga_update_vram(VGAState *s, void *vga_ram_base, int vga_ram_size);
extern const uint8_t sr_mask[8];
extern const uint8_t gr_mask[16];
-diff -r 62e05863ec04 vl.c
---- a/vl.c Mon Jun 26 15:18:40 2006 +0100
-+++ b/vl.c Mon Jun 26 15:19:40 2006 +0100
-@@ -5147,6 +5147,78 @@ static void select_soundhw (const char *
- #endif
+Index: ioemu/vl.c
+===================================================================
+--- ioemu.orig/vl.c 2006-07-26 13:20:34.398370121 +0100
++++ ioemu/vl.c 2006-07-26 13:20:34.466363026 +0100
+@@ -5148,6 +5148,78 @@
#define MAX_NET_CLIENTS 32
-+
+
+#include <xg_private.h>
+
+/* FIXME Flush the shadow page */
@@ -335,13 +339,15 @@ diff -r 62e05863ec04 vl.c
+
+ return 0;
+}
-
++
int main(int argc, char **argv)
{
-diff -r 62e05863ec04 vl.h
---- a/vl.h Mon Jun 26 15:18:40 2006 +0100
-+++ b/vl.h Mon Jun 26 15:19:40 2006 +0100
-@@ -136,6 +136,13 @@ extern int reset_requested;
+ #ifdef CONFIG_GDBSTUB
+Index: ioemu/vl.h
+===================================================================
+--- ioemu.orig/vl.h 2006-07-26 13:20:34.268383684 +0100
++++ ioemu/vl.h 2006-07-26 13:20:34.467362921 +0100
+@@ -136,6 +136,13 @@
void main_loop_wait(int timeout);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|