Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 224685c0 authored by Kenji Kaneshige's avatar Kenji Kaneshige Committed by Tony Luck
Browse files

[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: default avatarKenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 216fcd29
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -794,8 +794,9 @@ iosapic_register_intr (unsigned int gsi,
	err = register_intr(gsi, irq, IOSAPIC_LOWEST_PRIORITY,
	err = register_intr(gsi, irq, IOSAPIC_LOWEST_PRIORITY,
			    polarity, trigger);
			    polarity, trigger);
	if (err < 0) {
	if (err < 0) {
		spin_unlock(&irq_desc[irq].lock);
		irq = err;
		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"),
	       gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
	       (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
	       (polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
	       cpu_logical_id(dest), dest, irq_to_vector(irq));
	       cpu_logical_id(dest), dest, irq_to_vector(irq));
 unlock_all:

	spin_unlock(&irq_desc[irq].lock);
	spin_unlock(&irq_desc[irq].lock);
 unlock_iosapic_lock:
 unlock_iosapic_lock:
	spin_unlock_irqrestore(&iosapic_lock, flags);
	spin_unlock_irqrestore(&iosapic_lock, flags);