@@ -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;
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.james.f@gmail.com> --- hw/intc/apic.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-)