Currently, there is no arbitration among processors for low priority IRQ delivery. Added support for low priority arbitration to apic_bus_deliver(), using the functions introduced in [74c1222c5b579970fafdd6a8e919fbb2c88219c3] ("apic: Implement LAPIC low priority arbitration functions").
Signed-off-by: James Sullivan <sullivan.jame...@gmail.com> --- hw/intc/apic.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/hw/intc/apic.c b/hw/intc/apic.c index b372513..47d2fb1 100644 --- a/hw/intc/apic.c +++ b/hw/intc/apic.c @@ -249,22 +249,10 @@ static void apic_bus_deliver(const uint32_t *deliver_bitmask, switch (delivery_mode) { case APIC_DM_LOWPRI: - /* XXX: search for focus processor, arbitration */ - { - int i, d; - d = -1; - for(i = 0; i < MAX_APIC_WORDS; i++) { - if (deliver_bitmask[i]) { - d = i * 32 + apic_ffs_bit(deliver_bitmask[i]); - break; - } - } - if (d >= 0) { - apic_iter = local_apics[d]; - if (apic_iter) { - apic_set_irq(apic_iter, vector_num, trigger_mode); - } - } + /* XXX: search for focus processor */ + apic_iter = apic_lowest_prio(deliver_bitmask); + if (apic_iter) { + apic_set_irq(apic_iter , vector_num, trigger_mode); } return; -- 2.3.4