WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-ia64-devel

[Xen-ia64-devel] [PATCH] tlb miss handler

To: xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-ia64-devel] [PATCH] tlb miss handler
From: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Date: Thu, 26 Jan 2006 21:59:15 +0900
Delivery-date: Thu, 26 Jan 2006 13:08:08 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.4.2.1i
This patch is not for commit.  But for review, commnets.

Current itlb/dtlb miss handlers don't handle a tlb miss
in xen/ia64 identity mapping area.
Such a miss might occur because xen/ia64 enables vhpt walker
even for region 7. (Please see set_one_rr())
I haven't encountered it yet, I'm guessing so from reading code.

Vti itlb/dtlb miss handlers do it by checking psr.vm bits.
This patch is not so optimized for review,
but it should be done later.


# HG changeset patch
# User yamahata@xxxxxxxxxxxxx
# Node ID 07055de7ed1525110eefe5914847f0fc6002e232
# Parent  cfa3b96b056debee0d86249bd74fb717b43ea84b
make itlb/dtlb miss handler to handle xen/ia64 identity mapping area.
xen/ia64 enables vhpt walker for all regions unlink Linux.
So tlb misses on identity mapping area are catched by
itlb/dtlb miss handler, not alt itlb/dltb miss handler.
vmx_ivt.S already has such tweaks by checking psr.vm bit.

TODO: optimization
      tlb miss handlers are performance critical.

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>

diff -r cfa3b96b056d -r 07055de7ed15 xen/arch/ia64/xen/ivt.S
--- a/xen/arch/ia64/xen/ivt.S   Fri Jan 13 14:58:41 2006 -0600
+++ b/xen/arch/ia64/xen/ivt.S   Thu Jan 26 21:48:35 2006 +0900
@@ -245,12 +245,47 @@
        DBG_FAULT(1)
 #ifdef XEN
        VHPT_CCHAIN_LOOKUP(itlb_miss,i)
+#if VHPT_ENABLED       
+       // XXX TODO optimization
+       mov r31=pr                              // save predicates
+       mov r30=cr.ipsr
+       mov r28=cr.iip
+       mov r16=cr.ifa                          // get virtual address
+       mov r17=cr.isr                          // save predicates
+       ;;
+       extr.u r18 = r30, IA64_PSR_CPL0_BIT, 2  // extract psr.cpl
+       ;; 
+       cmp.ne p6, p0 = r0, r18                 // cpl == 0?
+(p6)   br.cond.sptk 1f
+
+       // Is the faulted iip in vmm area?
+       // check [59:58] bit
+       // 00, 11: guest
+       // 01, 10: vmm
+       extr.u r19 = r28, 58, 2
+       ;; 
+       cmp.eq p7, p0 = 0x0, r19
+(p7)   br.cond.sptk 1f
+       cmp.eq p8, p0 = 0x3, r19
+(p8)   br.cond.sptk 1f
+
+       // Is the faulted address is in the identity mapping area?
+       // 0xf000... or 0xe8000...
+       extr.u r20 = r16, 59, 5
+       ;; 
+       cmp.eq p9, p0 = 0x1e, r20 // (0xf0 >> 3) = 0x1e
+(p9)   br.cond.spnt late_alt_itlb_miss
+       cmp.eq p10, p0 = 0x1d, r20 // (0xe8 >> 3) = 0x1d
+(p10)  br.cond.spnt late_alt_itlb_miss
+1:     
+#endif
 #ifdef VHPT_GLOBAL
 //     br.cond.sptk page_fault
        br.cond.sptk fast_tlb_miss_reflect
        ;;
 #endif
-#endif
+       mov r29=b0                              // save b0
+#else
        /*
         * The ITLB handler accesses the L3 PTE via the virtually mapped linear
         * page table.  If a nested TLB miss occurs, we switch into physical
@@ -260,6 +295,7 @@
        mov r16=cr.ifa                          // get virtual address
        mov r29=b0                              // save b0
        mov r31=pr                              // save predicates
+#endif
 .itlb_fault:
        mov r17=cr.iha                          // get virtual address of L3 PTE
        movl r30=1f                             // load nested fault 
continuation point
@@ -297,12 +333,47 @@
        DBG_FAULT(2)
 #ifdef XEN
        VHPT_CCHAIN_LOOKUP(dtlb_miss,d)
+#if VHPT_ENABLED
+       // XXX TODO optimization
+       mov r31=pr                              // save predicates
+       mov r30=cr.ipsr
+       mov r28=cr.iip
+       mov r16=cr.ifa                          // get virtual address
+       mov r17=cr.isr                          // save predicates
+       ;; 
+       extr.u r18 = r30, IA64_PSR_CPL0_BIT, 2  // extract psr.cpl
+       ;; 
+       cmp.ne p6, p0 = r0, r18                 // cpl == 0?
+(p6)   br.cond.sptk 1f
+
+       // Is the faulted iip in vmm area?
+       // check [59:58] bit
+       // 00, 11: guest
+       // 01, 10: vmm
+       extr.u r19 = r28, 58, 2
+       ;; 
+       cmp.eq p7, p0 = 0x0, r19
+(p7)   br.cond.sptk 1f
+       cmp.eq p8, p0 = 0x3, r19
+(p8)   br.cond.sptk 1f
+
+       // Is the faulted address is in the identity mapping area?
+       // 0xf000... or 0xe8000...
+       extr.u r20 = r16, 59, 5
+       ;; 
+       cmp.eq p9, p0 = 0x1e, r20 // (0xf0 >> 3) = 0x1e
+(p9)   br.cond.spnt late_alt_dtlb_miss
+       cmp.eq p10, p0 = 0x1d, r20 // (0xe8 >> 3) = 0x1d
+(p10)  br.cond.spnt late_alt_dtlb_miss
+1:
+#endif 
 #ifdef VHPT_GLOBAL
 //     br.cond.sptk page_fault
        br.cond.sptk fast_tlb_miss_reflect
        ;;
 #endif
-#endif
+       mov r29=b0                              // save b0
+#else  
        /*
         * The DTLB handler accesses the L3 PTE via the virtually mapped linear
         * page table.  If a nested TLB miss occurs, we switch into physical
@@ -312,6 +383,7 @@
        mov r16=cr.ifa                          // get virtual address
        mov r29=b0                              // save b0
        mov r31=pr                              // save predicates
+#endif
 dtlb_fault:
        mov r17=cr.iha                          // get virtual address of L3 PTE
        movl r30=1f                             // load nested fault 
continuation point


-- 
yamahata

Attachment: 8603:07055de7ed15.patch
Description: Text document

_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
<Prev in Thread] Current Thread [Next in Thread>