aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/irq.c
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2011-11-03 17:27:38 +0100
committerJan Beulich <jbeulich@suse.com>2011-11-03 17:27:38 +0100
commit792920245b119b7ff8decef93bfaa84b21e0e8bb (patch)
tree863853df497d14a445c6f40fadc49caba9f15e2f /xen/common/irq.c
parentbbff299b86323c76f0d8ec593e7ea98368e6ea77 (diff)
downloadxen-792920245b119b7ff8decef93bfaa84b21e0e8bb.tar.gz
xen-792920245b119b7ff8decef93bfaa84b21e0e8bb.tar.bz2
xen-792920245b119b7ff8decef93bfaa84b21e0e8bb.zip
IRQ: allocate CPU masks dynamically
This includes delaying the initialization of dynamically created IRQs until their actual first use and some further elimination of uses of struct irq_cfg. Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
Diffstat (limited to 'xen/common/irq.c')
-rw-r--r--xen/common/irq.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/xen/common/irq.c b/xen/common/irq.c
new file mode 100644
index 0000000000..83761505f0
--- /dev/null
+++ b/xen/common/irq.c
@@ -0,0 +1,28 @@
+#include <xen/config.h>
+#include <xen/irq.h>
+
+int init_one_irq_desc(struct irq_desc *desc)
+{
+ int err;
+
+ if (irq_desc_initialized(desc))
+ return 0;
+
+ if ( !alloc_cpumask_var(&desc->affinity) )
+ return -ENOMEM;
+
+ desc->status = IRQ_DISABLED;
+ desc->handler = &no_irq_type;
+ spin_lock_init(&desc->lock);
+ cpumask_setall(desc->affinity);
+ INIT_LIST_HEAD(&desc->rl_link);
+
+ err = arch_init_one_irq_desc(desc);
+ if ( err )
+ {
+ free_cpumask_var(desc->affinity);
+ desc->handler = NULL;
+ }
+
+ return err;
+}