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

Re: [Xen-devel] [PATCH 08/11] x86/altp2m: add remaining support routines.



At 12:57 -0800 on 15 Jan (1421323048), Ed White wrote:
> On 01/15/2015 09:25 AM, Tim Deegan wrote:
> > Hi,
> > 
> > At 13:26 -0800 on 09 Jan (1420806398), Ed White wrote:
> >> +int
> >> +altp2mhvm_hap_nested_page_fault(struct vcpu *v, paddr_t gpa,
> >> +                                unsigned long gla, struct npfec npfec)
> >> +{
> >> +    struct domain *d = v->domain;
> >> +    struct p2m_domain *hp2m = p2m_get_hostp2m(d);
> >> +    struct p2m_domain *ap2m;
> >> +    p2m_type_t p2mt;
> >> +    p2m_access_t p2ma;
> >> +    unsigned int page_order;
> >> +    unsigned long gfn, mask;
> >> +    mfn_t mfn;
> >> +    int rv;
> >> +
> >> +    ap2m = p2m_get_altp2m(v);
> >> +
> >> +    mfn = get_gfn_type_access(ap2m, gpa >> PAGE_SHIFT, &p2mt, &p2ma,
> >> +                              0, &page_order);
> >> +    __put_gfn(ap2m, gpa >> PAGE_SHIFT);
> >> +
> >> +    if ( mfn_valid(mfn) )
> >> +    {
> >> +        /* Should #VE be emulated for this fault? */
> >> +        if ( p2mt == p2m_ram_rw_ve && !cpu_has_vmx_virt_exceptions &&
> >> +             ahvm_vcpu_emulate_ve(v) )
> >> +            return ALTP2MHVM_PAGEFAULT_DONE;
> >> +
> >> +        /* Could not handle fault here */
> >> +        gdprintk(XENLOG_INFO, "Altp2m memory access permissions failure, "
> >> +                              "no mem_event listener VCPU %d, dom %d\n",
> >> +                              v->vcpu_id, d->domain_id);
> >> +        domain_crash(v->domain);
> >> +        return ALTP2MHVM_PAGEFAULT_CONTINUE;
> >> +    }
> >> +
> >> +    mfn = get_gfn_type_access(hp2m, gpa >> PAGE_SHIFT, &p2mt, &p2ma,
> >> +                              0, &page_order);
> >> +    put_gfn(hp2m->domain, gpa >> PAGE_SHIFT);
> >> +
> >> +    if ( p2mt != p2m_ram_rw || p2ma != p2m_access_rwx )
> >> +        return ALTP2MHVM_PAGEFAULT_CONTINUE;
> > 
> > I don't follow -- surely the altp2m ought to contain everything that's
> > in the host p2m except for deliberate extra changes.  But it looks
> > like here you just bail on anything other than rwx RAM.  That's going
> > to livelock on anything that the main fault handler thinks is OK to retry.
> 
> It sounds like there must be some cases that I'm not aware of.
> 
> I've only tested Windows, and I've never seen anything other than rwx ram
> where the hardware is ever able to retry and succeed. That's why I don't
> copy anything else to the alternate p2m, because my experience has been
> that everything else can be resolved in the host p2m and its nested page
> fault handler. As I explained to Jan, if the host p2m page becomes rwx ram
> and *then* there's a retry, I copy that EPTE on the violation that the retry
> triggers and retry again.
> 
> I want to get this right. Can you tell me what I'm missing?

I think the easiest case to test would be read access to a read-only
area (e.g., I think, the in-VM BIOS).  PCI passthrough will have the
same problem with p2m_mmio_diirect mappings of BARs.

In those cases the hostp2m has a valid mapping that it expects the
guest can use, but it's not rwx.

I think there would be a similr problem with anything that mem_even
caller had marked non-execute or read-only in the host p2m.

Cheers,

Tim.


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