Change abs_stack_addr() so it uses SIE_TRANSLATE_ADDR() instead of

SIE_TRANSLATE(). This will return "protect" variable so it can be tested
for HOST protections and then use GUEST TXA for any interrupts. Otherwise,
the HOST protection is handled by logical_to_abs() which will report
protection with HOST TXA. - Paul Leisy


git-svn-id: file:///home/jj/hercules.svn/trunk@658 956126f8-22a0-4046-8f4a-272fa8102e63
This commit is contained in:
Paul Leisy
2002-02-13 19:28:28 +00:00
parent dad1b8b9a3
commit f8d2e21098

29
stack.c
View File

@@ -471,7 +471,34 @@ U16 xcode; /* Exception code */
if (aaddr >= regs->mainsize)
ARCH_DEP(program_interrupt) (regs, PGM_ADDRESSING_EXCEPTION);
SIE_TRANSLATE(&aaddr, acctype, regs);
#if defined(_FEATURE_SIE)
if(regs->sie_state && !regs->sie_pref)
{
U32 sie_stid;
U16 sie_xcode;
int sie_private;
if (SIE_TRANSLATE_ADDR (regs->sie_mso + aaddr,
USE_PRIMARY_SPACE,
regs->hostregs, ACCTYPE_SIE, &aaddr, &sie_xcode,
&sie_private, &protect, &sie_stid))
(regs->sie_hostpi) (regs->hostregs, sie_xcode);
/* Convert host real address to host absolute address */
aaddr = APPLY_PREFIXING (aaddr, regs->hostregs->PX);
}
/* Check for HOST Page protection */
if (acctype == ACCTYPE_WRITE && protect)
{
#ifdef FEATURE_SUPPRESSION_ON_PROTECTION
regs->TEA = (vaddr & STORAGE_KEY_PAGEMASK)
| TEA_PROT_AP | TEA_ST_HOME;
regs->excarid = 0;
#endif /*FEATURE_SUPPRESSION_ON_PROTECTION*/
ARCH_DEP(program_interrupt) (regs, PGM_PROTECTION_EXCEPTION);
}
#endif /*defined(_FEATURE_SIE)*/
/* Set the reference and change bits in the storage key */
STORAGE_KEY(aaddr) |= STORKEY_REF;