aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2012-09-14 19:47:57 +0100
committerKeir Fraser <keir@xen.org>2012-09-14 19:47:57 +0100
commit8f5f42e36f9b6a1213bdbdf680cc9f9e2349cbaa (patch)
tree7ddf1eada36c9df5776944c5e3a1358bebad6dd4 /tools/firmware
parent224f81b97fdf94c154b9295c77046fd91c673cb4 (diff)
downloadxen-8f5f42e36f9b6a1213bdbdf680cc9f9e2349cbaa.tar.gz
xen-8f5f42e36f9b6a1213bdbdf680cc9f9e2349cbaa.tar.bz2
xen-8f5f42e36f9b6a1213bdbdf680cc9f9e2349cbaa.zip
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 <keir@xen.org> Tested-and-Reported-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'tools/firmware')
-rw-r--r--tools/firmware/hvmloader/xenbus.c6
1 files changed, 5 insertions, 1 deletions
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;
}