Hi Dennis, [auto build test ERROR on percpu/for-next] [also build test ERROR on v4.13-rc1 next-20170714] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Dennis-Zhou/percpu-replace-percpu-area-map-allocator-with-bitmap-allocator/20170716-103337 base: https://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git for-next config: ia64-allmodconfig (attached as .config) compiler: ia64-linux-gcc (GCC) 6.2.0 reproduce: wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=ia64 All errors (new ones prefixed by >>): arch/ia64/mm/discontig.c: In function 'setup_per_cpu_areas': >> arch/ia64/mm/discontig.c:218:10: error: 'PERCPU_MODULE_RSERVE' undeclared (first use in this function) PERCPU_MODULE_RSERVE); ^~~~~~~~~~~~~~~~~~~~ arch/ia64/mm/discontig.c:218:10: note: each undeclared identifier is reported only once for each function it appears in vim +/PERCPU_MODULE_RSERVE +218 arch/ia64/mm/discontig.c 174 175 #ifdef CONFIG_SMP 176 /** 177 * setup_per_cpu_areas - setup percpu areas 178 * 179 * Arch code has already allocated and initialized percpu areas. All 180 * this function has to do is to teach the determined layout to the 181 * dynamic percpu allocator, which happens to be more complex than 182 * creating whole new ones using helpers. 183 */ 184 void __init setup_per_cpu_areas(void) 185 { 186 struct pcpu_alloc_info *ai; 187 struct pcpu_group_info *uninitialized_var(gi); 188 unsigned int *cpu_map; 189 void *base; 190 unsigned long base_offset; 191 unsigned int cpu; 192 ssize_t static_size, reserved_size, dyn_size; 193 int node, prev_node, unit, nr_units, rc; 194 195 ai = pcpu_alloc_alloc_info(MAX_NUMNODES, nr_cpu_ids); 196 if (!ai) 197 panic("failed to allocate pcpu_alloc_info"); 198 cpu_map = ai->groups[0].cpu_map; 199 200 /* determine base */ 201 base = (void *)ULONG_MAX; 202 for_each_possible_cpu(cpu) 203 base = min(base, 204 (void *)(__per_cpu_offset[cpu] + __per_cpu_start)); 205 base_offset = (void *)__per_cpu_start - base; 206 207 /* build cpu_map, units are grouped by node */ 208 unit = 0; 209 for_each_node(node) 210 for_each_possible_cpu(cpu) 211 if (node == node_cpuid[cpu].nid) 212 cpu_map[unit++] = cpu; 213 nr_units = unit; 214 215 /* set basic parameters */ 216 static_size = __per_cpu_end - __per_cpu_start; 217 reserved_size = pcpu_align_reserved_region(static_size, > 218 PERCPU_MODULE_RSERVE); 219 dyn_size = PERCPU_PAGE_SIZE - static_size - reserved_size; 220 if (dyn_size < 0) 221 panic("percpu area overflow static=%zd reserved=%zd\n", 222 static_size, reserved_size); 223 224 ai->static_size = static_size; 225 ai->reserved_size = reserved_size; 226 ai->dyn_size = dyn_size; 227 ai->unit_size = PERCPU_PAGE_SIZE; 228 ai->atom_size = PAGE_SIZE; 229 ai->alloc_size = PERCPU_PAGE_SIZE; 230 231 /* 232 * CPUs are put into groups according to node. Walk cpu_map 233 * and create new groups at node boundaries. 234 */ 235 prev_node = -1; 236 ai->nr_groups = 0; 237 for (unit = 0; unit < nr_units; unit++) { 238 cpu = cpu_map[unit]; 239 node = node_cpuid[cpu].nid; 240 241 if (node == prev_node) { 242 gi->nr_units++; 243 continue; 244 } 245 prev_node = node; 246 247 gi = &ai->groups[ai->nr_groups++]; 248 gi->nr_units = 1; 249 gi->base_offset = __per_cpu_offset[cpu] + base_offset; 250 gi->cpu_map = &cpu_map[unit]; 251 } 252 253 rc = pcpu_setup_first_chunk(ai, base); 254 if (rc) 255 panic("failed to setup percpu area (err=%d)", rc); 256 257 pcpu_free_alloc_info(ai); 258 } 259 #endif 260 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Attachment:
.config.gz
Description: application/gzip