WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 6/9] xen/apic: identity map gsi->irqs

To: Ingo Molnar <mingo@xxxxxxx>
Subject: [Xen-devel] [PATCH 6/9] xen/apic: identity map gsi->irqs
From: Jeremy Fitzhardinge <jeremy@xxxxxxxx>
Date: Fri, 13 Feb 2009 17:12:04 -0800
Cc: "Jeremy Fitzhardinge \(none\)" <jeremy@f9-builder>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Ian Campbell <Ian.Campbell@xxxxxxxxxx>, the arch/x86 maintainers <x86@xxxxxxxxxx>, Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>, Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>, Yinghai Lu <yinghai@xxxxxxxxxx>
Delivery-date: Fri, 13 Feb 2009 17:16:17 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <5b0148b366eaa87072ab261f71c4c545be8e607f.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx>
In-reply-to: <cover.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <cover.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx> <cover.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx> <3c7db30686056c9b86cc61ef50dd5572de868512.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx> <3e46dae897fd5620f50b4cca9272969f5546aa88.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx> <79724b71f4b8ef1fb65ea246dde2e3e1344b2a43.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx> <cbcff9ab54a2189156077c81c706fc30ba84344c.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx> <5b0148b366eaa87072ab261f71c4c545be8e607f.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx>
References: <cover.1234573847.git.jeremy.fitzhardinge@xxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
From: Jeremy Fitzhardinge <jeremy@f9-builder.(none)>

Reserve the lower irq range for use for hardware interrupts so we
can identity-map them.

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
---
 drivers/xen/events.c |   23 +++++++++++++++++------
 1 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index 81726e8..3477998 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -31,6 +31,7 @@
 #include <asm/ptrace.h>
 #include <asm/irq.h>
 #include <asm/idle.h>
+#include <asm/io_apic.h>
 #include <asm/sync_bitops.h>
 #include <asm/xen/hypercall.h>
 #include <asm/xen/hypervisor.h>
@@ -40,9 +41,6 @@
 #include <xen/interface/xen.h>
 #include <xen/interface/event_channel.h>
 
-/* Leave low irqs free for identity mapping */
-#define LEGACY_IRQS    16
-
 /*
  * This lock protects updates to the following mapping and reference-count
  * arrays. The lock does not need to be acquired to read the mapping tables.
@@ -338,12 +336,24 @@ static void unmask_evtchn(int port)
        put_cpu();
 }
 
+static int get_nr_hw_irqs(void)
+{
+       int ret = 1;
+
+#ifdef CONFIG_X86_IO_APIC
+       ret = get_nr_irqs_gsi();
+#endif
+
+       return ret;
+}
+
 static int find_unbound_irq(void)
 {
        int irq;
        struct irq_desc *desc;
+       int start = get_nr_hw_irqs();
 
-       for (irq = LEGACY_IRQS; irq < nr_irqs; irq++)
+       for (irq = start; irq < nr_irqs; irq++)
                if (irq_info[irq].type == IRQT_UNBOUND)
                        break;
 
@@ -361,8 +371,8 @@ static int find_unbound_irq(void)
 
 static bool identity_mapped_irq(unsigned irq)
 {
-       /* only identity map legacy irqs */
-       return irq < LEGACY_IRQS;
+       /* identity map all the hardware irqs */
+       return irq < get_nr_hw_irqs();
 }
 
 static void pirq_unmask_notify(int irq)
@@ -531,6 +541,7 @@ int xen_allocate_pirq(unsigned gsi)
 
        if (identity_mapped_irq(gsi)) {
                irq = gsi;
+               irq_to_desc_alloc_cpu(irq, 0);
                dynamic_irq_init(irq);
        } else
                irq = find_unbound_irq();
-- 
1.6.0.6


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel