diff options
| author | Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> | 2007-08-01 08:18:44 -0400 |
|---|---|---|
| committer | Tony Luck <tony.luck@intel.com> | 2007-08-01 14:57:59 -0400 |
| commit | 224685c0d1ca5970364c9f5d4f21ea1aa64c381e (patch) | |
| tree | ef5153fedcfe7172d86a8d1d4ca5ed835ab79253 /arch | |
| parent | 216fcd29af47ab53ffd87e82139fcc4095e34d91 (diff) | |
[IA64] Fix wrong access to irq_desc[] in iosapic_register_intr().
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>
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/ia64/kernel/iosapic.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c index 5f6d98e866ea..cfe4654838f4 100644 --- a/arch/ia64/kernel/iosapic.c +++ b/arch/ia64/kernel/iosapic.c | |||
| @@ -794,8 +794,9 @@ iosapic_register_intr (unsigned int gsi, | |||
| 794 | err = register_intr(gsi, irq, IOSAPIC_LOWEST_PRIORITY, | 794 | err = register_intr(gsi, irq, IOSAPIC_LOWEST_PRIORITY, |
| 795 | polarity, trigger); | 795 | polarity, trigger); |
| 796 | if (err < 0) { | 796 | if (err < 0) { |
| 797 | spin_unlock(&irq_desc[irq].lock); | ||
| 797 | irq = err; | 798 | irq = err; |
| 798 | goto unlock_all; | 799 | goto unlock_iosapic_lock; |
| 799 | } | 800 | } |
| 800 | 801 | ||
| 801 | /* | 802 | /* |
| @@ -811,7 +812,7 @@ iosapic_register_intr (unsigned int gsi, | |||
| 811 | gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"), | 812 | gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"), |
| 812 | (polarity == IOSAPIC_POL_HIGH ? "high" : "low"), | 813 | (polarity == IOSAPIC_POL_HIGH ? "high" : "low"), |
| 813 | cpu_logical_id(dest), dest, irq_to_vector(irq)); | 814 | cpu_logical_id(dest), dest, irq_to_vector(irq)); |
| 814 | unlock_all: | 815 | |
| 815 | spin_unlock(&irq_desc[irq].lock); | 816 | spin_unlock(&irq_desc[irq].lock); |
| 816 | unlock_iosapic_lock: | 817 | unlock_iosapic_lock: |
| 817 | spin_unlock_irqrestore(&iosapic_lock, flags); | 818 | spin_unlock_irqrestore(&iosapic_lock, flags); |
