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-changelog

[Xen-changelog] [xen-unstable] [IA64] Updating collision chain length in

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Updating collision chain length in VHPT is not necessary
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 03 Mar 2008 07:30:13 -0800
Delivery-date: Mon, 03 Mar 2008 07:31:33 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1204142939 25200
# Node ID daf39fc8038a92d35d677e915822c4e8b02a3066
# Parent  f97a0b6152c3ce0c5a0428d729be27d02e4eabe1
[IA64] Updating collision chain length in VHPT is not necessary

Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
---
 xen/arch/ia64/vmx/vmx_ivt.S |   26 ++++--------
 xen/arch/ia64/vmx/vtlb.c    |   93 ++++++++++++++++++--------------------------
 xen/include/asm-ia64/vmmu.h |   11 -----
 3 files changed, 50 insertions(+), 80 deletions(-)

diff -r f97a0b6152c3 -r daf39fc8038a xen/arch/ia64/vmx/vmx_ivt.S
--- a/xen/arch/ia64/vmx/vmx_ivt.S       Tue Feb 26 10:12:04 2008 -0700
+++ b/xen/arch/ia64/vmx/vmx_ivt.S       Wed Feb 27 13:08:59 2008 -0700
@@ -181,25 +181,22 @@ vmx_itlb_loop:
     // Swap the first entry with the entry found in the collision chain
     // to speed up next hardware search (and keep LRU).
     // In comments 1 stands for the first entry and 2 for the found entry.
+    ld8 r29 = [r28] // Read tag of 1
+    dep r22 = -1,r24,63,1    // set ti=1 of 2 (to disable it during the swap)
+    ;;
     ld8 r25 = [r17] // Read value of 2
     ld8 r27 = [r18] // Read value of 1
-    ld8 r29 = [r28] // Read tag of 1
-    dep r22 = -1,r24,63,1    // set ti=1 of 2 (to disable it during the swap)
-    ;;
     st8 [r16] = r29, VLE_ITIR_OFFSET - VLE_TITAG_OFFSET // Write tag of 2
     st8 [r28] = r22, VLE_ITIR_OFFSET - VLE_TITAG_OFFSET // Write tag of 1
-    extr.u r19 = r27, 56, 4 // Extract collision chain length
     mf
     ;;
     ld8 r29 = [r16] // read itir of 2
     ld8 r22 = [r28] // read itir of 1
-    dep r27 = r0, r27, 56, 4 // Clear collision chain length for 2
-    dep r25 = r19, r25, 56, 4 // Write collision chain length for 1
+    st8 [r18] = r25 // Write value of 1
+    st8 [r17] = r27 // Write value of 2
     ;;
     st8 [r16] = r22 // Write itir of 2
     st8 [r28] = r29, VLE_TITAG_OFFSET - VLE_ITIR_OFFSET // write itir of 1
-    st8 [r18] = r25 // Write value of 1
-    st8 [r17] = r27 // Write value of 2
     ;;
     st8.rel [r28] = r24 // Write tag of 1 (with ti=0)
     // Insert the translation entry
@@ -264,25 +261,22 @@ vmx_dtlb_loop:
 (p7)mov r17 = r23;
 (p7)br.sptk vmx_dtlb_loop
     ;;
+    ld8 r29 = [r28]
+    dep r22 = -1,r24,63,1    //set ti=1
+    ;;
     ld8 r25 = [r17]
     ld8 r27 = [r18]
-    ld8 r29 = [r28]
-    dep r22 = -1,r24,63,1    //set ti=1
-    ;;
     st8 [r16] = r29, VLE_ITIR_OFFSET - VLE_TITAG_OFFSET
     st8 [r28] = r22, VLE_ITIR_OFFSET - VLE_TITAG_OFFSET
-    extr.u r19 = r27, 56, 4
     mf
     ;;
     ld8 r29 = [r16]
     ld8 r22 = [r28]
-    dep r27 = r0, r27, 56, 4
-    dep r25 = r19, r25, 56, 4
+    st8 [r18] = r25
+    st8 [r17] = r27
     ;;
     st8 [r16] = r22
     st8 [r28] = r29, VLE_TITAG_OFFSET - VLE_ITIR_OFFSET
-    st8 [r18] = r25
-    st8 [r17] = r27
     ;;
     st8.rel [r28] = r24 
     itc.d r25
diff -r f97a0b6152c3 -r daf39fc8038a xen/arch/ia64/vmx/vtlb.c
--- a/xen/arch/ia64/vmx/vtlb.c  Tue Feb 26 10:12:04 2008 -0700
+++ b/xen/arch/ia64/vmx/vtlb.c  Wed Feb 27 13:08:59 2008 -0700
@@ -112,25 +112,19 @@ static thash_data_t *__vtr_lookup(VCPU *
     return NULL;
 }
 
