This brings performance back in line with the three-level case (approx 0.2% slowdown). Thanks for finding this. Robin On Thu, Nov 17, 2005 at 01:38:42AM -0800, Chen, Kenneth W wrote: > >From source code inspection, I think there is a bug with 4 level > page table with vhpt_miss handler. In the code path of rechecking > page table entry against previously read value after tlb insertion, > *pte value in register r18 was overwritten with value newly read > from pud pointer, render the check of new *pte against previous > *pte completely wrong. Though the bug is none fatal and the penalty > is to purge the entry and retry. For functional correctness, it > should be fixed. The fix is to use a different register so new > *pud don't trash *pte. (btw, the comments in the cmp statement is > wrong as well, which I will address in the next patch). > > Signed-off-by: Ken Chen <kenneth.w.chen@intel.com> > > --- ./arch/ia64/kernel/ivt.S.orig 2005-11-16 23:35:27.086799703 -0800 > +++ ./arch/ia64/kernel/ivt.S 2005-11-17 00:14:51.247903555 -0800 > @@ -209,13 +209,13 @@ ENTRY(vhpt_miss) > ld8 r25=[r21] // read L4 entry again > ld8 r26=[r17] // read L3 PTE again > #ifdef CONFIG_PGTABLE_4 > - ld8 r18=[r28] // read L2 entry again > + ld8 r19=[r28] // read L2 entry again > #endif > cmp.ne p6,p7=r0,r0 > ;; > cmp.ne.or.andcm p6,p7=r26,r20 // did L3 entry change > #ifdef CONFIG_PGTABLE_4 > - cmp.ne.or.andcm p6,p7=r29,r18 // did L4 PTE change > + cmp.ne.or.andcm p6,p7=r19,r29 // did L4 PTE change > #endif > mov r27=PAGE_SHIFT<<2 > ;; > > > - > To unsubscribe from this list: send the line "unsubscribe linux-ia64" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html - To unsubscribe from this list: send the line "unsubscribe linux-ia64" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.htmlReceived on Fri Nov 18 05:52:09 2005
This archive was generated by hypermail 2.1.8 : 2005-11-18 05:52:18 EST