diff options
Diffstat (limited to 'kernel/irq/irqdesc.c')
-rw-r--r-- | kernel/irq/irqdesc.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 0a2a4b697bcb..239e2ae2c947 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c | |||
@@ -38,12 +38,13 @@ static void __init init_irq_default_affinity(void) | |||
38 | #ifdef CONFIG_SMP | 38 | #ifdef CONFIG_SMP |
39 | static int alloc_masks(struct irq_desc *desc, gfp_t gfp, int node) | 39 | static int alloc_masks(struct irq_desc *desc, gfp_t gfp, int node) |
40 | { | 40 | { |
41 | if (!zalloc_cpumask_var_node(&desc->irq_data.affinity, gfp, node)) | 41 | if (!zalloc_cpumask_var_node(&desc->irq_common_data.affinity, |
42 | gfp, node)) | ||
42 | return -ENOMEM; | 43 | return -ENOMEM; |
43 | 44 | ||
44 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 45 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
45 | if (!zalloc_cpumask_var_node(&desc->pending_mask, gfp, node)) { | 46 | if (!zalloc_cpumask_var_node(&desc->pending_mask, gfp, node)) { |
46 | free_cpumask_var(desc->irq_data.affinity); | 47 | free_cpumask_var(desc->irq_common_data.affinity); |
47 | return -ENOMEM; | 48 | return -ENOMEM; |
48 | } | 49 | } |
49 | #endif | 50 | #endif |
@@ -52,11 +53,13 @@ static int alloc_masks(struct irq_desc *desc, gfp_t gfp, int node) | |||
52 | 53 | ||
53 | static void desc_smp_init(struct irq_desc *desc, int node) | 54 | static void desc_smp_init(struct irq_desc *desc, int node) |
54 | { | 55 | { |
55 | desc->irq_data.node = node; | 56 | cpumask_copy(desc->irq_common_data.affinity, irq_default_affinity); |
56 | cpumask_copy(desc->irq_data.affinity, irq_default_affinity); | ||
57 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 57 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
58 | cpumask_clear(desc->pending_mask); | 58 | cpumask_clear(desc->pending_mask); |
59 | #endif | 59 | #endif |
60 | #ifdef CONFIG_NUMA | ||
61 | desc->irq_common_data.node = node; | ||
62 | #endif | ||
60 | } | 63 | } |
61 | 64 | ||
62 | #else | 65 | #else |
@@ -70,12 +73,13 @@ static void desc_set_defaults(unsigned int irq, struct irq_desc *desc, int node, | |||
70 | { | 73 | { |
71 | int cpu; | 74 | int cpu; |
72 | 75 | ||
76 | desc->irq_common_data.handler_data = NULL; | ||
77 | desc->irq_common_data.msi_desc = NULL; | ||
78 | |||
73 | desc->irq_data.common = &desc->irq_common_data; | 79 | desc->irq_data.common = &desc->irq_common_data; |
74 | desc->irq_data.irq = irq; | 80 | desc->irq_data.irq = irq; |
75 | desc->irq_data.chip = &no_irq_chip; | 81 | desc->irq_data.chip = &no_irq_chip; |
76 | desc->irq_data.chip_data = NULL; | 82 | desc->irq_data.chip_data = NULL; |
77 | desc->irq_data.handler_data = NULL; | ||
78 | desc->irq_data.msi_desc = NULL; | ||
79 | irq_settings_clr_and_set(desc, ~0, _IRQ_DEFAULT_INIT_FLAGS); | 83 | irq_settings_clr_and_set(desc, ~0, _IRQ_DEFAULT_INIT_FLAGS); |
80 | irqd_set(&desc->irq_data, IRQD_IRQ_DISABLED); | 84 | irqd_set(&desc->irq_data, IRQD_IRQ_DISABLED); |
81 | desc->handle_irq = handle_bad_irq; | 85 | desc->handle_irq = handle_bad_irq; |
@@ -121,7 +125,7 @@ static void free_masks(struct irq_desc *desc) | |||
121 | #ifdef CONFIG_GENERIC_PENDING_IRQ | 125 | #ifdef CONFIG_GENERIC_PENDING_IRQ |
122 | free_cpumask_var(desc->pending_mask); | 126 | free_cpumask_var(desc->pending_mask); |
123 | #endif | 127 | #endif |
124 | free_cpumask_var(desc->irq_data.affinity); | 128 | free_cpumask_var(desc->irq_common_data.affinity); |
125 | } | 129 | } |
126 | #else | 130 | #else |
127 | static inline void free_masks(struct irq_desc *desc) { } | 131 | static inline void free_masks(struct irq_desc *desc) { } |
@@ -343,7 +347,7 @@ int generic_handle_irq(unsigned int irq) | |||
343 | 347 | ||
344 | if (!desc) | 348 | if (!desc) |
345 | return -EINVAL; | 349 | return -EINVAL; |
346 | generic_handle_irq_desc(irq, desc); | 350 | generic_handle_irq_desc(desc); |
347 | return 0; | 351 | return 0; |
348 | } | 352 | } |
349 | EXPORT_SYMBOL_GPL(generic_handle_irq); | 353 | EXPORT_SYMBOL_GPL(generic_handle_irq); |