[IA64] Fix wrong access to irq_desc[] in iosapic_register_intr().
authorKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Wed, 1 Aug 2007 12:18:44 +0000 (21:18 +0900)
committerTony Luck <tony.luck@intel.com>
Wed, 1 Aug 2007 18:57:59 +0000 (11:57 -0700)
In error path we must unlock irq_desc[irq].lock before we change
'irq'.

Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/kernel/iosapic.c

index 5f6d98e866ea40a76bc8226052bec58b670c774d..cfe4654838f445423455979bca494d0e8fd1394a 100644 (file)
@@ -794,8 +794,9 @@ iosapic_register_intr (unsigned int gsi,
        err = register_intr(gsi, irq, IOSAPIC_LOWEST_PRIORITY,
                            polarity, trigger);
        if (err < 0) {
+               spin_unlock(&irq_desc[irq].lock);
                irq = err;
-               goto unlock_all;
+               goto unlock_iosapic_lock;
        }
 
        /*
@@ -811,7 +812,7 @@ iosapic_register_intr (unsigned int gsi,
               gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
               (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
               cpu_logical_id(dest), dest, irq_to_vector(irq));
- unlock_all:
+
        spin_unlock(&irq_desc[irq].lock);
  unlock_iosapic_lock:
        spin_unlock_irqrestore(&iosapic_lock, flags);