-static void thash_recycle_cch(thash_cb_t *hcb, thash_data_t *hash)
-{
-    thash_data_t *p, *q;
-    int i = 0;
-     
-    p = hash;
-    for (i = 0; i < MAX_CCN_DEPTH; i++) {
-        p = p->next;
-    }
-    q = hash->next;
-    hash->len = 0;
+static void thash_recycle_cch(thash_cb_t *hcb, thash_data_t *hash,
+                              thash_data_t *tail)
+{
+    thash_data_t *head = hash->next;
+
     hash->next = 0;
-    p->next = hcb->cch_freelist;
-    hcb->cch_freelist = q;
+    tail->next = hcb->cch_freelist;
+    hcb->cch_freelist = head;
 }
 
 static void vmx_vhpt_insert(thash_cb_t *hcb, u64 pte, u64 itir, u64 ifa)
 {
-    u64 tag;
+    u64 tag, len;
     ia64_rr rr;
     thash_data_t *head, *cch;
 
@@ -139,39 +133,35 @@ static void vmx_vhpt_insert(thash_cb_t *
     head = (thash_data_t *)ia64_thash(ifa);
     tag = ia64_ttag(ifa);
 
-    /* Find a free (ie invalid) entry.  */
-    cch = head;
-    while (cch) {    
-        if (INVALID_VHPT(cch))
-            break;
-        cch = cch->next;
-    }
-    if (cch) {
+    if (!INVALID_VHPT(head)) {
+        /* Find a free (ie invalid) entry.  */
+        len = 0;
+        cch = head;
+        do {
+            ++len;
+            if (cch->next == NULL) {
+                if (len >= MAX_CCN_DEPTH) {
+                    thash_recycle_cch(hcb, head, cch);
+                    cch = cch_alloc(hcb);
+                } else {
+                    cch = __alloc_chain(hcb);
+                }
+                cch->next = head->next;
+                head->next = cch;
+                break;
+            }
+            cch = cch->next;
+        } while (!INVALID_VHPT(cch));
+
         /* As we insert in head, copy head.  */
-        if (cch != head) {
-            local_irq_disable();
-            cch->page_flags = head->page_flags;
-            cch->itir = head->itir;
-            cch->etag = head->etag;
-            head->ti = 1;
-            local_irq_enable();
-        }
-    } else {
-        if (head->len >= MAX_CCN_DEPTH) {
-            thash_recycle_cch(hcb, head);
-            cch = cch_alloc(hcb);
-        } else {
-            cch = __alloc_chain(hcb);
-        }
         local_irq_disable();
-        *cch = *head;
+        cch->page_flags = head->page_flags;
+        cch->itir = head->itir;
+        cch->etag = head->etag;
         head->ti = 1;
-        head->next = cch;
-        head->len = cch->len + 1;
-        cch->len = 0;
         local_irq_enable();
     }
-    //here head is invalid
+    /* here head is invalid. */
     wmb();
     head->page_flags=pte;
     head->itir = rr.ps << 2;
@@ -263,8 +253,6 @@ thash_data_t * vhpt_lookup(u64 va)
         hash->itir = head->itir;
         head->itir = itir;
 
-        head->len = hash->len;
-        hash->len = 0;
         return head;
     }
     return hash;
@@ -387,7 +375,6 @@ void thash_recycle_cch_all(thash_cb_t *h
     head = hcb->hash;
     num = (hcb->hash_sz/sizeof(thash_data_t));
     do {
-        head->len = 0;
         head->next = 0;
         head++;
         num--;
@@ -419,7 +406,7 @@ static thash_data_t *__alloc_chain(thash
  */
 static void vtlb_insert(VCPU *v, u64 pte, u64 itir, u64 va)
 {
-    thash_data_t *hash_table, *cch;
+    thash_data_t *hash_table, *cch, *tail;
     /* int flag; */
     ia64_rr vrr;
     /* u64 gppn, ppns, ppne; */
@@ -432,20 +419,21 @@ static void vtlb_insert(VCPU *v, u64 pte
     vrr.ps = itir_ps(itir);
     VMX(v, psbits[va >> 61]) |= (1UL << vrr.ps);
     hash_table = vtlb_thash(hcb->pta, va, vrr.rrval, &tag);
+    len = 0;
     cch = hash_table;
-    while (cch) {
+    do {
         if (INVALID_TLB(cch)) {
-            len = cch->len;
             cch->page_flags = pte;
-            cch->len = len;
             cch->itir = itir;
             cch->etag = tag;
             return;
         }
+        ++len;
+        tail = cch;
         cch = cch->next;
-    }
-    if (hash_table->len >= MAX_CCN_DEPTH) {
-        thash_recycle_cch(hcb, hash_table);
+    } while(cch);
+    if (len >= MAX_CCN_DEPTH) {
+        thash_recycle_cch(hcb, hash_table, tail);
         cch = cch_alloc(hcb);
     }
     else {
@@ -457,7 +445,6 @@ static void vtlb_insert(VCPU *v, u64 pte
     cch->next = hash_table->next;
     wmb();
     hash_table->next = cch;
-    hash_table->len += 1;
     return;
 }
 
diff -r f97a0b6152c3 -r daf39fc8038a xen/include/asm-ia64/vmmu.h
--- a/xen/include/asm-ia64/vmmu.h       Tue Feb 26 10:12:04 2008 -0700
+++ b/xen/include/asm-ia64/vmmu.h       Wed Feb 27 13:08:59 2008 -0700
@@ -70,17 +70,6 @@ typedef struct thash_data {
             u64 ed   :  1; // 52
             u64 ig1  :  3; // 53-63
         };
-        struct {
-            u64 __rv1 : 53;     // 0-52
-            u64 contiguous : 1; //53
-            u64 tc : 1;         // 54 TR or TC
-            u64 cl : 1;         // 55 I side or D side cache line
-            u64 len  :  4;      // 56-59
-            u64 io  : 1;       // 60 entry is for io or not
-            u64 nomap : 1;      // 61 entry cann't be inserted into machine 
TLB.
-            u64 checked : 1;    // 62 for VTLB/VHPT sanity check
-            u64 invalid : 1;    // 63 invalid entry
-        };
         u64 page_flags;
     };                  // same for VHPT and TLB
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] Updating collision chain length in VHPT is not necessary, Xen patchbot-unstable <=