TRAP would set change bit when TSA crossed page and got rupt. Changed

it so change bit only set when both pages accessed fine. - Paul Leisy


git-svn-id: file:///home/jj/hercules.svn/trunk@281 956126f8-22a0-4046-8f4a-272fa8102e63
This commit is contained in:
Paul Leisy
2001-09-13 17:50:15 +00:00
parent 072f32fa69
commit 969dc85093

10
stack.c
View File

@@ -183,6 +183,10 @@ int i;
tsao = lastbyte & PAGEFRAME_PAGEMASK;
tsaa2 = ARCH_DEP(abs_trap_addr) (tsao, regs, ACCTYPE_WRITE);
}
STORAGE_KEY(tsaa1) |= STORKEY_CHANGE;
if (tsaa1 != tsaa2)
STORAGE_KEY(tsaa2) |= STORKEY_CHANGE;
#if defined(FEATURE_ESAME)
/* Special operation exception if P == 0 and EA == 1 */
@@ -351,7 +355,7 @@ U16 xcode; /* Exception code */
{
protect = 0; /* clear ALE, PTE protect flag */
/* Check Key protection for store */
if (acctype == ACCTYPE_WRITE
if (acctype == ACCTYPE_WRITE
&& ((STORAGE_KEY(aaddr) & STORKEY_KEY) != regs->psw.pkey))
goto trap_prot;
@@ -361,10 +365,8 @@ U16 xcode; /* Exception code */
&& ((STORAGE_KEY(aaddr) & STORKEY_KEY) != regs->psw.pkey))
goto trap_prot;
}
/* Set the reference and change bits in the storage key */
/* Set the reference bits in the storage key */
STORAGE_KEY(aaddr) |= STORKEY_REF;
if (acctype == ACCTYPE_WRITE)
STORAGE_KEY(aaddr) |= STORKEY_CHANGE;
/* Return absolute address */
return aaddr;