From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: Julien Grall <julien@xen.org>,
Stefano Stabellini <sstabellini@kernel.org>,
Tamas K Lengyel <tamas.lengyel@intel.com>, Wei Liu <wl@xen.org>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Ian Jackson <ian.jackson@eu.citrix.com>,
George Dunlap <george.dunlap@citrix.com>,
Tamas K Lengyel <tamas@tklengyel.com>,
xen-devel@lists.xenproject.org
Subject: Re: [Xen-devel] [PATCH v12 1/3] xen/mem_sharing: VM forking
Date: Thu, 26 Mar 2020 10:10:19 +0100 [thread overview]
Message-ID: <20200326091019.GI28601@Air-de-Roger> (raw)
In-Reply-To: <c88f7cac-9990-957d-746b-fc60040c4c59@suse.com>
On Thu, Mar 26, 2020 at 08:07:09AM +0100, Jan Beulich wrote:
> On 25.03.2020 16:47, Roger Pau Monné wrote:
> > On Mon, Mar 23, 2020 at 10:04:35AM -0700, Tamas K Lengyel wrote:
> >> +static int copy_vcpu_settings(struct domain *cd, struct domain *d)
> >> +{
> >> + unsigned int i;
> >> + struct p2m_domain *p2m = p2m_get_hostp2m(cd);
> >> + int ret = -EINVAL;
> >> +
> >> + for ( i = 0; i < cd->max_vcpus; i++ )
> >> + {
> >> + const struct vcpu *d_vcpu = d->vcpu[i];
> >> + struct vcpu *cd_vcpu = cd->vcpu[i];
> >> + struct vcpu_runstate_info runstate;
> >> + mfn_t vcpu_info_mfn;
> >> +
> >> + if ( !d_vcpu || !cd_vcpu )
> >> + continue;
> >> +
> >> + /*
> >> + * Copy & map in the vcpu_info page if the guest uses one
> >> + */
> >> + vcpu_info_mfn = d_vcpu->vcpu_info_mfn;
> >> + if ( !mfn_eq(vcpu_info_mfn, INVALID_MFN) )
> >> + {
> >> + mfn_t new_vcpu_info_mfn = cd_vcpu->vcpu_info_mfn;
> >> +
> >> + /*
> >> + * Allocate & map the page for it if it hasn't been already
> >> + */
> >> + if ( mfn_eq(new_vcpu_info_mfn, INVALID_MFN) )
> >> + {
> >> + gfn_t gfn = mfn_to_gfn(d, vcpu_info_mfn);
> >> + unsigned long gfn_l = gfn_x(gfn);
> >> + struct page_info *page;
> >> +
> >> + if ( !(page = alloc_domheap_page(cd, 0)) )
> >> + return -ENOMEM;
> >> +
> >> + new_vcpu_info_mfn = page_to_mfn(page);
> >> + set_gpfn_from_mfn(mfn_x(new_vcpu_info_mfn), gfn_l);
> >> +
> >> + ret = p2m->set_entry(p2m, gfn, new_vcpu_info_mfn, PAGE_ORDER_4K,
> >> + p2m_ram_rw, p2m->default_access, -1);
> >> + if ( ret )
> >> + return ret;
> >> +
> >> + ret = map_vcpu_info(cd_vcpu, gfn_l,
> >> + d_vcpu->vcpu_info_offset);
> >> + if ( ret )
> >> + return ret;
> >> + }
> >> +
> >> + copy_domain_page(new_vcpu_info_mfn, vcpu_info_mfn);
> >> + }
> >> +
> >> + /*
> >> + * Setup the vCPU runstate area
> >> + */
> >> + if ( guest_handle_is_null(runstate_guest(cd_vcpu)) )
> >
> > Maybe I'm confused, but isn't this the other way around and you need
> > to check? If the parent runstate is not null copy it to the fork,
> > ie:
> >
> > if ( !guest_handle_is_null(runstate_guest(d_vcpu)) )
> > {
> > ...
> >
> >> + {
> >> + runstate_guest(cd_vcpu) = runstate_guest(d_vcpu);
> >> + vcpu_runstate_get(cd_vcpu, &runstate);
> >> + __copy_to_guest(runstate_guest(cd_vcpu), &runstate, 1);
> >
> > You should check the return code I think.
>
> I don't think so - this is a best effort operation just like e.g.
> in the handling of VCPUOP_register_runstate_memory_area.
I think printing a debug message might be helpful, not so much as for
the importance of failing to copy the runstate area, but it could
signal that something went wrong, anyway I don't have such a strong
opinion.
Just to confirm, __copy_to_guest will cause the forked domain memory
to be populated and the whole page to be copied over right? (and will
also cause the page tables to be added to the fork physmap in write
mode to set the accessed/dirty bits)
Thanks, Roger.
next prev parent reply other threads:[~2020-03-26 9:10 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-23 17:04 [Xen-devel] [PATCH v12 0/3] VM forking Tamas K Lengyel
2020-03-23 17:04 ` [Xen-devel] [PATCH v12 1/3] xen/mem_sharing: " Tamas K Lengyel
2020-03-25 15:47 ` Roger Pau Monné
2020-03-25 16:04 ` Tamas K Lengyel
2020-03-25 16:16 ` Tamas K Lengyel
2020-03-25 16:34 ` Tamas K Lengyel
2020-03-25 16:42 ` Julien Grall
2020-03-25 16:47 ` Tamas K Lengyel
2020-03-25 16:51 ` Julien Grall
2020-03-25 17:00 ` Tamas K Lengyel
2020-03-25 17:16 ` Roger Pau Monné
2020-03-25 17:47 ` Tamas K Lengyel
2020-03-25 16:54 ` Roger Pau Monné
2020-03-26 7:02 ` Jan Beulich
2020-03-26 8:42 ` Roger Pau Monné
2020-03-26 7:07 ` Jan Beulich
2020-03-26 9:10 ` Roger Pau Monné [this message]
2020-03-26 17:01 ` Tamas K Lengyel
2020-03-26 12:33 ` Jan Beulich
2020-03-26 14:52 ` Tamas K Lengyel
2020-03-23 17:04 ` [Xen-devel] [PATCH v12 2/3] x86/mem_sharing: reset a fork Tamas K Lengyel
2020-03-25 15:52 ` Roger Pau Monné
2020-03-25 15:54 ` Tamas K Lengyel
2020-03-26 10:16 ` Jan Beulich
2020-03-26 14:48 ` Tamas K Lengyel
2020-03-26 14:52 ` Jan Beulich
2020-03-26 14:53 ` Tamas K Lengyel
2020-03-26 23:40 ` Tamas K Lengyel
2020-03-23 17:04 ` [Xen-devel] [PATCH v12 3/3] xen/tools: VM forking toolstack side Tamas K Lengyel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200326091019.GI28601@Air-de-Roger \
--to=roger.pau@citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=george.dunlap@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.org \
--cc=tamas.lengyel@intel.com \
--cc=tamas@tklengyel.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.