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

RE: [Xen-ia64-devel] metaphysical mode


  • To: "Xu, Anthony" <anthony.xu@xxxxxxxxx>, <xen-ia64-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Magenheimer, Dan (HP Labs Fort Collins)" <dan.magenheimer@xxxxxx>
  • Date: Thu, 1 Dec 2005 07:35:22 -0800
  • Delivery-date: Thu, 01 Dec 2005 15:35:49 +0000
  • List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
  • Thread-index: AcX2CYSRKFg65Y42SMaLa72Va1Q7MgAN5HWAAA97qPA=
  • Thread-topic: [Xen-ia64-devel] metaphysical mode

> Is below scenario possible?

I agree that it appears theoretically possible.  Do you
have a reproducible test case that demonstrates it
happening (e.g. causes the domain to panic where the
faulting address is near ar.bsp)?  

If not, a reasonable solution for now might be to change
the panic_domain message to something like "see
xen/arch/ia64/technote/metaphysical" and add this
file with your explanation and proposed fix.  Then
we could revisit it when we have more functionality
working and a good regression suite to test it to
ensure other bugs don't get introduced by the change.
I am hesitant to fix theoretical bugs that might
introduce instability when so many other things
need to be done.

> -----Original Message-----
> From: Xu, Anthony [mailto:anthony.xu@xxxxxxxxx] 
> Sent: Thursday, December 01, 2005 12:17 AM
> To: Magenheimer, Dan (HP Labs Fort Collins); 
> xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
> Subject: RE: [Xen-ia64-devel] metaphysical mode
> 
> Dan,
> There definitely has idr(101) mode, when nested data tlb 
> fault or vhpt fault happen, linux will turn off psr.dt and 
> walk three level page table to get correct pte.
> Is below scenario possible?
> 1. Linux OS turn off psr.dt in nested data tlb handler, that 
> means metaphysical=1.
> 2. Linux OS walks through tree level page table using 
> physical address, 
> 3. It is possible data tlb miss happens ( machine psr dt 
> always be turned on) when linux OS walk through tree level 
> page table, then control goes to HV,
> 4. HV handles this tlb miss and "rfi" to linux OS kernel.
> 5. Guest may have his register stack frame (which may belong 
> to linux application, or linux kernel), so this "rfi" may 
> cause mandatory RSE load, if corresponding tlb is gone, 
> another data tlb miss happens.
> 6. At this time, metaphysical=1 and ifa does not belong to region 0,
> Current implementation can't handle this scenario, because 
> there are not guest psr it dt rt information.
> 
> Current implementation is,
> 
>     if (PSCB(vcpu,metaphysical_mode) && !(!is_data && region)) {
>         // dom0 may generate an uncacheable physical address (msb=1)
>         if (region && ((region != 4) || (vcpu->domain != dom0))) {
> // FIXME: This seems to happen even though it shouldn't.  
> Need to track
> // this down, but since it has been apparently harmless, just 
> flag it for now
> //          panic_domain(vcpu_regs(vcpu),
>             printk(
>              "vcpu_translate: bad physical address: %p\n",address);
>         }
>         *pteval = (address & _PAGE_PPN_MASK) | __DIRTY_BITS | 
> _PAGE_PL_2 | _PAGE_AR_RWX;
>         *itir = PAGE_SHIFT << 2;
>         phys_translate_count++;
>         return IA64_NO_FAULT;
>     }
>     else if (!region && warn_region0_address) {
>         REGS *regs = vcpu_regs(vcpu);
>         unsigned long viip = PSCB(vcpu,iip);
>         unsigned long vipsr = PSCB(vcpu,ipsr);
>         unsigned long iip = regs->cr_iip;
>         unsigned long ipsr = regs->cr_ipsr;
>         printk("vcpu_translate: bad address %p, viip=%p, 
> vipsr=%p, iip=%p, ipsr=%p continuing\n", address, viip, 
> vipsr, iip, ipsr);
>     }
> 
> If we have it dt rt information, the implementation will be 
> simple and clear.
> if( is metaphysical){
>       if(isr.x==1){           // instruction tlb miss  
>               if( is region 0)
>                               handle it;
>               else
>                       Unimplemented address space fault;
>       }
>       Else (isr.rs==1){    // caused by mandatory RSE access
>               If( is region 0)
>                               Handle it;
>               Else
>                       Unimplemented address space fault;
>       }
>       Else{   // caused by memory access
>               If( is region 0 or 4)
>                               Handle it;
>               Else
>                       Unimplemented address space fault;
>       }
> }
> 
> Thanks
> -Anthony
> 
> >-----Original Message-----
> >From: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
> >[mailto:xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx] On 
> Behalf Of Magenheimer,
> >Dan (HP Labs Fort Collins)
> >Sent: 2005å12æ1æ 7:55
> >To: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
> >Subject: [Xen-ia64-devel] metaphysical mode
> >
> >Anthony's recent proposed patch reminded me of some
> >documentation about metaphysical mode that I had written
> >some time ago.  I thought I had sent this out, but
> >could not find it on the list, so I cleaned it up
> >a bit and am sending it out now.  This isn't intended
> >to imply that the design/implementation is cast in stone,
> >just to describe the intent.
> >
> >Dan
> >
> >===============
> >
> >Paravirtualization allows us to slightly modify an architecture
> >to disallow or change the semantics for certain operations in
> >order to obtain a substantial performance gain.  One usage of
> >paravirtualization on Xen/ia64 involves the usage of physical
> >addressing:
> >
> >There are three translation bits in IPF's psr to determine whether
> >an address to be used is physical or virtual, one bit each to
> >control instruction access, data access, and register stack
> >access, respectively psr.it, psr.dt, and psr.rt.  Some
> >combinations of these bits can be very difficult to
> >fully virtualize with adequate performance; an IPF
> >OS executes physical accesses frequently enough that trapping
> >every physical access (and possibly emulating physical
> >instruction accesses) is too slow.  Ideally, we would like
> >to allow guest physical addresses to be translated to machine
> >addresses using the existing virtual addressing hardware
> >and mechanisms.
> >
> >The resulting implementation on Xen/ia64 (heavily leveraged
> >from the HP vBlades project) is called metaphysical memory.
> >When a guest enters "metaphysical mode", the physical psr
> >it/dt/rt bits remain set (virtual addressing) and region
> >register 0 is changed to use a per-guest reserved region id.
> >
> >The implementation of metaphysical mode has some ramifications.
> >When metaphysical=1:
> >- all guest accesses in region 0 are accesses to (meta)physical
> >  memory
> >- guest data accesses outside of region 0 are also accesses
> >  to metaphysical memory, but since no guest will be assigned
> >  physical memory with an address that large, all data accesses
> >  outside of region 0 will result in a [TBD] fault
> >- instruction data accesses outside of region 0 are executed
> >  as if they are virtual accesses
> >- a guest may not set all combinations of the psr it/dt/rt bits.
> >  Attempts to set these combinations results in a Reserved
> >  register/field fault [note: not currently implemented]
> >
> >     idr     <--psr.it, psr.dt, psr.rt
> >     000     metaphysical mode
> >     001     not permitted
> >     010     not permitted
> >     011     not currently permitted [should it be?]
> >     100     metaphysical mode
> >     101     not permitted
> >     110     not permitted
> >     111     virtual mode (metaphysical=0)
> >
> >- reads of psr.it/dt/rt (mov psr.l= instruction) may not reflect
> >  the bits that were last set
> >- delivery of an interruption does not change the state of
> >  metaphysical mode and ipsr.it/dt/rt bits are set to [???]
> >
> >_______________________________________________
> >Xen-ia64-devel mailing list
> >Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
> >http://lists.xensource.com/xen-ia64-devel
> 
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel

 


Rackspace

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