From 2ef1438900dc552b0040bedde8740ddf8f95cfbc Mon Sep 17 00:00:00 2001 From: Jim Date: Thu, 18 Aug 2011 10:10:28 -0400 Subject: [PATCH] Updated some comments. Still some confusion about PTLB re: IOTLB. --- em.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/em.c b/em.c index e75054f..6c4ebc0 100644 --- a/em.c +++ b/em.c @@ -6068,13 +6068,11 @@ d_liot: /* 000044 */ TRACE(T_INST, " invalidated STLB index %d\n", utempa); mapva(ea, RP, RACC, &access); TRACE(T_INST, " loaded STLB for %o/%o\n", ea>>16, ea&0xffff); - - /* invalidate the instruction translation cache mechanism */ - invalidate_brp(); goto fetch; d_ptlb: /* 000064 */ + /* XXX: What about the IOTLB? Should it be purged too? */ TRACE(T_FLOW, " PTLB\n"); RESTRICT(); utempl = *(unsigned int *)(crs+L); @@ -6089,10 +6087,12 @@ d_itlb: /* 000615 */ RESTRICT(); utempl = *(unsigned int *)(crs+L); - /* NOTE: Primos substitutes an ITLB loop for PTLB, and the ITLB - segno is 1, ie, it looks like using segment 1 invalidates all - pages that match, ignoring segment number?? Instead of doing - that, we purge the STLB whenever address 1/0 is invalidated. */ + /* NOTE: on older systems w/o PTLB, Primos substitutes an ITLB loop + for PTLB and the ITLB segno is 1, ie, it looks like using segment + 1 invalidates all pages that match, ignoring segment number?? + Instead of doing that, we purge the STLB whenever address 1/0 is + invalidated. + */ if (utempl == 0x10000) { for (utempa = 0; utempa < STLBENTS; utempa++) @@ -6105,9 +6105,6 @@ d_itlb: /* 000615 */ if (((utempl >> 16) & 07777) < 4) gvp->iotlb[(utempl >> 10) & 0xFF].valid = 0; } - - /* invalidate the instruction translation cache mechanism */ - invalidate_brp(); goto fetch;