From 8f5f42e36f9b6a1213bdbdf680cc9f9e2349cbaa Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 14 Sep 2012 19:47:57 +0100 Subject: hvmloader: Do not zero the wallclock fields in shared-info. 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 Tested-and-Reported-by: Konrad Rzeszutek Wilk --- tools/firmware/hvmloader/xenbus.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'tools/firmware') diff --git a/tools/firmware/hvmloader/xenbus.c b/tools/firmware/hvmloader/xenbus.c index 71024ebe4d..eeb7001b4b 100644 --- a/tools/firmware/hvmloader/xenbus.c +++ b/tools/firmware/hvmloader/xenbus.c @@ -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; } -- cgit v1.2.3