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

Re: [Xen-devel] Question about xenpage_list



On Wed, Aug 28, 2019 at 10:55 AM Andrew Cooper
<andrew.cooper3@xxxxxxxxxx> wrote:
>
> On 28/08/2019 17:25, Tamas K Lengyel wrote:
> > On Wed, Aug 28, 2019 at 9:54 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
> >> On 28.08.2019 17:51, Tamas K Lengyel wrote:
> >>> On Wed, Aug 28, 2019 at 9:35 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
> >>>> On 28.08.2019 17:28, Tamas K Lengyel wrote:
> >>>>> Hi all,
> >>>>> I'm trying to track down how a call in common/grant_table.c to
> >>>>> share_xen_page_with_guest will actually populate that page into the
> >>>>> guest's physmap.
>
> share_xen_page_with_guest() is perhaps poorly named.  It makes the page
> able to be inserted into the guests p2m.
>
> It is internal accounting, so that the permission checks in a subsequent
> add_to_physmap() call will pass.
>
> Perhaps it should be named "allow_guest_access_to_frame()" or similar.
>
> >>>>>  Immediately after the call the page doesn't seem to
> >>>>> be present in the physmap, as share_xen_page_with_guest will just add
> >>>>> the page to the domain's xenpage_list linked-list:
> >>>>>
> >>>>>         unsigned long mfn;
> >>>>>         unsigned long gfn;
> >>>>>
> >>>>>         share_xen_page_with_guest(virt_to_page(gt->shared_raw[i]), d, 
> >>>>> SHARE_rw);
> >>>>>
> >>>>>         mfn = virt_to_mfn(gt->shared_raw[i]);
> >>>>>         gfn = mfn_to_gmfn(d, mfn);
> >>>>>
> >>>>>         gdprintk(XENLOG_INFO, "Sharing %lx -> %lx with domain %u\n",
> >>>>> gfn, mfn, d->domain_id);
> >>>>>
> >>>>> This results in the following:
> >>>>>
> >>>>> (XEN) grant_table.c:1820:d0v0 Sharing ffffffffffffffff -> 42c71e with 
> >>>>> domain 1
> >>>>>
> >>>>> AFAICT the page only gets populated into the physmap once the domain
> >>>>> gets unpaused. If I let the domain run and then pause it I can see
> >>>>> that the page is in the guest's physmap (by looping through all the
> >>>>> entries in its EPT):
> >>>>>
> >>>>> (XEN) mem_sharing.c:1636:d0v0 0xf2000 -> 0x42c71e is a grant mapping
> >>>>> shared with the guest
> >>>> This should be the result of the domain having made a respective
> >>>> XENMAPSPACE_grant_table request, shouldn't it?
> >>>>
> >>> Do you mean the guest itself or the toolstack?
> >> The guest itself - how would the tool stack know where to put the
> >> frame(s)?
> > I don't think that makes sense. How would a guest itself now that it
> > needs to map that frame? When you restore the VM from a savefile, it
> > is already running and no firmware is going to run in it to initialize
> > such GFNs.
> >
> > As for the toolstack, I see calls to xc_dom_gnttab_seed from the
> > toolstack during domain creation (be it a new domain or one being
> > restored from a save file) which does issue a XENMEM_add_to_physmap
> > with the space being specified as XENMAPSPACE_grant_table. Looks like
> > it gathers the GFN via xc_core_arch_get_scratch_gpfn. So it looks like
> > that's how its done.
>
> On domain creation, the toolstack needs to write the store/console grant
> entry.
>
> If XENMEM_acquire_resource is available and usable (needs newish Xen and
> dom0 kernel), then that method is preferred.  This lets the toolstack
> map the grant table frame directly, without inserting it into the guests
> p2m first.
>
> The fallback path is to pick a free pfn, insert it into the guest
> physmap, foreign map it, write the entries, unmap and remove from the
> guest physmap.  This has various poor properties like shattering
> superpages for the guest, and a general inability to function correctly
> once the guest has started executing and has a balloon driver in place.
>
> At a later point, once the guest starts executing, a grant-table aware
> part of the kernel ought to map the grant table at the kernels preferred
> location and keep it there permanently.
>

OK, makes sense, but when the guest is being restored from a savefile,
how does it know that it needs to do that mapping again? That frame is
being re-created during restoration, so when the guest starts to
execute again it would just have a whole where that page used to be.

Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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