[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Re: Making pages writable again in paging_log_dirty mode


  • To: "Tim Deegan" <Tim.Deegan@xxxxxxxxxx>
  • From: "Mike Sun" <msun@xxxxxxxxxx>
  • Date: Sun, 4 Jan 2009 18:09:42 -0500
  • Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
  • Delivery-date: Sun, 04 Jan 2009 15:10:08 -0800
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:sender:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references:x-google-sender-auth; b=o0HazllU6d9A3Ua2YE14fkcunYA7xUCyBYeL5l1q6CPHeCZBejNdIuXGdRumHHGlXS HS8eqXqBnp5mNhxTEDow4pCLBEVw5ijdZOnefT0wSjrkhw/QYwxmSuUyreIiOEC/GfPe Ir+5yn5VRKrCwm4jJU/woCQ0c6cc1asoJQoJ0=
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

>> (XEN) sh error: sh_remove_shadows(): can't find all shadows of mfn
>> 02673 (shadow_flags=00000008)

Premature declaration of success.  I'm still getting the panic above
from this piece of code.

           SHADOW_FOREACH_L1E(sl1mfn, sl1e, 0, done_l1,
           {
               flags_l1 = shadow_l1e_get_flags(*sl1e);
               if ((flags_l1 & _PAGE_PRESENT) && !(flags_l1 & _PAGE_RW))
               {
                   mfn = shadow_l1e_get_mfn(*sl1e);
                   pfn = mfn_to_gfn(v->domain, mfn);
                   log_dirty_lock(v->domain);
                   if (mfn_valid(mfn) && VALID_M2P(pfn) &&
                       sh_mfn_is_dirty(v->domain, mfn))
                   {
                       /* hack: because of the external mapping condition
                        * ref count not incremented when this is called from
                        * hypercall originating from dom0, need to do it
                        * manually
                        */
                       struct page_info *page = mfn_to_page(mfn);
                       if (((page->u.inuse.type_info & PGT_type_mask)
                               == PGT_writable_page)
                           && ((page->u.inuse.type_info & PGT_count_mask) == 0)
                           && get_page_type(page, PGT_writable_page))
                       {
                           shadow_l1e_t rw_sl1e =
                               shadow_l1e_add_flags(*sl1e, _PAGE_RW);
                           shadow_write_entries(sl1e, &rw_sl1e, 1, sl1mfn);
                           cow.made_rw_count++;
                       }
                   }
                   log_dirty_unlock(v->domain);
               }
           });

Am I failing to update the page count somewhere?  Or are there more
conditions I need to check for the page that I'm adding a RW mapping
to?

Thanks,
Mike

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.