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

Re: [Xen-devel] [PATCH] x86/pvh: copy data from low 1MB to Dom0 physmap instead of mapping it



On Mon, Sep 17, 2018 at 11:27:56AM +0100, Wei Liu wrote:
> On Fri, Sep 14, 2018 at 01:16:11PM +0200, Roger Pau Monne wrote:
> > Identity mapping RAM regions on the low 1MB for Dom0 is not ideal,
> > since there's data there that could be used by Xen during runtime
> > (like the AP trampoline), so instead of identity mapping the low 1MB
> > into the Dom0 physmap populate those RAM regions and copy the data.
> 
> I assume you encountered some real issues or is it just precaution?

It's simpler, and allowing Dom0 to modify the Xen AP trampoline code
is not a good idea.

> > 
> > Note that this allows to remove unshare_xen_page_with_guest since the
> > only caller was the PVH Dom0 builder.
> > 
> > Signed-off-by: Roger Pau Monné <rogewr.pau@xxxxxxxxxx>
> > ---
> > Cc: Jan Beulich <jbeulich@xxxxxxxx>
> > Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> > Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
> > Cc: George Dunlap <George.Dunlap@xxxxxxxxxxxxx>
> > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> > Cc: Julien Grall <julien.grall@xxxxxxx>
> > Cc: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
> > Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> > Cc: Tim Deegan <tim@xxxxxxx>
> > ---
> >  xen/arch/x86/hvm/dom0_build.c | 51 +++++++++++------------------------
> >  xen/arch/x86/mm.c             | 16 -----------
> >  xen/include/xen/mm.h          |  1 -
> >  3 files changed, 16 insertions(+), 52 deletions(-)
> > 
> > diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
> > index 5724883d8c..ad4a074391 100644
> > --- a/xen/arch/x86/hvm/dom0_build.c
> > +++ b/xen/arch/x86/hvm/dom0_build.c
> > @@ -278,33 +278,6 @@ static int __init 
> > pvh_setup_vmx_realmode_helpers(struct domain *d)
> >      return 0;
> >  }
> >  
> > -/* Assign the low 1MB to Dom0. */
> > -static void __init pvh_steal_low_ram(struct domain *d, unsigned long start,
> > -                                     unsigned long nr_pages)
> > -{
> > -    unsigned long mfn;
> > -
> > -    ASSERT(start + nr_pages <= PFN_DOWN(MB(1)));
> > -
> > -    for ( mfn = start; mfn < start + nr_pages; mfn++ )
> > -    {
> > -        struct page_info *pg = mfn_to_page(_mfn(mfn));
> > -        int rc;
> > -
> > -        rc = unshare_xen_page_with_guest(pg, dom_io);
> > -        if ( rc )
> > -        {
> > -            printk("Unable to unshare Xen mfn %#lx: %d\n", mfn, rc);
> > -            continue;
> > -        }
> > -
> > -        share_xen_page_with_guest(pg, d, SHARE_rw);
> > -        rc = guest_physmap_add_entry(d, _gfn(mfn), _mfn(mfn), 0, 
> > p2m_ram_rw);
> > -        if ( rc )
> > -            printk("Unable to add mfn %#lx to p2m: %d\n", mfn, rc);
> > -    }
> > -}
> > -
> >  static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages)
> >  {
> >      struct e820entry *entry, *entry_guest;
> > @@ -420,16 +393,24 @@ static int __init pvh_setup_p2m(struct domain *d)
> 
> 
> Somewhere above the hunk you modified, there is a comment saying "Memory
> below 1MB is identity mapped". Don't you need to change that as well?
> Otherwise first 1MB still 1:1 maps to 1MB machine memory in guest p2m.

Non-RAM regions are still identity mapped.

Thanks, Roger.

_______________________________________________
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®.