Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Jun 2010 19:09:08 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r209351 - projects/ppc64/sys/powerpc/aim
Message-ID:  <201006191909.o5JJ98ML069183@svn.freebsd.org>

index | next in thread | raw e-mail

Author: nwhitehorn
Date: Sat Jun 19 19:09:08 2010
New Revision: 209351
URL: http://svn.freebsd.org/changeset/base/209351

Log:
  Fix a bug where the kernel could panic for large numbers of spilled
  mappings due to looking in the wrong PVO bucket.

Modified:
  projects/ppc64/sys/powerpc/aim/mmu_oea64.c

Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim/mmu_oea64.c	Sat Jun 19 18:52:37 2010	(r209350)
+++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c	Sat Jun 19 19:09:08 2010	(r209351)
@@ -2784,7 +2784,7 @@ moea64_pte_insert(u_int ptegidx, struct 
 	if (pt->pte_hi & LPTE_HID)
 		pvo_pt->pte_hi |= LPTE_HID;
 
-	LIST_FOREACH(pvo, &moea64_pvo_table[ptegidx], pvo_olink) {
+	LIST_FOREACH(pvo, &moea64_pvo_table[pteg_bktidx], pvo_olink) {
 		if (pvo->pvo_pte.lpte.pte_hi == pt->pte_hi) {
 			moea64_pte_unset(pt, &pvo->pvo_pte.lpte, pvo->pvo_vpn);
 			PVO_PTEGIDX_CLR(pvo);
@@ -2793,6 +2793,19 @@ moea64_pte_insert(u_int ptegidx, struct 
 		}
 	}
 
+	if (pvo->pvo_pte.lpte.pte_hi != pt->pte_hi) {
+		/* It could have landed in the secondary PTEG */
+		pteg_bktidx ^= moea64_pteg_mask;
+		LIST_FOREACH(pvo, &moea64_pvo_table[pteg_bktidx], pvo_olink) {
+			if (pvo->pvo_pte.lpte.pte_hi == pt->pte_hi) {
+				moea64_pte_unset(pt, &pvo->pvo_pte.lpte,
+				    pvo->pvo_vpn);
+				PVO_PTEGIDX_CLR(pvo);
+				moea64_pte_overflow++;
+				break;
+			}
+		}
+	}
 	KASSERT(pvo->pvo_pte.lpte.pte_hi == pt->pte_hi,
 	   ("Unable to find PVO for spilled PTE"));
 


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201006191909.o5JJ98ML069183>