mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-21 03:12:58 +02:00
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:
10
stack.c
10
stack.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user