From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36214) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YfGl4-0007QW-TV for qemu-devel@nongnu.org; Mon, 06 Apr 2015 19:48:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YfGl3-00087L-Oz for qemu-devel@nongnu.org; Mon, 06 Apr 2015 19:48:46 -0400 Received: from mail-pd0-x22b.google.com ([2607:f8b0:400e:c02::22b]:33881) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YfGl3-00087C-Hq for qemu-devel@nongnu.org; Mon, 06 Apr 2015 19:48:45 -0400 Received: by pdbqa5 with SMTP id qa5so2442253pdb.1 for ; Mon, 06 Apr 2015 16:48:44 -0700 (PDT) From: James Sullivan Date: Mon, 6 Apr 2015 17:45:34 -0600 Message-Id: <1428363937-19003-3-git-send-email-sullivan.james.f@gmail.com> In-Reply-To: <1428363937-19003-1-git-send-email-sullivan.james.f@gmail.com> References: <1428363937-19003-1-git-send-email-sullivan.james.f@gmail.com> Subject: [Qemu-devel] [PATCH v2 RESEND 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 , jan.kiszka@siemens.com, 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.4