diff -r f531ed84b066 xen/arch/x86/mm/p2m-ept.c --- a/xen/arch/x86/mm/p2m-ept.c Tue May 17 17:32:19 2011 +0100 +++ b/xen/arch/x86/mm/p2m-ept.c Mon May 23 11:52:32 2011 +0100 @@ -586,6 +586,11 @@ static mfn_t ept_get_entry(struct p2m_do *t = ept_entry->sa_p2mt; *a = ept_entry->access; + if ( p2m_has_emt(ept_entry->sa_p2mt) + && (!is_epte_present(ept_entry) || ept_entry->mfn == 0) ) + printk("Bad EPT entry %"PRIx64" for GFN %lx\n", + ept_entry->epte, gfn) + mfn = _mfn(ept_entry->mfn); if ( i ) { @@ -736,7 +741,7 @@ void ept_change_entry_emt_with_range(str uint64_t trunk = 0; e = ept_get_entry_content(p2m, gfn, &level); - if ( !p2m_has_emt(e.sa_p2mt) ) + if ( !is_epte_present(&e) || !p2m_has_emt(e.sa_p2mt) ) continue; order = 0;