kernel/irq/irqdesc.c:206:2: error: array index in initializer exceeds array bounds

From: kbuild test robot
Date: Tue Mar 08 2016 - 03:39:58 EST


Hi Thomas,

FYI, the error/warning still remains.

tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: e2857b8f11a289ed2b61d18d0665e05c1053c446
commit: 3795de236d67a05994a1a12759db9d4dd9ffc42c genirq: Distangle kernel/irq/handle.c
date: 5 years ago
config: m68k-alldefconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
git checkout 3795de236d67a05994a1a12759db9d4dd9ffc42c
# save the attached .config to linux build tree
make.cross ARCH=m68k

All errors (new ones prefixed by >>):

In file included from include/linux/irqnr.h:10:0,
from include/linux/irq.h:22,
from kernel/irq/irqdesc.c:10:
arch/m68k/include/asm/irq.h:25:17: error: expected identifier or '(' before numeric constant
#define NR_IRQS 0
^
include/linux/irqnr.h:15:19: note: in expansion of macro 'NR_IRQS'
#define nr_irqs NR_IRQS
^
kernel/irq/irqdesc.c:36:5: note: in expansion of macro 'nr_irqs'
int nr_irqs = NR_IRQS;
^
>> kernel/irq/irqdesc.c:206:2: error: array index in initializer exceeds array bounds
[0 ... NR_IRQS-1] = {
^
kernel/irq/irqdesc.c:206:2: error: (near initialization for 'irq_desc')
kernel/irq/irqdesc.c:208:17: error: 'handle_bad_irq' undeclared here (not in a function)
.handle_irq = handle_bad_irq,
^
kernel/irq/irqdesc.c:211:2: warning: excess elements in array initializer
}
^
kernel/irq/irqdesc.c:211:2: warning: (near initialization for 'irq_desc')
kernel/irq/irqdesc.c: In function 'early_irq_init':
kernel/irq/irqdesc.c:230:28: error: 'no_irq_chip' undeclared (first use in this function)
desc[i].irq_data.chip = &no_irq_chip;
^
kernel/irq/irqdesc.c:230:28: note: each undeclared identifier is reported only once for each function it appears in
In file included from include/linux/irq.h:22:0,
from kernel/irq/irqdesc.c:10:
kernel/irq/irqdesc.c: At top level:
include/linux/irqnr.h:16:27: error: expected identifier or '(' before '&' token
#define irq_to_desc(irq) (&irq_desc[irq])
^
kernel/irq/irqdesc.c:238:18: note: in expansion of macro 'irq_to_desc'
struct irq_desc *irq_to_desc(unsigned int irq)
^
kernel/irq/irqdesc.c:254:6: error: redefinition of 'early_init_irq_lock_class'
void early_init_irq_lock_class(void)
^
In file included from include/linux/hardirq.h:8:0,
from arch/m68k/include/asm/system_mm.h:69,
from arch/m68k/include/asm/system.h:4,
from include/linux/list.h:8,
from include/linux/smp.h:11,
from include/linux/irq.h:12,
from kernel/irq/irqdesc.c:10:
include/linux/lockdep.h:430:20: note: previous definition of 'early_init_irq_lock_class' was here
static inline void early_init_irq_lock_class(void)
^
kernel/irq/irqdesc.c: In function 'early_init_irq_lock_class':
kernel/irq/irqdesc.c:256:19: warning: unused variable 'desc' [-Wunused-variable]
struct irq_desc *desc;
^
kernel/irq/irqdesc.c: At top level:
kernel/irq/irqdesc.c:264:14: error: redefinition of 'kstat_irqs_cpu'
unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
^
In file included from kernel/irq/irqdesc.c:14:0:
include/linux/kernel_stat.h:59:28: note: previous definition of 'kstat_irqs_cpu' was here
static inline unsigned int kstat_irqs_cpu(unsigned int irq, int cpu)
^

vim +206 kernel/irq/irqdesc.c

