Hi,
When
doing live migration, the shadow code is translated to log dirty mode. However,
in the shadow_clean_dirty_bitmap function, all the in-use shadow page tables are
blew down. I think it is too crude, just as the comment of the function says. I
am trying to find a better solution, but it does not succeeds. Would you please
help me check my source code and give me some suggestions? My current solution is
walking all the in-use L1 shadow page tables and clearing each L1 entry’s
R/W bit if it has set.
I
don’t know whether it is enough to remove these R/W bits for live
migration. If not, how to make all the pages of a PV domain read-only again?
Thanks very much!
My
source code is here.
sl1mfn = shadow_l2e_get_mfn(*sl2e);
if ( mfn_valid(sl1mfn) )
{
SHADOW_FOREACH_L1E(sl1mfn, sl1e, 0, 0, {
flags = shadow_l1e_get_flags(*sl1e);
target_mfn = shadow_l1e_get_mfn(*sl1e);
if(mfn_valid(target_mfn))
{
pg = mfn_to_page(target_mfn);
if ((pg != NULL) || ((pg->u.inuse.type_info & PGT_type_mask) ==
PGT_writable_page))
{
if ((flags & _PAGE_PRESENT) && (flags & _PAGE_RW))
{
shadow_l1e_t
ro_sl1e = shadow_l1e_remove_flags(*sl1e, _PAGE_RW);
(void) shadow_set_l1e(v, sl1e, ro_sl1e, sl1mfn);
}
}
}
});
}
zhujun