summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-05-23 13:28:44 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-05-30 10:16:24 -0400
commit5e152e6c4b0da84c66cad56597b42c4ecedb0448 (patch)
tree2164d6f163014aa01cdaa0d9b416e3fafb3621f6
parent5842f5768599094758931b74190cdf93641a8e35 (diff)
downloadlinux-5e152e6c4b0da84c66cad56597b42c4ecedb0448.tar.gz
linux-5e152e6c4b0da84c66cad56597b42c4ecedb0448.tar.bz2
linux-5e152e6c4b0da84c66cad56597b42c4ecedb0448.zip
xen/events: Add WARN_ON when quick lookup found invalid type.
All of the bind_XYZ_to_irq do a quick lookup to see if the event exists. And if it does, then the initialized IRQ number is returned instead of initializing a new IRQ number. This patch adds an extra logic to check that the type returned is proper one and that there is an IRQ handler setup for it. This patch has the benefit of being able to find drivers that are doing something naught. [v1: Enhanced based on Stefano's review] Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-rw-r--r--drivers/xen/events.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
index faae2f910ad2..af8b8fbd9d88 100644
--- a/drivers/xen/events.c
+++ b/drivers/xen/events.c
@@ -827,6 +827,9 @@ int bind_evtchn_to_irq(unsigned int evtchn)
handle_edge_irq, "event");
xen_irq_info_evtchn_init(irq, evtchn);
+ } else {
+ struct irq_info *info = info_for_irq(irq);
+ WARN_ON(info == NULL || info->type != IRQT_EVTCHN);
}
out:
@@ -862,6 +865,9 @@ static int bind_ipi_to_irq(unsigned int ipi, unsigned int cpu)
xen_irq_info_ipi_init(cpu, irq, evtchn, ipi);
bind_evtchn_to_cpu(evtchn, cpu);
+ } else {
+ struct irq_info *info = info_for_irq(irq);
+ WARN_ON(info == NULL || info->type != IRQT_IPI);
}
out:
@@ -939,6 +945,9 @@ int bind_virq_to_irq(unsigned int virq, unsigned int cpu)
xen_irq_info_virq_init(cpu, irq, evtchn, virq);
bind_evtchn_to_cpu(evtchn, cpu);
+ } else {
+ struct irq_info *info = info_for_irq(irq);
+ WARN_ON(info == NULL || info->type != IRQT_VIRQ);
}
out: