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-changelog

[Xen-changelog] [xen-unstable] x86/IRQ: eliminate irq_vector[]

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86/IRQ: eliminate irq_vector[]
From: Xen patchbot-unstable <patchbot@xxxxxxx>
Date: Fri, 11 Nov 2011 15:11:09 +0000
Delivery-date: Fri, 11 Nov 2011 07:11:19 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jan Beulich <jbeulich@xxxxxxxx>
# Date 1321001260 -3600
# Node ID 6534da595d695a4f2af12a64e46fb06219a0e4bc
# Parent  d0bbe0622d1d8db2d11b722322287945d16d5982
x86/IRQ: eliminate irq_vector[]

The vector is already being tracked in struct irq_desc's arch.vector
member, so there's no real need for a second place where this to get
stored. The only caveat is that legacy vectors (used for interrupts
handled through the 8259) must be special cased to not prevent non-
legacy vectors from being assigned.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Acked-by: Keir Fraser <keir@xxxxxxx>
Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---


diff -r d0bbe0622d1d -r 6534da595d69 xen/arch/x86/io_apic.c
--- a/xen/arch/x86/io_apic.c    Thu Nov 10 11:12:35 2011 +0000
+++ b/xen/arch/x86/io_apic.c    Fri Nov 11 09:47:40 2011 +0100
@@ -452,10 +452,10 @@
     spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
-static void __eoi_IO_APIC_irq(unsigned int irq)
+static void __eoi_IO_APIC_irq(struct irq_desc *desc)
 {
-    struct irq_pin_list *entry = irq_2_pin + irq;
-    unsigned int pin, vector = IO_APIC_VECTOR(irq);
+    struct irq_pin_list *entry = irq_2_pin + desc->irq;
+    unsigned int pin, vector = desc->arch.vector;
 
     for (;;) {
         pin = entry->pin;
@@ -468,11 +468,11 @@
     }
 }
 
-static void eoi_IO_APIC_irq(unsigned int irq)
+static void eoi_IO_APIC_irq(struct irq_desc *desc)
 {
     unsigned long flags;
     spin_lock_irqsave(&ioapic_lock, flags);
-    __eoi_IO_APIC_irq(irq);
+    __eoi_IO_APIC_irq(desc);
     spin_unlock_irqrestore(&ioapic_lock, flags);
 }
 
@@ -1200,7 +1200,7 @@
         struct irq_pin_list *entry = irq_2_pin + i;
         if (entry->pin < 0)
             continue;
-        printk(KERN_DEBUG "IRQ%d ", IO_APIC_VECTOR(i));
+        printk(KERN_DEBUG "IRQ%d ", irq_to_desc(i)->arch.vector);
         for (;;) {
             printk("-> %d:%d", entry->apic, entry->pin);
             if (!entry->next)
@@ -1621,7 +1621,7 @@
  * operation to prevent an edge-triggered interrupt escaping meanwhile.
  * The idea is from Manfred Spraul.  --macro
  */
-    i = IO_APIC_VECTOR(desc->irq);
+    i = desc->arch.vector;
 
     v = apic_read(APIC_TMR + ((i & ~0x1f) >> 1));
 
@@ -1653,12 +1653,12 @@
         {
             if ( !(desc->status & (IRQ_DISABLED|IRQ_MOVE_PENDING)) )
             {
-                eoi_IO_APIC_irq(desc->irq);
+                eoi_IO_APIC_irq(desc);
                 return;
             }
 
             mask_IO_APIC_irq(desc);
-            eoi_IO_APIC_irq(desc->irq);
+            eoi_IO_APIC_irq(desc);
             if ( (desc->status & IRQ_MOVE_PENDING) &&
                  !io_apic_level_ack_pending(desc->irq) )
                 move_masked_irq(desc);
@@ -1689,7 +1689,7 @@
  * operation to prevent an edge-triggered interrupt escaping meanwhile.
  * The idea is from Manfred Spraul.  --macro
  */
-    i = IO_APIC_VECTOR(desc->irq);
+    i = desc->arch.vector;
 
     /* Manually EOI the old vector if we are moving to the new */
     if ( vector && i != vector )
@@ -1752,7 +1752,7 @@
     int irq;
     /* Xen: This is way simpler than the Linux implementation. */
     for (irq = 0; platform_legacy_irq(irq); irq++)
-        if (IO_APIC_IRQ(irq) && !IO_APIC_VECTOR(irq))
+        if (IO_APIC_IRQ(irq) && !irq_to_vector(irq))
             make_8259A_irq(irq);
 }
 
diff -r d0bbe0622d1d -r 6534da595d69 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c        Thu Nov 10 11:12:35 2011 +0000
+++ b/xen/arch/x86/irq.c        Fri Nov 11 09:47:40 2011 +0100
@@ -40,7 +40,6 @@
 
 vmask_t global_used_vector_map;
 
-u8 __read_mostly *irq_vector;
 struct irq_desc __read_mostly *irq_desc = NULL;
 
 static DECLARE_BITMAP(used_vectors, NR_VECTORS);
@@ -134,8 +133,6 @@
         set_bit(vector, desc->arch.used_vectors);
     }
     desc->arch.used = IRQ_USED;
