]> xenbits.xen.org Git - xenclient/ioemu.git/commitdiff
Fix hvm guest cirrus_vga hvm s3 resume failure
authorIan Jackson <ian.jackson@eu.citrix.com>
Tue, 21 Apr 2009 14:45:18 +0000 (15:45 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Tue, 21 Apr 2009 14:45:18 +0000 (15:45 +0100)
This patch is for fixing hvm guest cirrus_vga hvm s3 resume failure.
 We found latest Qemu (after Mar 3.10) will cause HVM guest vga fails
to resume back from S3.  It's because vga_bios_init is not only needed
during init, but also needed after cirrus_vga reset (hvm s3 will do
qemu_reset).

Also, we found the outdated s->vram_ptr reset will cause s3 resume
screen black, so we remove it. (win2000 boot up does not need it now)

We verified the fix with the latest cs/qemu.

[ Patch modified slightly by Ian Jackson to reduce code motion. ]

Signed-off-by: Liping Ke<liping.ke@intel.com>
Signed-off-by: Ke Yu<ke.yu@intel.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
hw/cirrus_vga.c
hw/vga.c

index d95472e298445fb40e0f8e71942ff27ffa907947..8da0c60cbbd07aaa593252fa30398df622734275 100644 (file)
@@ -3192,12 +3192,6 @@ static void cirrus_reset(void *opaque)
         s->sr[0x15] = 0x03; /* memory size, 3=2MB, 4=4MB */
     }
     s->cr[0x27] = s->device_id;
-
-    if (s->vram_ptr)
-        /* Win2K seems to assume that the pattern buffer is at 0xff
-           initially ! */
-        memset(s->vram_ptr, 0xff, s->real_vram_size);
-
     s->cirrus_hidden_dac_lockindex = 5;
     s->cirrus_hidden_dac_data = 0;
 }
index 7b8572af9389c2616582e60fa046b490d0a1fc30..90bd544cf4cd9fdac2de7f3cc072014bf68914b7 100644 (file)
--- a/hw/vga.c
+++ b/hw/vga.c
@@ -158,6 +158,7 @@ static uint32_t expand4[256];
 static uint16_t expand2[256];
 static uint8_t expand4to8[16];
 
+static void vga_bios_init(VGAState *s);
 static void vga_screen_dump(void *opaque, const char *filename);
 
 static void vga_dumb_update_retrace_info(VGAState *s)
@@ -1957,6 +1958,7 @@ void vga_reset(void *opaque)
         memset(&s->retrace_info, 0, sizeof (s->retrace_info));
         break;
     }
+    vga_bios_init(s);
 }
 
 #define TEXTMODE_X(x)  ((x) % width)
@@ -2584,7 +2586,6 @@ void vga_common_init(VGAState *s, uint8_t *vga_ram_base,
         s->vram_gmfn = VRAM_RESERVED_ADDRESS;
     }
 
-    vga_bios_init(s);
     switch (vga_retrace_method) {
     case VGA_RETRACE_DUMB:
         s->retrace = vga_dumb_retrace;