target-sparc: on UA2005 don't deliver Interrupt_level_n IRQs in hypervisor mode

As described in Chapter 5.7.6 of the UltraSPARC Architecture 2005,
outstanding disrupting exceptions that are destined for privileged mode can only
cause a trap when the virtual processor is in nonprivileged or privileged mode and
PSTATE.ie = 1. At all other times, they are held pending.

Backports commit 1a2aefae6627170fdee689b394a65f76080c068a from qemu
This commit is contained in:
Artyom Tarasenko 2018-03-01 20:39:18 -05:00 committed by Lioncash
parent f486053ae0
commit 926247a35e
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -736,8 +736,9 @@ static inline int cpu_interrupts_enabled(CPUSPARCState *env1)
if (env1->psret != 0) if (env1->psret != 0)
return 1; return 1;
#else #else
if (env1->pstate & PS_IE) if ((env1->pstate & PS_IE) && !cpu_hypervisor_mode(env1)) {
return 1; return 1;
}
#endif #endif
return 0; return 0;