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

Re: [Xen-devel] [v6][PATCH 1/2] xen:x86:mm:p2m: introduce set_identity_p2m_entry



> From: Jan Beulich [mailto:JBeulich@xxxxxxxx]
> Sent: Thursday, July 31, 2014 11:42 PM
> 
> >>> On 01.08.14 at 00:29, <kevin.tian@xxxxxxxxx> wrote:
> >>  From: Chen, Tiejun
> >> Sent: Tuesday, July 29, 2014 6:36 PM
> >>
> >> Its used conveniently to create RMRR mapping in shared EPT case.
> >>
> >> Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx>
> >> ---
> >>  xen/arch/x86/mm/p2m.c     | 29 +++++++++++++++++++++++++++++
> >>  xen/include/asm-x86/p2m.h |  3 +++
> >>  2 files changed, 32 insertions(+)
> >>
> >> v6:
> >>
> >> * Refactor set_identity_p2m_entry to make sense
> >>
> >> v5:
> >>
> >> * Rename this function as set_identity_p2m_entry()
> >> * Get mfn directly inside set_identity_p2m_entry()
> >>
> >> v4:
> >>
> >> * new patch to combine get and set together to create RMRR mapping.
> >>
> >> diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
> >> index 642ec28..06bed7a 100644
> >> --- a/xen/arch/x86/mm/p2m.c
> >> +++ b/xen/arch/x86/mm/p2m.c
> >> @@ -858,6 +858,35 @@ int set_mmio_p2m_entry(struct domain *d,
> unsigned
> >> long gfn, mfn_t mfn)
> >>      return set_typed_p2m_entry(d, gfn, mfn, p2m_mmio_direct);
> >>  }
> >>
> >> +int set_identity_p2m_entry(struct domain *d, unsigned long gfn)
> >> +{
> >> +    p2m_type_t p2mt;
> >> +    p2m_access_t a;
> >> +    mfn_t mfn;
> >> +    struct p2m_domain *p2m = p2m_get_hostp2m(d);
> >> +    int ret = -EBUSY;
> >> +
> >> +    gfn_lock(p2m, gfn, 0);
> >> +
> >> +    mfn = p2m->get_entry(p2m, gfn, &p2mt, &a, 0, NULL);
> >> +
> >> +    if ( !mfn_valid(mfn) )
> >> +        ret = p2m_set_entry(p2m, gfn, _mfn(gfn), PAGE_ORDER_4K,
> >> p2m_mmio_direct,
> >> +                            p2m_access_rw);
> >> +    else if ( mfn_x(mfn) == gfn &&
> >> +              p2mt == p2m_mmio_direct &&
> >> +              a == p2m_access_rw )
> >> +        ret = 0;
> >> +    else
> >> +        printk(XENLOG_G_WARNING
> >> +               "Cannot identity map d%d:%lx, already mapped
> to %lx.\n",
> >> +               d->domain_id, gfn, mfn_x(mfn));
> >
> > what about !mfn_valid but the GFN has been used for emulated MMIOs?
> w/o
> > a guest e820 view you can't avoid overlapping by just looking at mfn...
> 
> What good would looking at the guest's E820 table do here? Both
> emulated MMIO ranges and the (supposed) exclusion ranges needed
> for the RMRR would just be holes.
> 

You are right. E820 is memory oriented so we don't know whether the hole
has been used for emulated MMIO ranges...

Thanks
Kevin

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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