tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/mm head: e9d8c61557687b7126101e9550bdf243223f0d8f commit: 2ff6ddf19c0ec40633bd14d8fe28a289816bd98d [3/8] x86/mm/tlb: Leave lazy TLB mode at page table free time config: arm-axm55xx_defconfig (attached as .config) compiler: arm-linux-gnueabi-gcc (Debian 7.2.0-11) 7.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout 2ff6ddf19c0ec40633bd14d8fe28a289816bd98d # save the attached .config to linux build tree GCC_VERSION=7.2.0 make.cross ARCH=arm All errors (new ones prefixed by >>): mm/memory.c: In function 'tlb_remove_table_smp_sync': >> mm/memory.c:339:2: error: implicit declaration of function 'tlb_flush_remove_tables_local'; did you mean 'tlb_remove_table'? [-Werror=implicit-function-declaration] tlb_flush_remove_tables_local(mm); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tlb_remove_table mm/memory.c: In function 'tlb_table_flush': >> mm/memory.c:372:2: error: implicit declaration of function 'tlb_flush_remove_tables'; did you mean 'tlb_remove_table'? [-Werror=implicit-function-declaration] tlb_flush_remove_tables(tlb->mm); ^~~~~~~~~~~~~~~~~~~~~~~ tlb_remove_table cc1: some warnings being treated as errors vim +339 mm/memory.c 328 329 static void tlb_remove_table_smp_sync(void *arg) 330 { 331 struct mm_struct __maybe_unused *mm = arg; 332 /* 333 * On most architectures this does nothing. Simply delivering the 334 * interrupt is enough to prevent races with software page table 335 * walking like that done in get_user_pages_fast. 336 * 337 * See the comment near struct mmu_table_batch. 338 */ > 339 tlb_flush_remove_tables_local(mm); 340 } 341 342 static void tlb_remove_table_one(void *table, struct mmu_gather *tlb) 343 { 344 /* 345 * This isn't an RCU grace period and hence the page-tables cannot be 346 * assumed to be actually RCU-freed. 347 * 348 * It is however sufficient for software page-table walkers that rely on 349 * IRQ disabling. See the comment near struct mmu_table_batch. 350 */ 351 smp_call_function(tlb_remove_table_smp_sync, tlb->mm, 1); 352 __tlb_remove_table(table); 353 } 354 355 static void tlb_remove_table_rcu(struct rcu_head *head) 356 { 357 struct mmu_table_batch *batch; 358 int i; 359 360 batch = container_of(head, struct mmu_table_batch, rcu); 361 362 for (i = 0; i < batch->nr; i++) 363 __tlb_remove_table(batch->tables[i]); 364 365 free_page((unsigned long)batch); 366 } 367 368 void tlb_table_flush(struct mmu_gather *tlb) 369 { 370 struct mmu_table_batch **batch = &tlb->batch; 371 > 372 tlb_flush_remove_tables(tlb->mm); 373 374 if (*batch) { 375 call_rcu_sched(&(*batch)->rcu, tlb_remove_table_rcu); 376 *batch = NULL; 377 } 378 } 379 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation