mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-18 17:57:20 +02:00
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:
29
stack.c
29
stack.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user