From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55117) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaUJM-00064e-C3 for qemu-devel@nongnu.org; Tue, 24 Mar 2015 15:16:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YaUJL-0001ka-Ab for qemu-devel@nongnu.org; Tue, 24 Mar 2015 15:16:24 -0400 Received: from mail-pa0-x22e.google.com ([2607:f8b0:400e:c03::22e]:35879) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaUJL-0001kI-3m for qemu-devel@nongnu.org; Tue, 24 Mar 2015 15:16:23 -0400 Received: by padcy3 with SMTP id cy3so2428402pad.3 for ; Tue, 24 Mar 2015 12:16:22 -0700 (PDT) From: James Sullivan Date: Tue, 24 Mar 2015 13:13:43 -0600 Message-Id: <1427224426-9025-3-git-send-email-sullivan.james.f@gmail.com> In-Reply-To: <1427224426-9025-1-git-send-email-sullivan.james.f@gmail.com> References: <1427224426-9025-1-git-send-email-sullivan.james.f@gmail.com> Subject: [Qemu-devel] [PATCH v2 2/5] apic: Implement low priority arbitration for IRQ delivery List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, James Sullivan , mst@redhat.com 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 --- 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.3