Hi Kefeng, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Kefeng-Wang/mm-add-mm_counter_folio-and-mm_counter_file_folio/20231103-221846 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20231103140119.2306578-17-wangkefeng.wang%40huawei.com patch subject: [PATCH 16/18] mm: use a folio in zap_pte_range() config: um-allnoconfig (https://download.01.org/0day-ci/archive/20231104/202311040217.GgQqqwfS-lkp@xxxxxxxxx/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231104/202311040217.GgQqqwfS-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202311040217.GgQqqwfS-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): In file included from mm/memory.c:43: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from arch/um/include/asm/hardirq.h:5: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/um/include/asm/io.h:24: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 547 | val = __raw_readb(PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' 37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) | ^ In file included from mm/memory.c:43: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from arch/um/include/asm/hardirq.h:5: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/um/include/asm/io.h:24: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); | ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' 35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) | ^ In file included from mm/memory.c:43: In file included from include/linux/kernel_stat.h:9: In file included from include/linux/interrupt.h:11: In file included from include/linux/hardirq.h:11: In file included from arch/um/include/asm/hardirq.h:5: In file included from include/asm-generic/hardirq.h:17: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/um/include/asm/io.h:24: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 584 | __raw_writeb(value, PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); | ~~~~~~~~~~ ^ include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 692 | readsb(PCI_IOBASE + addr, buffer, count); | ~~~~~~~~~~ ^ include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 700 | readsw(PCI_IOBASE + addr, buffer, count); | ~~~~~~~~~~ ^ include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 708 | readsl(PCI_IOBASE + addr, buffer, count); | ~~~~~~~~~~ ^ include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 717 | writesb(PCI_IOBASE + addr, buffer, count); | ~~~~~~~~~~ ^ include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 726 | writesw(PCI_IOBASE + addr, buffer, count); | ~~~~~~~~~~ ^ include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] 735 | writesl(PCI_IOBASE + addr, buffer, count); | ~~~~~~~~~~ ^ >> mm/memory.c:1497:22: warning: variable 'page' is uninitialized when used here [-Wuninitialized] 1497 | page_remove_rmap(page, vma, false); | ^~~~ mm/memory.c:1427:20: note: initialize the variable 'page' to silence this warning 1427 | struct page *page; | ^ | = NULL 13 warnings generated. vim +/page +1497 mm/memory.c 999dad824c39ed Peter Xu 2022-05-12 1402 51c6f666fceb31 Robin Holt 2005-11-13 1403 static unsigned long zap_pte_range(struct mmu_gather *tlb, b5810039a54e5b Nicholas Piggin 2005-10-29 1404 struct vm_area_struct *vma, pmd_t *pmd, ^1da177e4c3f41 Linus Torvalds 2005-04-16 1405 unsigned long addr, unsigned long end, 97a894136f2980 Peter Zijlstra 2011-05-24 1406 struct zap_details *details) ^1da177e4c3f41 Linus Torvalds 2005-04-16 1407 { b5810039a54e5b Nicholas Piggin 2005-10-29 1408 struct mm_struct *mm = tlb->mm; d16dfc550f5326 Peter Zijlstra 2011-05-24 1409 int force_flush = 0; d559db086ff5be KAMEZAWA Hiroyuki 2010-03-05 1410 int rss[NR_MM_COUNTERS]; 97a894136f2980 Peter Zijlstra 2011-05-24 1411 spinlock_t *ptl; 5f1a19070b16c2 Steven Rostedt 2011-06-15 1412 pte_t *start_pte; 97a894136f2980 Peter Zijlstra 2011-05-24 1413 pte_t *pte; 8a5f14a2317706 Kirill A. Shutemov 2015-02-10 1414 swp_entry_t entry; d559db086ff5be KAMEZAWA Hiroyuki 2010-03-05 1415 ed6a79352cad00 Peter Zijlstra 2018-08-31 1416 tlb_change_page_size(tlb, PAGE_SIZE); e303297e6c3a7b Peter Zijlstra 2011-05-24 1417 init_rss_vec(rss); 3db82b9374ca92 Hugh Dickins 2023-06-08 1418 start_pte = pte = pte_offset_map_lock(mm, pmd, addr, &ptl); 3db82b9374ca92 Hugh Dickins 2023-06-08 1419 if (!pte) 3db82b9374ca92 Hugh Dickins 2023-06-08 1420 return addr; 3db82b9374ca92 Hugh Dickins 2023-06-08 1421 3ea277194daaea Mel Gorman 2017-08-02 1422 flush_tlb_batched_pending(mm); 6606c3e0da5360 Zachary Amsden 2006-09-30 1423 arch_enter_lazy_mmu_mode(); ^1da177e4c3f41 Linus Torvalds 2005-04-16 1424 do { c33c794828f212 Ryan Roberts 2023-06-12 1425 pte_t ptent = ptep_get(pte); bdec140a4ef8da Kefeng Wang 2023-11-03 1426 struct folio *folio = NULL; 8018db8525947c Peter Xu 2022-03-22 1427 struct page *page; 8018db8525947c Peter Xu 2022-03-22 1428 166f61b9435a1b Tobin C Harding 2017-02-24 1429 if (pte_none(ptent)) ^1da177e4c3f41 Linus Torvalds 2005-04-16 1430 continue; 51c6f666fceb31 Robin Holt 2005-11-13 1431 7b167b681013f5 Minchan Kim 2019-09-24 1432 if (need_resched()) 7b167b681013f5 Minchan Kim 2019-09-24 1433 break; 7b167b681013f5 Minchan Kim 2019-09-24 1434 6f5e6b9e69bf04 Hugh Dickins 2006-03-16 1435 if (pte_present(ptent)) { 5df397dec7c4c0 Linus Torvalds 2022-11-09 1436 unsigned int delay_rmap; 5df397dec7c4c0 Linus Torvalds 2022-11-09 1437 25b2995a35b609 Christoph Hellwig 2019-06-13 1438 page = vm_normal_page(vma, addr, ptent); bdec140a4ef8da Kefeng Wang 2023-11-03 1439 if (page) bdec140a4ef8da Kefeng Wang 2023-11-03 1440 folio = page_folio(page); bdec140a4ef8da Kefeng Wang 2023-11-03 1441 bdec140a4ef8da Kefeng Wang 2023-11-03 1442 if (unlikely(!should_zap_page(details, folio))) ^1da177e4c3f41 Linus Torvalds 2005-04-16 1443 continue; b5810039a54e5b Nicholas Piggin 2005-10-29 1444 ptent = ptep_get_and_clear_full(mm, addr, pte, a600388d284193 Zachary Amsden 2005-09-03 1445 tlb->fullmm); e5136e876581ba Rick Edgecombe 2023-06-12 1446 arch_check_zapped_pte(vma, ptent); ^1da177e4c3f41 Linus Torvalds 2005-04-16 1447 tlb_remove_tlb_entry(tlb, pte, addr); 999dad824c39ed Peter Xu 2022-05-12 1448 zap_install_uffd_wp_if_needed(vma, addr, pte, details, 999dad824c39ed Peter Xu 2022-05-12 1449 ptent); e2942062e01df8 xu xin 2023-06-13 1450 if (unlikely(!page)) { 6080d19f07043a xu xin 2023-06-13 1451 ksm_might_unmap_zero_page(mm, ptent); ^1da177e4c3f41 Linus Torvalds 2005-04-16 1452 continue; e2942062e01df8 xu xin 2023-06-13 1453 } eca56ff906bdd0 Jerome Marchand 2016-01-14 1454 5df397dec7c4c0 Linus Torvalds 2022-11-09 1455 delay_rmap = 0; bdec140a4ef8da Kefeng Wang 2023-11-03 1456 if (!folio_test_anon(folio)) { 1cf35d47712dd5 Linus Torvalds 2014-04-25 1457 if (pte_dirty(ptent)) { bdec140a4ef8da Kefeng Wang 2023-11-03 1458 folio_set_dirty(folio); 5df397dec7c4c0 Linus Torvalds 2022-11-09 1459 if (tlb_delay_rmap(tlb)) { 5df397dec7c4c0 Linus Torvalds 2022-11-09 1460 delay_rmap = 1; 5df397dec7c4c0 Linus Torvalds 2022-11-09 1461 force_flush = 1; 5df397dec7c4c0 Linus Torvalds 2022-11-09 1462 } 1cf35d47712dd5 Linus Torvalds 2014-04-25 1463 } 8788f678148676 Yu Zhao 2022-12-30 1464 if (pte_young(ptent) && likely(vma_has_recency(vma))) bdec140a4ef8da Kefeng Wang 2023-11-03 1465 folio_mark_accessed(folio); 6237bcd94851e9 Hugh Dickins 2005-10-29 1466 } bdec140a4ef8da Kefeng Wang 2023-11-03 1467 rss[mm_counter_folio(folio)]--; 5df397dec7c4c0 Linus Torvalds 2022-11-09 1468 if (!delay_rmap) { cea86fe246b694 Hugh Dickins 2022-02-14 1469 page_remove_rmap(page, vma, false); 3dc147414ccad8 Hugh Dickins 2009-01-06 1470 if (unlikely(page_mapcount(page) < 0)) 3dc147414ccad8 Hugh Dickins 2009-01-06 1471 print_bad_pte(vma, addr, ptent, page); 5df397dec7c4c0 Linus Torvalds 2022-11-09 1472 } 5df397dec7c4c0 Linus Torvalds 2022-11-09 1473 if (unlikely(__tlb_remove_page(tlb, page, delay_rmap))) { 1cf35d47712dd5 Linus Torvalds 2014-04-25 1474 force_flush = 1; ce9ec37bddb633 Will Deacon 2014-10-28 1475 addr += PAGE_SIZE; d16dfc550f5326 Peter Zijlstra 2011-05-24 1476 break; 1cf35d47712dd5 Linus Torvalds 2014-04-25 1477 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 1478 continue; ^1da177e4c3f41 Linus Torvalds 2005-04-16 1479 } 5042db43cc26f5 Jérôme Glisse 2017-09-08 1480 5042db43cc26f5 Jérôme Glisse 2017-09-08 1481 entry = pte_to_swp_entry(ptent); b756a3b5e7ead8 Alistair Popple 2021-06-30 1482 if (is_device_private_entry(entry) || b756a3b5e7ead8 Alistair Popple 2021-06-30 1483 is_device_exclusive_entry(entry)) { bdec140a4ef8da Kefeng Wang 2023-11-03 1484 folio = pfn_swap_entry_to_folio(entry); bdec140a4ef8da Kefeng Wang 2023-11-03 1485 if (unlikely(!should_zap_page(details, folio))) 5042db43cc26f5 Jérôme Glisse 2017-09-08 1486 continue; bdec140a4ef8da Kefeng Wang 2023-11-03 1487 999dad824c39ed Peter Xu 2022-05-12 1488 /* 999dad824c39ed Peter Xu 2022-05-12 1489 * Both device private/exclusive mappings should only 999dad824c39ed Peter Xu 2022-05-12 1490 * work with anonymous page so far, so we don't need to 999dad824c39ed Peter Xu 2022-05-12 1491 * consider uffd-wp bit when zap. For more information, 999dad824c39ed Peter Xu 2022-05-12 1492 * see zap_install_uffd_wp_if_needed(). 999dad824c39ed Peter Xu 2022-05-12 1493 */ 999dad824c39ed Peter Xu 2022-05-12 1494 WARN_ON_ONCE(!vma_is_anonymous(vma)); bdec140a4ef8da Kefeng Wang 2023-11-03 1495 rss[mm_counter_folio(folio)]--; b756a3b5e7ead8 Alistair Popple 2021-06-30 1496 if (is_device_private_entry(entry)) cea86fe246b694 Hugh Dickins 2022-02-14 @1497 page_remove_rmap(page, vma, false); bdec140a4ef8da Kefeng Wang 2023-11-03 1498 folio_put(folio); 8018db8525947c Peter Xu 2022-03-22 1499 } else if (!non_swap_entry(entry)) { 5abfd71d936a8a Peter Xu 2022-03-22 1500 /* Genuine swap entry, hence a private anon page */ 5abfd71d936a8a Peter Xu 2022-03-22 1501 if (!should_zap_cows(details)) ^1da177e4c3f41 Linus Torvalds 2005-04-16 1502 continue; b084d4353ff99d KAMEZAWA Hiroyuki 2010-03-05 1503 rss[MM_SWAPENTS]--; 8018db8525947c Peter Xu 2022-03-22 1504 if (unlikely(!free_swap_and_cache(entry))) 8018db8525947c Peter Xu 2022-03-22 1505 print_bad_pte(vma, addr, ptent, NULL); 5abfd71d936a8a Peter Xu 2022-03-22 1506 } else if (is_migration_entry(entry)) { bdec140a4ef8da Kefeng Wang 2023-11-03 1507 folio = pfn_swap_entry_to_folio(entry); bdec140a4ef8da Kefeng Wang 2023-11-03 1508 if (!should_zap_page(details, folio)) 5abfd71d936a8a Peter Xu 2022-03-22 1509 continue; bdec140a4ef8da Kefeng Wang 2023-11-03 1510 rss[mm_counter_folio(folio)]--; 999dad824c39ed Peter Xu 2022-05-12 1511 } else if (pte_marker_entry_uffd_wp(entry)) { 2bad466cc9d9b4 Peter Xu 2023-03-09 1512 /* 2bad466cc9d9b4 Peter Xu 2023-03-09 1513 * For anon: always drop the marker; for file: only 2bad466cc9d9b4 Peter Xu 2023-03-09 1514 * drop the marker if explicitly requested. 2bad466cc9d9b4 Peter Xu 2023-03-09 1515 */ 2bad466cc9d9b4 Peter Xu 2023-03-09 1516 if (!vma_is_anonymous(vma) && 2bad466cc9d9b4 Peter Xu 2023-03-09 1517 !zap_drop_file_uffd_wp(details)) 999dad824c39ed Peter Xu 2022-05-12 1518 continue; 9f186f9e5fa9eb Miaohe Lin 2022-05-19 1519 } else if (is_hwpoison_entry(entry) || af19487f00f34f Axel Rasmussen 2023-07-07 1520 is_poisoned_swp_entry(entry)) { 5abfd71d936a8a Peter Xu 2022-03-22 1521 if (!should_zap_cows(details)) 5abfd71d936a8a Peter Xu 2022-03-22 1522 continue; 5abfd71d936a8a Peter Xu 2022-03-22 1523 } else { 5abfd71d936a8a Peter Xu 2022-03-22 1524 /* We should have covered all the swap entry types */ 5abfd71d936a8a Peter Xu 2022-03-22 1525 WARN_ON_ONCE(1); 9f9f1acd713d69 Konstantin Khlebnikov 2012-01-20 1526 } 9888a1cae3f859 Zachary Amsden 2006-09-30 1527 pte_clear_not_present_full(mm, addr, pte, tlb->fullmm); 999dad824c39ed Peter Xu 2022-05-12 1528 zap_install_uffd_wp_if_needed(vma, addr, pte, details, ptent); 97a894136f2980 Peter Zijlstra 2011-05-24 1529 } while (pte++, addr += PAGE_SIZE, addr != end); ae859762332f19 Hugh Dickins 2005-10-29 1530 d559db086ff5be KAMEZAWA Hiroyuki 2010-03-05 1531 add_mm_rss_vec(mm, rss); 6606c3e0da5360 Zachary Amsden 2006-09-30 1532 arch_leave_lazy_mmu_mode(); 51c6f666fceb31 Robin Holt 2005-11-13 1533 1cf35d47712dd5 Linus Torvalds 2014-04-25 1534 /* Do the actual TLB flush before dropping ptl */ 5df397dec7c4c0 Linus Torvalds 2022-11-09 1535 if (force_flush) { 1cf35d47712dd5 Linus Torvalds 2014-04-25 1536 tlb_flush_mmu_tlbonly(tlb); 5df397dec7c4c0 Linus Torvalds 2022-11-09 1537 tlb_flush_rmaps(tlb, vma); 5df397dec7c4c0 Linus Torvalds 2022-11-09 1538 } 1cf35d47712dd5 Linus Torvalds 2014-04-25 1539 pte_unmap_unlock(start_pte, ptl); 1cf35d47712dd5 Linus Torvalds 2014-04-25 1540 1cf35d47712dd5 Linus Torvalds 2014-04-25 1541 /* 1cf35d47712dd5 Linus Torvalds 2014-04-25 1542 * If we forced a TLB flush (either due to running out of 1cf35d47712dd5 Linus Torvalds 2014-04-25 1543 * batch buffers or because we needed to flush dirty TLB 1cf35d47712dd5 Linus Torvalds 2014-04-25 1544 * entries before releasing the ptl), free the batched 3db82b9374ca92 Hugh Dickins 2023-06-08 1545 * memory too. Come back again if we didn't do everything. 1cf35d47712dd5 Linus Torvalds 2014-04-25 1546 */ 3db82b9374ca92 Hugh Dickins 2023-06-08 1547 if (force_flush) fa0aafb8acb684 Peter Zijlstra 2018-09-20 1548 tlb_flush_mmu(tlb); d16dfc550f5326 Peter Zijlstra 2011-05-24 1549 51c6f666fceb31 Robin Holt 2005-11-13 1550 return addr; ^1da177e4c3f41 Linus Torvalds 2005-04-16 1551 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 1552 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki