# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxxxxx>
# Date 1169138889 0
# Node ID 025218cdb17dd4d57e8c60948c62b546bfef0080
# Parent 4138b80a8a23de6aa48cc1ba6472b18b3fe9cccb
[HVM] save restore: shadow fix
Signed-off-by: Zhai Edwin <edwin.zhai@xxxxxxxxx>
fix 2 shadow issues:
* restored guest's mem type_info are not correct
* remove annoying warnings when restore
enable smp:
turn on the vcpu when set_vcpu_context in restore as cpu hotplug is not
feasible for HVM
---
xen/arch/x86/mm/shadow/common.c | 2 +-
xen/arch/x86/mm/shadow/multi.c | 8 ++++++++
xen/common/domain.c | 9 +++++++++
3 files changed, 18 insertions(+), 1 deletion(-)
diff -r 4138b80a8a23 -r 025218cdb17d xen/arch/x86/mm/shadow/common.c
--- a/xen/arch/x86/mm/shadow/common.c Thu Jan 18 16:48:08 2007 +0000
+++ b/xen/arch/x86/mm/shadow/common.c Thu Jan 18 16:48:09 2007 +0000
@@ -2187,7 +2187,7 @@ int sh_remove_all_mappings(struct vcpu *
/* Don't complain if we're in HVM and there's one extra mapping:
* The qemu helper process has an untyped mapping of this dom's RAM */
if ( !(shadow_mode_external(v->domain)
- && (page->count_info & PGC_count_mask) <= 2
+ && (page->count_info & PGC_count_mask) <= 3 /* vmx restore add
one extra mapping*/
&& (page->u.inuse.type_info & PGT_count_mask) == 0) )
{
SHADOW_ERROR("can't find all mappings of mfn %lx: "
diff -r 4138b80a8a23 -r 025218cdb17d xen/arch/x86/mm/shadow/multi.c
--- a/xen/arch/x86/mm/shadow/multi.c Thu Jan 18 16:48:08 2007 +0000
+++ b/xen/arch/x86/mm/shadow/multi.c Thu Jan 18 16:48:09 2007 +0000
@@ -1628,6 +1628,14 @@ sh_make_shadow(struct vcpu *v, mfn_t gmf
}
}
+ {
+ struct page_info *page = mfn_to_page(gmfn);
+ /* XXX: add it to emulate a touched page */
+ if ((page->u.inuse.type_info & PGT_type_mask) == PGT_none){
+ page->u.inuse.type_info |= (PGT_writable_page | PGT_validated);
+ }
+ }
+
shadow_promote(v, gmfn, shadow_type);
set_shadow_status(v, gmfn, shadow_type, smfn);
diff -r 4138b80a8a23 -r 025218cdb17d xen/common/domain.c
--- a/xen/common/domain.c Thu Jan 18 16:48:08 2007 +0000
+++ b/xen/common/domain.c Thu Jan 18 16:48:09 2007 +0000
@@ -24,6 +24,7 @@
#include <xen/percpu.h>
#include <xen/multicall.h>
#include <asm/debugger.h>
+#include <asm/hvm/support.h>
#include <public/sched.h>
#include <public/vcpu.h>
#ifdef CONFIG_COMPAT
@@ -505,6 +506,14 @@ int set_info_guest(struct domain *d,
if ( rc == 0 )
rc = arch_set_info_guest(v, c);
+ /*XXX: hvm smp guest restore support */
+ if ( rc == 0 &&
+ v->vcpu_id != 0 &&
+ is_hvm_vcpu(v) &&
+ test_and_clear_bit(_VCPUF_down, &v->vcpu_flags) ) {
+ vcpu_wake(v);
+ }
+
domain_unpause(d);
xfree(c.nat);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|