-    if (IO_APIC_IRQ(irq))
-        irq_vector[irq] = vector;
     return 0;
 }
 
@@ -283,7 +280,11 @@
     BUG_ON(irq >= nr_irqs || irq < 0);
 
     if (IO_APIC_IRQ(irq))
-        vector = irq_vector[irq];
+    {
+        vector = irq_to_desc(irq)->arch.vector;
+        if (vector >= FIRST_LEGACY_VECTOR && vector <= LAST_LEGACY_VECTOR)
+            vector = 0;
+    }
     else if (MSI_IRQ(irq))
         vector = irq_to_desc(irq)->arch.vector;
     else
@@ -325,9 +326,8 @@
         this_cpu(vector_irq)[vector] = -1;
 
     irq_desc = xzalloc_array(struct irq_desc, nr_irqs);
-    irq_vector = xzalloc_array(u8, nr_irqs_gsi);
     
-    if ( !irq_desc || !irq_vector )
+    if ( !irq_desc )
         return -ENOMEM;
 
     for (irq = 0; irq < nr_irqs_gsi; irq++) {
@@ -420,7 +420,7 @@
     vmask_t *irq_used_vectors = NULL;
 
     old_vector = irq_to_vector(irq);
-    if (old_vector) {
+    if (old_vector > 0) {
         cpumask_and(&tmp_mask, mask, &cpu_online_map);
         if (cpumask_intersects(&tmp_mask, desc->arch.cpu_mask)) {
             desc->arch.vector = old_vector;
@@ -479,7 +479,7 @@
         /* Found one! */
         current_vector = vector;
         current_offset = offset;
-        if (old_vector) {
+        if (old_vector > 0) {
             desc->arch.move_in_progress = 1;
             cpumask_copy(desc->arch.old_cpu_mask, desc->arch.cpu_mask);
             desc->arch.old_vector = desc->arch.vector;
@@ -495,9 +495,6 @@
                || (desc->arch.used_vectors == irq_used_vectors));
         desc->arch.used_vectors = irq_used_vectors;
 
-        if (IO_APIC_IRQ(irq))
-            irq_vector[irq] = vector;
-
         if ( desc->arch.used_vectors )
         {
             ASSERT(!test_bit(vector, desc->arch.used_vectors));
diff -r d0bbe0622d1d -r 6534da595d69 xen/arch/x86/smpboot.c
--- a/xen/arch/x86/smpboot.c    Thu Nov 10 11:12:35 2011 +0000
+++ b/xen/arch/x86/smpboot.c    Fri Nov 11 09:47:40 2011 +0100
@@ -998,7 +998,7 @@
      * IRQ0 must be given a fixed assignment and initialized,
      * because it's used before the IO-APIC is set up.
      */
-    irq_vector[0] = FIRST_HIPRIORITY_VECTOR;
+    irq_to_desc(0)->arch.vector = FIRST_HIPRIORITY_VECTOR;
 
     /*
      * Also ensure serial interrupts are high priority. We do not
@@ -1008,7 +1008,6 @@
     {
         if ( (irq = serial_irq(seridx)) < 0 )
             continue;
-        irq_vector[irq] = FIRST_HIPRIORITY_VECTOR + seridx + 1;
         per_cpu(vector_irq, cpu)[FIRST_HIPRIORITY_VECTOR + seridx + 1] = irq;
         irq_to_desc(irq)->arch.vector = FIRST_HIPRIORITY_VECTOR + seridx + 1;
         cpumask_copy(irq_to_desc(irq)->arch.cpu_mask, &cpu_online_map);
diff -r d0bbe0622d1d -r 6534da595d69 xen/include/asm-x86/irq.h
--- a/xen/include/asm-x86/irq.h Thu Nov 10 11:12:35 2011 +0000
+++ b/xen/include/asm-x86/irq.h Fri Nov 11 09:47:40 2011 +0100
@@ -14,7 +14,6 @@
 #define IO_APIC_IRQ(irq)    (platform_legacy_irq(irq) ?    \
                             (1 << (irq)) & io_apic_irqs : \
                             (irq) < nr_irqs_gsi)
-#define IO_APIC_VECTOR(irq) (irq_vector[irq])
 
 #define MSI_IRQ(irq)       ((irq) >= nr_irqs_gsi && (irq) < nr_irqs)
 
@@ -48,8 +47,6 @@
 typedef int vector_irq_t[NR_VECTORS];
 DECLARE_PER_CPU(vector_irq_t, vector_irq);
 
-extern u8 *irq_vector;
-
 extern bool_t opt_noirqbalance;
 
 #define OPT_IRQ_VECTOR_MAP_DEFAULT 0 /* Do the default thing  */

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] x86/IRQ: eliminate irq_vector[], Xen patchbot-unstable <=