Hi Jason, Thank you for the patch! Yet something to improve: [auto build test ERROR on powerpc/next] [also build test ERROR on v5.5 next-20200204] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/Jason-Yan/implement-KASLR-for-powerpc-fsl_booke-64/20200205-105837 base: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next config: powerpc-defconfig (attached as .config) compiler: powerpc64-linux-gcc (GCC) 7.5.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=7.5.0 make.cross ARCH=powerpc If you fix the issue, kindly add following tag Reported-by: kbuild test robot All errors (new ones prefixed by >>): arch/powerpc/kernel/setup_64.c: In function 'early_setup': >> arch/powerpc/kernel/setup_64.c:303:2: error: implicit declaration of function 'kaslr_early_init'; did you mean 'udbg_early_init'? [-Werror=implicit-function-declaration] kaslr_early_init(__va(dt_ptr), 0); ^~~~~~~~~~~~~~~~ udbg_early_init cc1: all warnings being treated as errors vim +303 arch/powerpc/kernel/setup_64.c 262 263 /* 264 * Early initialization entry point. This is called by head.S 265 * with MMU translation disabled. We rely on the "feature" of 266 * the CPU that ignores the top 2 bits of the address in real 267 * mode so we can access kernel globals normally provided we 268 * only toy with things in the RMO region. From here, we do 269 * some early parsing of the device-tree to setup out MEMBLOCK 270 * data structures, and allocate & initialize the hash table 271 * and segment tables so we can start running with translation 272 * enabled. 273 * 274 * It is this function which will call the probe() callback of 275 * the various platform types and copy the matching one to the 276 * global ppc_md structure. Your platform can eventually do 277 * some very early initializations from the probe() routine, but 278 * this is not recommended, be very careful as, for example, the 279 * device-tree is not accessible via normal means at this point. 280 */ 281 282 void __init early_setup(unsigned long dt_ptr) 283 { 284 static __initdata struct paca_struct boot_paca; 285 286 /* -------- printk is _NOT_ safe to use here ! ------- */ 287 288 /* Try new device tree based feature discovery ... */ 289 if (!dt_cpu_ftrs_init(__va(dt_ptr))) 290 /* Otherwise use the old style CPU table */ 291 identify_cpu(0, mfspr(SPRN_PVR)); 292 293 /* Assume we're on cpu 0 for now. Don't write to the paca yet! */ 294 initialise_paca(&boot_paca, 0); 295 setup_paca(&boot_paca); 296 fixup_boot_paca(); 297 298 /* -------- printk is now safe to use ------- */ 299 300 /* Enable early debugging if any specified (see udbg.h) */ 301 udbg_early_init(); 302 > 303 kaslr_early_init(__va(dt_ptr), 0); 304 305 udbg_printf(" -> %s(), dt_ptr: 0x%lx\n", __func__, dt_ptr); 306 307 /* 308 * Do early initialization using the flattened device 309 * tree, such as retrieving the physical memory map or 310 * calculating/retrieving the hash table size. 311 */ 312 early_init_devtree(__va(dt_ptr)); 313 314 /* Now we know the logical id of our boot cpu, setup the paca. */ 315 if (boot_cpuid != 0) { 316 /* Poison paca_ptrs[0] again if it's not the boot cpu */ 317 memset(&paca_ptrs[0], 0x88, sizeof(paca_ptrs[0])); 318 } 319 setup_paca(paca_ptrs[boot_cpuid]); 320 fixup_boot_paca(); 321 322 /* 323 * Configure exception handlers. This include setting up trampolines 324 * if needed, setting exception endian mode, etc... 325 */ 326 configure_exceptions(); 327 328 /* 329 * Configure Kernel Userspace Protection. This needs to happen before 330 * feature fixups for platforms that implement this using features. 331 */ 332 setup_kup(); 333 334 /* Apply all the dynamic patching */ 335 apply_feature_fixups(); 336 setup_feature_keys(); 337 338 early_ioremap_setup(); 339 340 /* Initialize the hash table or TLB handling */ 341 early_init_mmu(); 342 343 /* 344 * After firmware and early platform setup code has set things up, 345 * we note the SPR values for configurable control/performance 346 * registers, and use those as initial defaults. 347 */ 348 record_spr_defaults(); 349 350 /* 351 * At this point, we can let interrupts switch to virtual mode 352 * (the MMU has been setup), so adjust the MSR in the PACA to 353 * have IR and DR set and enable AIL if it exists 354 */ 355 cpu_ready_for_interrupts(); 356 357 /* 358 * We enable ftrace here, but since we only support DYNAMIC_FTRACE, it 359 * will only actually get enabled on the boot cpu much later once 360 * ftrace itself has been initialized. 361 */ 362 this_cpu_enable_ftrace(); 363 364 udbg_printf(" <- %s()\n", __func__); 365 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation