diff -r dbac9ee4d761 xen/arch/x86/mm/shadow/common.c --- a/xen/arch/x86/mm/shadow/common.c Mon Sep 08 16:02:13 2008 +0100 +++ b/xen/arch/x86/mm/shadow/common.c Fri Sep 12 17:40:31 2008 +0100 @@ -2462,22 +2462,25 @@ int sh_remove_write_access_from_sl1p(str ASSERT(mfn_valid(smfn)); ASSERT(mfn_valid(gmfn)); - if ( sp->type == SH_type_l1_32_shadow ) + if ( sp->type == SH_type_l1_32_shadow + || sp->type == SH_type_fl1_32_shadow ) { return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,2) (v, gmfn, smfn, off); } #if CONFIG_PAGING_LEVELS >= 3 - else if ( sp->type == SH_type_l1_pae_shadow ) + else if ( sp->type == SH_type_l1_pae_shadow + || sp->type == SH_type_fl1_pae_shadow ) return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,3) (v, gmfn, smfn, off); #if CONFIG_PAGING_LEVELS >= 4 - else if ( sp->type == SH_type_l1_64_shadow ) + else if ( sp->type == SH_type_l1_64_shadow + || sp->type == SH_type_fl1_64_shadow ) return SHADOW_INTERNAL_NAME(sh_rm_write_access_from_sl1p,4) (v, gmfn, smfn, off); #endif #endif - + return 0; } #endif diff -r dbac9ee4d761 xen/arch/x86/mm/shadow/multi.c --- a/xen/arch/x86/mm/shadow/multi.c Mon Sep 08 16:02:13 2008 +0100 +++ b/xen/arch/x86/mm/shadow/multi.c Fri Sep 12 17:40:31 2008 +0100 @@ -4539,7 +4539,8 @@ int sh_rm_write_access_from_sl1p(struct sp = mfn_to_shadow_page(smfn); if ( sp->mbz != 0 - || (sp->type != SH_type_l1_shadow) ) + || (sp->type != SH_type_l1_shadow + && sp->type != SH_type_fl1_shadow) ) goto fail; sl1p = sh_map_domain_page(smfn);