diff options
Diffstat (limited to 'src/arch/sparc/interrupts.hh')
-rw-r--r-- | src/arch/sparc/interrupts.hh | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/arch/sparc/interrupts.hh b/src/arch/sparc/interrupts.hh index 879cd1825..99ddb4919 100644 --- a/src/arch/sparc/interrupts.hh +++ b/src/arch/sparc/interrupts.hh @@ -108,9 +108,11 @@ enum interrupts_t { if (hpstate & HPSTATE::hpriv) { if (ie) { if (interrupts[hstick_match]) { - interrupts[hstick_match] = false; - --numPosted; - return new HstickMatch; + if (tc->readMiscReg(MISCREG_HINTP) & 1) { + interrupts[hstick_match] = false; + --numPosted; + return new HstickMatch; + } } if (interrupts[interrupt_vector]) { interrupts[interrupt_vector] = false; @@ -118,9 +120,13 @@ enum interrupts_t { //HAVEN'T IMPLed THIS YET return NoFault; } + } else { + if (interrupts[hstick_match]) { + return NoFault; + } + } } else { - if (interrupts[trap_level_zero]) { if ((pstate & HPSTATE::tlz) && (tc->readMiscReg(MISCREG_TL) == 0)) { interrupts[trap_level_zero] = false; @@ -129,9 +135,11 @@ enum interrupts_t { } } if (interrupts[hstick_match]) { - interrupts[hstick_match] = false; - --numPosted; - return new HstickMatch; + if (tc->readMiscReg(MISCREG_HINTP) & 1) { + interrupts[hstick_match] = false; + --numPosted; + return new HstickMatch; + } } if (ie) { if (interrupts[cpu_mondo]) { |