Messages in this thread |  | | Date | Mon, 12 Feb 2018 08:35:57 +0800 | From | kbuild test robot <> | Subject | arch/x86/kernel/apm_32.c:2392: undefined reference to `cpuidle_poll_state_init' |
| |
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 7928b2cbe55b2a410a0f5c1f154610059c57b1b2 commit: f859422075165e32c00c8d75d63f300015cc07ae x86: PM: Make APM idle driver initialize polling state date: 5 days ago config: i386-randconfig-x074-201806 (attached as .config) compiler: gcc-7 (Debian 7.3.0-1) 7.3.0 reproduce: git checkout f859422075165e32c00c8d75d63f300015cc07ae # save the attached .config to linux build tree make ARCH=i386
All errors (new ones prefixed by >>):
arch/x86/kernel/apm_32.o: In function `apm_init': >> arch/x86/kernel/apm_32.c:2392: undefined reference to `cpuidle_poll_state_init'
vim +2392 arch/x86/kernel/apm_32.c
2256 2257 /* 2258 * Just start the APM thread. We do NOT want to do APM BIOS 2259 * calls from anything but the APM thread, if for no other reason 2260 * than the fact that we don't trust the APM BIOS. This way, 2261 * most common APM BIOS problems that lead to protection errors 2262 * etc will have at least some level of being contained... 2263 * 2264 * In short, if something bad happens, at least we have a choice 2265 * of just killing the apm thread.. 2266 */ 2267 static int __init apm_init(void) 2268 { 2269 struct desc_struct *gdt; 2270 int err; 2271 2272 dmi_check_system(apm_dmi_table); 2273 2274 if (apm_info.bios.version == 0 || machine_is_olpc()) { 2275 printk(KERN_INFO "apm: BIOS not found.\n"); 2276 return -ENODEV; 2277 } 2278 printk(KERN_INFO 2279 "apm: BIOS version %d.%d Flags 0x%02x (Driver version %s)\n", 2280 ((apm_info.bios.version >> 8) & 0xff), 2281 (apm_info.bios.version & 0xff), 2282 apm_info.bios.flags, 2283 driver_version); 2284 if ((apm_info.bios.flags & APM_32_BIT_SUPPORT) == 0) { 2285 printk(KERN_INFO "apm: no 32 bit BIOS support\n"); 2286 return -ENODEV; 2287 } 2288 2289 if (allow_ints) 2290 apm_info.allow_ints = 1; 2291 if (broken_psr) 2292 apm_info.get_power_status_broken = 1; 2293 if (realmode_power_off) 2294 apm_info.realmode_power_off = 1; 2295 /* User can override, but default is to trust DMI */ 2296 if (apm_disabled != -1) 2297 apm_info.disabled = apm_disabled; 2298 2299 /* 2300 * Fix for the Compaq Contura 3/25c which reports BIOS version 0.1 2301 * but is reportedly a 1.0 BIOS. 2302 */ 2303 if (apm_info.bios.version == 0x001) 2304 apm_info.bios.version = 0x100; 2305 2306 /* BIOS < 1.2 doesn't set cseg_16_len */ 2307 if (apm_info.bios.version < 0x102) 2308 apm_info.bios.cseg_16_len = 0; /* 64k */ 2309 2310 if (debug) { 2311 printk(KERN_INFO "apm: entry %x:%x cseg16 %x dseg %x", 2312 apm_info.bios.cseg, apm_info.bios.offset, 2313 apm_info.bios.cseg_16, apm_info.bios.dseg); 2314 if (apm_info.bios.version > 0x100) 2315 printk(" cseg len %x, dseg len %x", 2316 apm_info.bios.cseg_len, 2317 apm_info.bios.dseg_len); 2318 if (apm_info.bios.version > 0x101) 2319 printk(" cseg16 len %x", apm_info.bios.cseg_16_len); 2320 printk("\n"); 2321 } 2322 2323 if (apm_info.disabled) { 2324 pr_notice("disabled on user request.\n"); 2325 return -ENODEV; 2326 } 2327 if ((num_online_cpus() > 1) && !power_off && !smp) { 2328 pr_notice("disabled - APM is not SMP safe.\n"); 2329 apm_info.disabled = 1; 2330 return -ENODEV; 2331 } 2332 if (!acpi_disabled) { 2333 pr_notice("overridden by ACPI.\n"); 2334 apm_info.disabled = 1; 2335 return -ENODEV; 2336 } 2337 2338 /* 2339 * Set up the long jump entry point to the APM BIOS, which is called 2340 * from inline assembly. 2341 */ 2342 apm_bios_entry.offset = apm_info.bios.offset; 2343 apm_bios_entry.segment = APM_CS; 2344 2345 /* 2346 * The APM 1.1 BIOS is supposed to provide limit information that it 2347 * recognizes. Many machines do this correctly, but many others do 2348 * not restrict themselves to their claimed limit. When this happens, 2349 * they will cause a segmentation violation in the kernel at boot time. 2350 * Most BIOS's, however, will respect a 64k limit, so we use that. 2351 * 2352 * Note we only set APM segments on CPU zero, since we pin the APM 2353 * code to that CPU. 2354 */ 2355 gdt = get_cpu_gdt_rw(0); 2356 set_desc_base(&gdt[APM_CS >> 3], 2357 (unsigned long)__va((unsigned long)apm_info.bios.cseg << 4)); 2358 set_desc_base(&gdt[APM_CS_16 >> 3], 2359 (unsigned long)__va((unsigned long)apm_info.bios.cseg_16 << 4)); 2360 set_desc_base(&gdt[APM_DS >> 3], 2361 (unsigned long)__va((unsigned long)apm_info.bios.dseg << 4)); 2362 2363 proc_create("apm", 0, NULL, &apm_file_ops); 2364 2365 kapmd_task = kthread_create(apm, NULL, "kapmd"); 2366 if (IS_ERR(kapmd_task)) { 2367 pr_err("disabled - Unable to start kernel thread\n"); 2368 err = PTR_ERR(kapmd_task); 2369 kapmd_task = NULL; 2370 remove_proc_entry("apm", NULL); 2371 return err; 2372 } 2373 wake_up_process(kapmd_task); 2374 2375 if (num_online_cpus() > 1 && !smp) { 2376 printk(KERN_NOTICE 2377 "apm: disabled - APM is not SMP safe (power off active).\n"); 2378 return 0; 2379 } 2380 2381 /* 2382 * Note we don't actually care if the misc_device cannot be registered. 2383 * this driver can do its job without it, even if userspace can't 2384 * control it. just log the error 2385 */ 2386 if (misc_register(&apm_device)) 2387 printk(KERN_WARNING "apm: Could not register misc device.\n"); 2388 2389 if (HZ != 100) 2390 idle_period = (idle_period * HZ) / 100; 2391 if (idle_threshold < 100) { > 2392 cpuidle_poll_state_init(&apm_idle_driver); 2393 if (!cpuidle_register_driver(&apm_idle_driver)) 2394 if (cpuidle_register_device(&apm_cpuidle_device)) 2395 cpuidle_unregister_driver(&apm_idle_driver); 2396 } 2397 2398 return 0; 2399 } 2400
--- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation [unhandled content-type:application/gzip] |  |