30 #else
31 static void __init init_irq_default_affinity(void)
32 {
33 }
34 #endif
35
> 36 int nr_irqs = NR_IRQS;
37 EXPORT_SYMBOL_GPL(nr_irqs);
38
39 #ifdef CONFIG_SPARSE_IRQ
40
41 static struct irq_desc irq_desc_init = {
42 .status = IRQ_DISABLED,
43 .handle_irq = handle_bad_irq,
44 .depth = 1,
45 .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc_init.lock),
46 };
47
48 void __ref init_kstat_irqs(struct irq_desc *desc, int node, int nr)
49 {
50 void *ptr;
51
52 ptr = kzalloc_node(nr * sizeof(*desc->kstat_irqs),
53 GFP_ATOMIC, node);
54
55 /*
56 * don't overwite if can not get new one
57 * init_copy_kstat_irqs() could still use old one
58 */
59 if (ptr) {
60 printk(KERN_DEBUG " alloc kstat_irqs on node %d\n", node);
61 desc->kstat_irqs = ptr;
62 }
63 }
64
65 static void init_one_irq_desc(int irq, struct irq_desc *desc, int node)
66 {
67 memcpy(desc, &irq_desc_init, sizeof(struct irq_desc));
68
69 raw_spin_lock_init(&desc->lock);
70 desc->irq_data.irq = irq;
71 #ifdef CONFIG_SMP
72 desc->irq_data.node = node;
73 #endif
74 lockdep_set_class(&desc->lock, &irq_desc_lock_class);
75 init_kstat_irqs(desc, node, nr_cpu_ids);
76 if (!desc->kstat_irqs) {
77 printk(KERN_ERR "can not alloc kstat_irqs\n");
78 BUG_ON(1);
79 }
80 if (!alloc_desc_masks(desc, node, false)) {
81 printk(KERN_ERR "can not alloc irq_desc cpumasks\n");
82 BUG_ON(1);
83 }
84 init_desc_masks(desc);
85 arch_init_chip_data(desc, node);
86 }
87
88 /*
89 * Protect the sparse_irqs:
90 */
91 DEFINE_RAW_SPINLOCK(sparse_irq_lock);
92
93 static RADIX_TREE(irq_desc_tree, GFP_ATOMIC);
94
95 static void set_irq_desc(unsigned int irq, struct irq_desc *desc)
96 {
97 radix_tree_insert(&irq_desc_tree, irq, desc);
98 }
99
100 struct irq_desc *irq_to_desc(unsigned int irq)
101 {
102 return radix_tree_lookup(&irq_desc_tree, irq);
103 }
104
105 void replace_irq_desc(unsigned int irq, struct irq_desc *desc)
106 {
107 void **ptr;
108
109 ptr = radix_tree_lookup_slot(&irq_desc_tree, irq);
110 if (ptr)
111 radix_tree_replace_slot(ptr, desc);
112 }
113
114 static struct irq_desc irq_desc_legacy[NR_IRQS_LEGACY] __cacheline_aligned_in_smp = {
115 [0 ... NR_IRQS_LEGACY-1] = {
116 .status = IRQ_DISABLED,
117 .handle_irq = handle_bad_irq,
118 .depth = 1,
119 .lock = __RAW_SPIN_LOCK_UNLOCKED(irq_desc_init.lock),
120 }
121 };
122
123 static unsigned int *kstat_irqs_legacy;
124
125 int __init early_irq_init(void)
126 {
127 struct irq_desc *desc;
128 int legacy_count;
129 int node;
130 int i;
131
132 init_irq_default_affinity();
133
134 /* initialize nr_irqs based on nr_cpu_ids */
135 arch_probe_nr_irqs();
136 printk(KERN_INFO "NR_IRQS:%d nr_irqs:%d\n", NR_IRQS, nr_irqs);
137
138 desc = irq_desc_legacy;
139 legacy_count = ARRAY_SIZE(irq_desc_legacy);
140 node = first_online_node;
141
142 /* allocate based on nr_cpu_ids */
143 kstat_irqs_legacy = kzalloc_node(NR_IRQS_LEGACY * nr_cpu_ids *
144 sizeof(int), GFP_NOWAIT, node);
145
146 irq_desc_init.irq_data.chip = &no_irq_chip;
147
148 for (i = 0; i < legacy_count; i++) {
149 desc[i].irq_data.irq = i;
150 desc[i].irq_data.chip = &no_irq_chip;
151 #ifdef CONFIG_SMP
152 desc[i].irq_data.node = node;
153 #endif
154 desc[i].kstat_irqs = kstat_irqs_legacy + i * nr_cpu_ids;
155 lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
156 alloc_desc_masks(&desc[i], node, true);
157 init_desc_masks(&desc[i]);
158 set_irq_desc(i, &desc[i]);
159 }
160
161 return arch_early_irq_init();
162 }
163
164 struct irq_desc * __ref irq_to_desc_alloc_node(unsigned int irq, int node)
165 {
166 struct irq_desc *desc;
167 unsigned long flags;
168
169 if (irq >= nr_irqs) {
170 WARN(1, "irq (%d) >= nr_irqs (%d) in irq_to_desc_alloc\n",
171 irq, nr_irqs);
172 return NULL;
173 }
174
175 desc = irq_to_desc(irq);
176 if (desc)
177 return desc;
178
179 raw_spin_lock_irqsave(&sparse_irq_lock, flags);
180
181 /* We have to check it to avoid races with another CPU */
182 desc = irq_to_desc(irq);
183 if (desc)
184 goto out_unlock;
185
186 desc = kzalloc_node(sizeof(*desc), GFP_ATOMIC, node);
187
188 printk(KERN_DEBUG " alloc irq_desc for %d on node %d\n", irq, node);
189 if (!desc) {
190 printk(KERN_ERR "can not alloc irq_desc\n");
191 BUG_ON(1);
192 }
193 init_one_irq_desc(irq, desc, node);
194
195 set_irq_desc(irq, desc);
196
197 out_unlock:
198 raw_spin_unlock_irqrestore(&sparse_irq_lock, flags);
199
200 return desc;
201 }
202
203 #else /* !CONFIG_SPARSE_IRQ */
204
205 struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = {
> 206 [0 ... NR_IRQS-1] = {
207 .status = IRQ_DISABLED,
208 .handle_irq = handle_bad_irq,
209 .depth = 1,

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: Binary data