@@ -582,6 +582,7 @@ int apic_get_interrupt(DeviceState *d)
{
APICState *s = DO_UPCAST(APICState, busdev.qdev, d);
int intno;
+ int tpr;
/* if the APIC is installed or enabled, we let the 8259 handle the
IRQs */
@@ -594,8 +595,10 @@ int apic_get_interrupt(DeviceState *d)
intno = get_highest_priority_int(s->irr);
if (intno < 0)
return -1;
- if (s->tpr && intno <= s->tpr)
+ tpr = s->tpr >> 4;
+ if (tpr && (intno >> 4) <= tpr) {
return s->spurious_vec & 0xff;
+ }
reset_bit(s->irr, intno);
set_bit(s->isr, intno);
apic_update_irq(s);