hvmloader: Do not zero the wallclock fields in shared-info.
authorKeir Fraser <keir@xen.org>
Fri, 14 Sep 2012 18:47:57 +0000 (19:47 +0100)
committerKeir Fraser <keir@xen.org>
Fri, 14 Sep 2012 18:47:57 +0000 (19:47 +0100)
These fields need to be valid at all times. Hypervisor ensures this
even across 32/64-bit guest transitions.

This fixes a bug where wallclock time is incorrect for booting 32-bit
HVM guests.

This should be backported to Xen 4.1 and 4.2.

Signed-off-by: Keir Fraser <keir@xen.org>
Tested-and-Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
tools/firmware/hvmloader/xenbus.c

index 71024ebe4d7d34e940543415070ef0e2c3acc4c3..eeb7001b4b3c20b65eb90e1df7d022f81bdabc33 100644 (file)
@@ -64,6 +64,8 @@ void xenbus_setup(void)
 /* Reset the xenbus connection so the next kernel can start again. */
 void xenbus_shutdown(void)
 {
+    struct shared_info *shinfo = get_shared_info();
+
     ASSERT(rings != NULL);
 
     /* We zero out the whole ring -- the backend can handle this, and it's 
@@ -72,7 +74,9 @@ void xenbus_shutdown(void)
     memset(rings, 0, sizeof *rings);
 
     /* Clear the event-channel state too. */
-    memset(get_shared_info(), 0, PAGE_SIZE);
+    memset(shinfo->vcpu_info, 0, sizeof(shinfo->vcpu_info));
+    memset(shinfo->evtchn_pending, 0, sizeof(shinfo->evtchn_pending));
+    memset(shinfo->evtchn_mask, 0, sizeof(shinfo->evtchn_mask));
 
     rings = NULL;
 }