avoid goto

This commit is contained in:
Stanislav Shwartsman 2019-11-12 21:48:54 +00:00
parent 8d7bffa311
commit b1e9701e5c

View File

@ -893,8 +893,11 @@ Bit8u bx_local_apic_c::acknowledge_int(void)
BX_PANIC(("APIC %d acknowledged an interrupt, but INTR=0", apic_id)); BX_PANIC(("APIC %d acknowledged an interrupt, but INTR=0", apic_id));
int vector = highest_priority_int(irr); int vector = highest_priority_int(irr);
if (vector < 0) goto spurious; if (vector < 0 || (vector & 0xf0) <= get_ppr()) {
if((vector & 0xf0) <= get_ppr()) goto spurious; cpu->clear_event(BX_EVENT_PENDING_LAPIC_INTR);
return spurious_vector;
}
BX_ASSERT(get_vector(irr, vector)); BX_ASSERT(get_vector(irr, vector));
BX_DEBUG(("acknowledge_int() returning vector 0x%02x", vector)); BX_DEBUG(("acknowledge_int() returning vector 0x%02x", vector));
clear_vector(irr, vector); clear_vector(irr, vector);
@ -907,10 +910,6 @@ Bit8u bx_local_apic_c::acknowledge_int(void)
cpu->clear_event(BX_EVENT_PENDING_LAPIC_INTR); cpu->clear_event(BX_EVENT_PENDING_LAPIC_INTR);
service_local_apic(); // will set INTR again if another is ready service_local_apic(); // will set INTR again if another is ready
return vector; return vector;
spurious:
cpu->clear_event(BX_EVENT_PENDING_LAPIC_INTR);
return spurious_vector;
} }
void bx_local_apic_c::print_status(void) void bx_local_apic_c::print_status(void)