]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/xen/events.c
xen: dynamically allocate irq & event structures
[karo-tx-linux.git] / drivers / xen / events.c
index 1bb51e459ab27018345f745eb645c906579d409f..19a93297e8902e7731d7c1e077ae58891da4ba1b 100644 (file)
@@ -28,6 +28,7 @@
 #include <linux/string.h>
 #include <linux/bootmem.h>
 #include <linux/slab.h>
+#include <linux/irqnr.h>
 
 #include <asm/desc.h>
 #include <asm/ptrace.h>
@@ -97,11 +98,9 @@ struct irq_info
 };
 #define PIRQ_NEEDS_EOI (1 << 0)
 
-static struct irq_info irq_info[NR_IRQS];
+static struct irq_info *irq_info;
 
-static int evtchn_to_irq[NR_EVENT_CHANNELS] = {
-       [0 ... NR_EVENT_CHANNELS-1] = -1
-};
+static int *evtchn_to_irq;
 struct cpu_evtchn_s {
        unsigned long bits[NR_EVENT_CHANNELS/BITS_PER_LONG];
 };
@@ -527,7 +526,7 @@ static int find_irq_by_gsi(unsigned gsi)
 {
        int irq;
 
-       for (irq = 0; irq < NR_IRQS; irq++) {
+       for (irq = 0; irq < nr_irqs; irq++) {
                struct irq_info *info = info_for_irq(irq);
 
                if (info == NULL || info->type != IRQT_PIRQ)
@@ -1267,7 +1266,12 @@ void __init xen_init_IRQ(void)
 
        cpu_evtchn_mask_p = kcalloc(nr_cpu_ids, sizeof(struct cpu_evtchn_s),
                                    GFP_KERNEL);
-       BUG_ON(cpu_evtchn_mask_p == NULL);
+       irq_info = kcalloc(nr_irqs, sizeof(*irq_info), GFP_KERNEL);
+
+       evtchn_to_irq = kcalloc(NR_EVENT_CHANNELS, sizeof(*evtchn_to_irq),
+                                   GFP_KERNEL);
+       for (i = 0; i < NR_EVENT_CHANNELS; i++)
+               evtchn_to_irq[i] = -1;
 
        init_evtchn_cpu_bindings();