Hi all, This issue appeared in the v7[1], but it has been fixed in the v8[2], so there's no need for concern. [1] https://lore.kernel.org/linux-mm/20240610120809.66601-1-ioworker0@xxxxxxxxx [2] https://lore.kernel.org/linux-mm/20240614015138.31461-4-ioworker0@xxxxxxxxx Thanks, Lance On Fri, Jun 14, 2024 at 4:37 PM kernel test robot <lkp@xxxxxxxxx> wrote: > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable > head: 8d0a686ea94347949eb0b689bb2a7c6028c0fa28 > commit: fa687ca2801a5b5ec92912abc362507242fd5cbc [201/281] mm-vmscan-avoid-split-lazyfree-thp-during-shrink_folio_list-fix > config: openrisc-allnoconfig (https://download.01.org/0day-ci/archive/20240614/202406141650.B5cBNrbw-lkp@xxxxxxxxx/config) > compiler: or1k-linux-gcc (GCC) 13.2.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240614/202406141650.B5cBNrbw-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/202406141650.B5cBNrbw-lkp@xxxxxxxxx/ > > All warnings (new ones prefixed by >>): > > mm/rmap.c: In function 'try_to_unmap_one': > >> mm/rmap.c:1635:14: warning: variable 'pmd_mapped' set but not used [-Wunused-but-set-variable] > 1635 | bool pmd_mapped = false; > | ^~~~~~~~~~ > > > vim +/pmd_mapped +1635 mm/rmap.c > > b06dc281aa99010 David Hildenbrand 2023-12-20 1619 > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1620 /* > 52629506420ce32 Joonsoo Kim 2014-01-21 1621 * @arg: enum ttu_flags will be passed to this argument > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1622 */ > 2f031c6f042cb8a Matthew Wilcox (Oracle 2022-01-29 1623) static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma, > 52629506420ce32 Joonsoo Kim 2014-01-21 1624 unsigned long address, void *arg) > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1625 { > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1626 struct mm_struct *mm = vma->vm_mm; > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1627) DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, 0); > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1628 pte_t pteval; > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1629 struct page *subpage; > 6c287605fd56466 David Hildenbrand 2022-05-09 1630 bool anon_exclusive, ret = true; > ac46d4f3c43241f Jérôme Glisse 2018-12-28 1631 struct mmu_notifier_range range; > 4708f31885a0d3e Palmer Dabbelt 2020-04-06 1632 enum ttu_flags flags = (enum ttu_flags)(long)arg; > c33c794828f2121 Ryan Roberts 2023-06-12 1633 unsigned long pfn; > 935d4f0c6dc8b35 Ryan Roberts 2023-09-22 1634 unsigned long hsz = 0; > 87b8388b6693bea Lance Yang 2024-06-10 @1635 bool pmd_mapped = false; > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1636 > 732ed55823fc3ad Hugh Dickins 2021-06-15 1637 /* > 732ed55823fc3ad Hugh Dickins 2021-06-15 1638 * When racing against e.g. zap_pte_range() on another cpu, > ca1a0746182c3c0 David Hildenbrand 2023-12-20 1639 * in between its ptep_get_and_clear_full() and folio_remove_rmap_*(), > 1fb08ac63beedf5 Yang Shi 2021-06-30 1640 * try_to_unmap() may return before page_mapped() has become false, > 732ed55823fc3ad Hugh Dickins 2021-06-15 1641 * if page table locking is skipped: use TTU_SYNC to wait for that. > 732ed55823fc3ad Hugh Dickins 2021-06-15 1642 */ > 732ed55823fc3ad Hugh Dickins 2021-06-15 1643 if (flags & TTU_SYNC) > 732ed55823fc3ad Hugh Dickins 2021-06-15 1644 pvmw.flags = PVMW_SYNC; > 732ed55823fc3ad Hugh Dickins 2021-06-15 1645 > 369ea8242c0fb52 Jérôme Glisse 2017-08-31 1646 /* > 017b1660df89f5f Mike Kravetz 2018-10-05 1647 * For THP, we have to assume the worse case ie pmd for invalidation. > 017b1660df89f5f Mike Kravetz 2018-10-05 1648 * For hugetlb, it could be much worse if we need to do pud > 017b1660df89f5f Mike Kravetz 2018-10-05 1649 * invalidation in the case of pmd sharing. > 017b1660df89f5f Mike Kravetz 2018-10-05 1650 * > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1651) * Note that the folio can not be freed in this function as call of > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1652) * try_to_unmap() must hold a reference on the folio. > 369ea8242c0fb52 Jérôme Glisse 2017-08-31 1653 */ > 2aff7a4755bed28 Matthew Wilcox (Oracle 2022-02-03 1654) range.end = vma_address_end(&pvmw); > 7d4a8be0c4b2b7f Alistair Popple 2023-01-10 1655 mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm, > 494334e43c16d63 Hugh Dickins 2021-06-15 1656 address, range.end); > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1657) if (folio_test_hugetlb(folio)) { > 017b1660df89f5f Mike Kravetz 2018-10-05 1658 /* > 017b1660df89f5f Mike Kravetz 2018-10-05 1659 * If sharing is possible, start and end will be adjusted > 017b1660df89f5f Mike Kravetz 2018-10-05 1660 * accordingly. > 017b1660df89f5f Mike Kravetz 2018-10-05 1661 */ > ac46d4f3c43241f Jérôme Glisse 2018-12-28 1662 adjust_range_if_pmd_sharing_possible(vma, &range.start, > ac46d4f3c43241f Jérôme Glisse 2018-12-28 1663 &range.end); > 935d4f0c6dc8b35 Ryan Roberts 2023-09-22 1664 > 935d4f0c6dc8b35 Ryan Roberts 2023-09-22 1665 /* We need the huge page size for set_huge_pte_at() */ > 935d4f0c6dc8b35 Ryan Roberts 2023-09-22 1666 hsz = huge_page_size(hstate_vma(vma)); > 017b1660df89f5f Mike Kravetz 2018-10-05 1667 } > ac46d4f3c43241f Jérôme Glisse 2018-12-28 1668 mmu_notifier_invalidate_range_start(&range); > 369ea8242c0fb52 Jérôme Glisse 2017-08-31 1669 > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1670 while (page_vma_mapped_walk(&pvmw)) { > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1671 /* > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1672) * If the folio is in an mlock()d vma, we must not swap it out. > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1673 */ > efdb6720b44b2f0 Hugh Dickins 2021-07-11 1674 if (!(flags & TTU_IGNORE_MLOCK) && > efdb6720b44b2f0 Hugh Dickins 2021-07-11 1675 (vma->vm_flags & VM_LOCKED)) { > cea86fe246b694a Hugh Dickins 2022-02-14 1676 /* Restore the mlock which got missed */ > 1acbc3f936146d1 Yin Fengwei 2023-09-18 1677 if (!folio_test_large(folio)) > 1acbc3f936146d1 Yin Fengwei 2023-09-18 1678 mlock_vma_folio(folio, vma); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1679 goto walk_done_err; > b87537d9e2feb30 Hugh Dickins 2015-11-05 1680 } > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1681 > 87b8388b6693bea Lance Yang 2024-06-10 1682 if (!pvmw.pte) { > 87b8388b6693bea Lance Yang 2024-06-10 1683 pmd_mapped = true; > 87b8388b6693bea Lance Yang 2024-06-10 1684 if (unmap_huge_pmd_locked(vma, pvmw.address, pvmw.pmd, > 87b8388b6693bea Lance Yang 2024-06-10 1685 folio)) > 87b8388b6693bea Lance Yang 2024-06-10 1686 goto walk_done; > 87b8388b6693bea Lance Yang 2024-06-10 1687 > 87b8388b6693bea Lance Yang 2024-06-10 1688 if (flags & TTU_SPLIT_HUGE_PMD) { > df0f2ce432be374 Lance Yang 2024-06-10 1689 /* > 87b8388b6693bea Lance Yang 2024-06-10 1690 * We temporarily have to drop the PTL and start > 87b8388b6693bea Lance Yang 2024-06-10 1691 * once again from that now-PTE-mapped page > 87b8388b6693bea Lance Yang 2024-06-10 1692 * table. > df0f2ce432be374 Lance Yang 2024-06-10 1693 */ > 87b8388b6693bea Lance Yang 2024-06-10 1694 split_huge_pmd_locked(vma, pvmw.address, > 87b8388b6693bea Lance Yang 2024-06-10 1695 pvmw.pmd, false, folio); > df0f2ce432be374 Lance Yang 2024-06-10 1696 flags &= ~TTU_SPLIT_HUGE_PMD; > df0f2ce432be374 Lance Yang 2024-06-10 1697 page_vma_mapped_walk_restart(&pvmw); > df0f2ce432be374 Lance Yang 2024-06-10 1698 continue; > df0f2ce432be374 Lance Yang 2024-06-10 1699 } > 87b8388b6693bea Lance Yang 2024-06-10 1700 } > df0f2ce432be374 Lance Yang 2024-06-10 1701 > df0f2ce432be374 Lance Yang 2024-06-10 1702 /* Unexpected PMD-mapped THP? */ > df0f2ce432be374 Lance Yang 2024-06-10 1703 VM_BUG_ON_FOLIO(!pvmw.pte, folio); > df0f2ce432be374 Lance Yang 2024-06-10 1704 > c33c794828f2121 Ryan Roberts 2023-06-12 1705 pfn = pte_pfn(ptep_get(pvmw.pte)); > c33c794828f2121 Ryan Roberts 2023-06-12 1706 subpage = folio_page(folio, pfn - folio_pfn(folio)); > 785373b4c38719f Linus Torvalds 2017-08-29 1707 address = pvmw.address; > 6c287605fd56466 David Hildenbrand 2022-05-09 1708 anon_exclusive = folio_test_anon(folio) && > 6c287605fd56466 David Hildenbrand 2022-05-09 1709 PageAnonExclusive(subpage); > 785373b4c38719f Linus Torvalds 2017-08-29 1710 > dfc7ab57560da38 Baolin Wang 2022-05-09 1711 if (folio_test_hugetlb(folio)) { > 0506c31d0a8443a Baolin Wang 2022-06-20 1712 bool anon = folio_test_anon(folio); > 0506c31d0a8443a Baolin Wang 2022-06-20 1713 > a00a875925a418b Baolin Wang 2022-05-13 1714 /* > a00a875925a418b Baolin Wang 2022-05-13 1715 * The try_to_unmap() is only passed a hugetlb page > a00a875925a418b Baolin Wang 2022-05-13 1716 * in the case where the hugetlb page is poisoned. > a00a875925a418b Baolin Wang 2022-05-13 1717 */ > a00a875925a418b Baolin Wang 2022-05-13 1718 VM_BUG_ON_PAGE(!PageHWPoison(subpage), subpage); > 017b1660df89f5f Mike Kravetz 2018-10-05 1719 /* > 54205e9c5425049 Baolin Wang 2022-05-09 1720 * huge_pmd_unshare may unmap an entire PMD page. > 54205e9c5425049 Baolin Wang 2022-05-09 1721 * There is no way of knowing exactly which PMDs may > 54205e9c5425049 Baolin Wang 2022-05-09 1722 * be cached for this mm, so we must flush them all. > 54205e9c5425049 Baolin Wang 2022-05-09 1723 * start/end were already adjusted above to cover this > 54205e9c5425049 Baolin Wang 2022-05-09 1724 * range. > 017b1660df89f5f Mike Kravetz 2018-10-05 1725 */ > ac46d4f3c43241f Jérôme Glisse 2018-12-28 1726 flush_cache_range(vma, range.start, range.end); > 54205e9c5425049 Baolin Wang 2022-05-09 1727 > dfc7ab57560da38 Baolin Wang 2022-05-09 1728 /* > dfc7ab57560da38 Baolin Wang 2022-05-09 1729 * To call huge_pmd_unshare, i_mmap_rwsem must be > dfc7ab57560da38 Baolin Wang 2022-05-09 1730 * held in write mode. Caller needs to explicitly > dfc7ab57560da38 Baolin Wang 2022-05-09 1731 * do this outside rmap routines. > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1732 * > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1733 * We also must hold hugetlb vma_lock in write mode. > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1734 * Lock order dictates acquiring vma_lock BEFORE > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1735 * i_mmap_rwsem. We can only try lock here and fail > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1736 * if unsuccessful. > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1737 */ > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1738 if (!anon) { > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1739 VM_BUG_ON(!(flags & TTU_RMAP_LOCKED)); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1740 if (!hugetlb_vma_trylock_write(vma)) > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1741 goto walk_done_err; > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1742 if (huge_pmd_unshare(mm, vma, address, pvmw.pte)) { > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1743 hugetlb_vma_unlock_write(vma); > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1744 flush_tlb_range(vma, > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1745 range.start, range.end); > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1746 /* > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1747 * The ref count of the PMD page was > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1748 * dropped which is part of the way map > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1749 * counting is done for shared PMDs. > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1750 * Return 'true' here. When there is > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1751 * no other sharing, huge_pmd_unshare > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1752 * returns false and we will unmap the > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1753 * actual page and drop map count > 017b1660df89f5f Mike Kravetz 2018-10-05 1754 * to zero. > 017b1660df89f5f Mike Kravetz 2018-10-05 1755 */ > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1756 goto walk_done; > 017b1660df89f5f Mike Kravetz 2018-10-05 1757 } > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1758 hugetlb_vma_unlock_write(vma); > 40549ba8f8e0ed1 Mike Kravetz 2022-09-14 1759 } > a00a875925a418b Baolin Wang 2022-05-13 1760 pteval = huge_ptep_clear_flush(vma, address, pvmw.pte); > 54205e9c5425049 Baolin Wang 2022-05-09 1761 } else { > c33c794828f2121 Ryan Roberts 2023-06-12 1762 flush_cache_page(vma, address, pfn); > 088b8aa537c2c76 David Hildenbrand 2022-09-01 1763 /* Nuke the page table entry. */ > 088b8aa537c2c76 David Hildenbrand 2022-09-01 1764 if (should_defer_flush(mm, flags)) { > 72b252aed506b8f Mel Gorman 2015-09-04 1765 /* > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1766 * We clear the PTE but do not flush so potentially > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1767) * a remote CPU could still be writing to the folio. > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1768 * If the entry was previously clean then the > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1769 * architecture must guarantee that a clear->dirty > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1770 * transition on a cached TLB entry is written through > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1771 * and traps if the PTE is unmapped. > 72b252aed506b8f Mel Gorman 2015-09-04 1772 */ > 785373b4c38719f Linus Torvalds 2017-08-29 1773 pteval = ptep_get_and_clear(mm, address, pvmw.pte); > 72b252aed506b8f Mel Gorman 2015-09-04 1774 > f73419bb89d606d Barry Song 2023-07-17 1775 set_tlb_ubc_flush_pending(mm, pteval, address); > 72b252aed506b8f Mel Gorman 2015-09-04 1776 } else { > 785373b4c38719f Linus Torvalds 2017-08-29 1777 pteval = ptep_clear_flush(vma, address, pvmw.pte); > 72b252aed506b8f Mel Gorman 2015-09-04 1778 } > a00a875925a418b Baolin Wang 2022-05-13 1779 } > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1780 > 999dad824c39ed1 Peter Xu 2022-05-12 1781 /* > 999dad824c39ed1 Peter Xu 2022-05-12 1782 * Now the pte is cleared. If this pte was uffd-wp armed, > 999dad824c39ed1 Peter Xu 2022-05-12 1783 * we may want to replace a none pte with a marker pte if > 999dad824c39ed1 Peter Xu 2022-05-12 1784 * it's file-backed, so we don't lose the tracking info. > 999dad824c39ed1 Peter Xu 2022-05-12 1785 */ > 999dad824c39ed1 Peter Xu 2022-05-12 1786 pte_install_uffd_wp_if_needed(vma, address, pvmw.pte, pteval); > 999dad824c39ed1 Peter Xu 2022-05-12 1787 > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1788) /* Set the dirty flag on the folio now the pte is gone. */ > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1789 if (pte_dirty(pteval)) > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1790) folio_mark_dirty(folio); > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1791 > 365e9c87a982c03 Hugh Dickins 2005-10-29 1792 /* Update high watermark before we lower rss */ > 365e9c87a982c03 Hugh Dickins 2005-10-29 1793 update_hiwater_rss(mm); > 365e9c87a982c03 Hugh Dickins 2005-10-29 1794 > 6da6b1d4a7df8c3 Naoya Horiguchi 2023-02-21 1795 if (PageHWPoison(subpage) && (flags & TTU_HWPOISON)) { > 5fd27b8e7dbcab0 Punit Agrawal 2017-07-06 1796 pteval = swp_entry_to_pte(make_hwpoison_entry(subpage)); > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1797) if (folio_test_hugetlb(folio)) { > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1798) hugetlb_count_sub(folio_nr_pages(folio), mm); > 935d4f0c6dc8b35 Ryan Roberts 2023-09-22 1799 set_huge_pte_at(mm, address, pvmw.pte, pteval, > 935d4f0c6dc8b35 Ryan Roberts 2023-09-22 1800 hsz); > 5d317b2b6536592 Naoya Horiguchi 2015-11-05 1801 } else { > a23f517b0e15544 Kefeng Wang 2024-01-11 1802 dec_mm_counter(mm, mm_counter(folio)); > 785373b4c38719f Linus Torvalds 2017-08-29 1803 set_pte_at(mm, address, pvmw.pte, pteval); > 5f24ae585be9856 Naoya Horiguchi 2012-12-12 1804 } > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1805 > bce73e4842390f7 Christian Borntraeger 2018-07-13 1806 } else if (pte_unused(pteval) && !userfaultfd_armed(vma)) { > 45961722f8e30ce Konstantin Weitz 2013-04-17 1807 /* > 45961722f8e30ce Konstantin Weitz 2013-04-17 1808 * The guest indicated that the page content is of no > 45961722f8e30ce Konstantin Weitz 2013-04-17 1809 * interest anymore. Simply discard the pte, vmscan > 45961722f8e30ce Konstantin Weitz 2013-04-17 1810 * will take care of the rest. > bce73e4842390f7 Christian Borntraeger 2018-07-13 1811 * A future reference will then fault in a new zero > bce73e4842390f7 Christian Borntraeger 2018-07-13 1812 * page. When userfaultfd is active, we must not drop > bce73e4842390f7 Christian Borntraeger 2018-07-13 1813 * this page though, as its main user (postcopy > bce73e4842390f7 Christian Borntraeger 2018-07-13 1814 * migration) will not expect userfaults on already > bce73e4842390f7 Christian Borntraeger 2018-07-13 1815 * copied pages. > 45961722f8e30ce Konstantin Weitz 2013-04-17 1816 */ > a23f517b0e15544 Kefeng Wang 2024-01-11 1817 dec_mm_counter(mm, mm_counter(folio)); > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1818) } else if (folio_test_anon(folio)) { > cfeed8ffe55b37f David Hildenbrand 2023-08-21 1819 swp_entry_t entry = page_swap_entry(subpage); > 179ef71cbc08525 Cyrill Gorcunov 2013-08-13 1820 pte_t swp_pte; > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1821 /* > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1822 * Store the swap location in the pte. > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1823 * See handle_pte_fault() ... > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1824 */ > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1825) if (unlikely(folio_test_swapbacked(folio) != > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1826) folio_test_swapcache(folio))) { > fa687ca2801a5b5 Lance Yang 2024-06-13 1827 WARN_ON_ONCE(1); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1828 goto walk_done_err; > eb94a8784427b28 Minchan Kim 2017-05-03 1829 } > 854e9ed09dedf0c Minchan Kim 2016-01-15 1830 > 802a3a92ad7ac0b Shaohua Li 2017-05-03 1831 /* MADV_FREE page check */ > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1832) if (!folio_test_swapbacked(folio)) { > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1833 int ref_count, map_count; > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1834 > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1835 /* > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1836 * Synchronize with gup_pte_range(): > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1837 * - clear PTE; barrier; read refcount > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1838 * - inc refcount; barrier; read PTE > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1839 */ > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1840 smp_mb(); > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1841 > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1842 ref_count = folio_ref_count(folio); > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1843 map_count = folio_mapcount(folio); > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1844 > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1845 /* > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1846 * Order reads for page refcount and dirty flag > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1847 * (see comments in __remove_mapping()). > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1848 */ > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1849 smp_rmb(); > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1850 > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1851 /* > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1852 * The only page refs must be one from isolation > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1853 * plus the rmap(s) (dropped by discard:). > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1854 */ > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1855 if (ref_count == 1 + map_count && > 6c8e2a256915a22 Mauricio Faria de Oliveira 2022-03-24 1856 !folio_test_dirty(folio)) { > 854e9ed09dedf0c Minchan Kim 2016-01-15 1857 dec_mm_counter(mm, MM_ANONPAGES); > 854e9ed09dedf0c Minchan Kim 2016-01-15 1858 goto discard; > 854e9ed09dedf0c Minchan Kim 2016-01-15 1859 } > 854e9ed09dedf0c Minchan Kim 2016-01-15 1860 > 802a3a92ad7ac0b Shaohua Li 2017-05-03 1861 /* > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1862) * If the folio was redirtied, it cannot be > 802a3a92ad7ac0b Shaohua Li 2017-05-03 1863 * discarded. Remap the page to page table. > 802a3a92ad7ac0b Shaohua Li 2017-05-03 1864 */ > 785373b4c38719f Linus Torvalds 2017-08-29 1865 set_pte_at(mm, address, pvmw.pte, pteval); > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1866) folio_set_swapbacked(folio); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1867 goto walk_done_err; > 802a3a92ad7ac0b Shaohua Li 2017-05-03 1868 } > 802a3a92ad7ac0b Shaohua Li 2017-05-03 1869 > 570a335b8e22579 Hugh Dickins 2009-12-14 1870 if (swap_duplicate(entry) < 0) { > 785373b4c38719f Linus Torvalds 2017-08-29 1871 set_pte_at(mm, address, pvmw.pte, pteval); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1872 goto walk_done_err; > 570a335b8e22579 Hugh Dickins 2009-12-14 1873 } > ca827d55ebaa24d Khalid Aziz 2018-02-21 1874 if (arch_unmap_one(mm, vma, address, pteval) < 0) { > 322842ea3c72649 David Hildenbrand 2022-05-09 1875 swap_free(entry); > ca827d55ebaa24d Khalid Aziz 2018-02-21 1876 set_pte_at(mm, address, pvmw.pte, pteval); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1877 goto walk_done_err; > ca827d55ebaa24d Khalid Aziz 2018-02-21 1878 } > 088b8aa537c2c76 David Hildenbrand 2022-09-01 1879 > e3b4b1374f87c71 David Hildenbrand 2023-12-20 1880 /* See folio_try_share_anon_rmap(): clear PTE first. */ > 6c287605fd56466 David Hildenbrand 2022-05-09 1881 if (anon_exclusive && > e3b4b1374f87c71 David Hildenbrand 2023-12-20 1882 folio_try_share_anon_rmap_pte(folio, subpage)) { > 6c287605fd56466 David Hildenbrand 2022-05-09 1883 swap_free(entry); > 6c287605fd56466 David Hildenbrand 2022-05-09 1884 set_pte_at(mm, address, pvmw.pte, pteval); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1885 goto walk_done_err; > 6c287605fd56466 David Hildenbrand 2022-05-09 1886 } > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1887 if (list_empty(&mm->mmlist)) { > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1888 spin_lock(&mmlist_lock); > f412ac08c9861b4 Hugh Dickins 2005-10-29 1889 if (list_empty(&mm->mmlist)) > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1890 list_add(&mm->mmlist, &init_mm.mmlist); > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1891 spin_unlock(&mmlist_lock); > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1892 } > d559db086ff5be9 KAMEZAWA Hiroyuki 2010-03-05 1893 dec_mm_counter(mm, MM_ANONPAGES); > b084d4353ff99d8 KAMEZAWA Hiroyuki 2010-03-05 1894 inc_mm_counter(mm, MM_SWAPENTS); > 179ef71cbc08525 Cyrill Gorcunov 2013-08-13 1895 swp_pte = swp_entry_to_pte(entry); > 1493a1913e34b0a David Hildenbrand 2022-05-09 1896 if (anon_exclusive) > 1493a1913e34b0a David Hildenbrand 2022-05-09 1897 swp_pte = pte_swp_mkexclusive(swp_pte); > 179ef71cbc08525 Cyrill Gorcunov 2013-08-13 1898 if (pte_soft_dirty(pteval)) > 179ef71cbc08525 Cyrill Gorcunov 2013-08-13 1899 swp_pte = pte_swp_mksoft_dirty(swp_pte); > f45ec5ff16a75f9 Peter Xu 2020-04-06 1900 if (pte_uffd_wp(pteval)) > f45ec5ff16a75f9 Peter Xu 2020-04-06 1901 swp_pte = pte_swp_mkuffd_wp(swp_pte); > 785373b4c38719f Linus Torvalds 2017-08-29 1902 set_pte_at(mm, address, pvmw.pte, swp_pte); > 0f10851ea475e08 Jérôme Glisse 2017-11-15 1903 } else { > 0f10851ea475e08 Jérôme Glisse 2017-11-15 1904 /* > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1905) * This is a locked file-backed folio, > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1906) * so it cannot be removed from the page > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1907) * cache and replaced by a new folio before > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1908) * mmu_notifier_invalidate_range_end, so no > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1909) * concurrent thread might update its page table > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1910) * to point at a new folio while a device is > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1911) * still using this folio. > 0f10851ea475e08 Jérôme Glisse 2017-11-15 1912 * > ee65728e103bb7d Mike Rapoport 2022-06-27 1913 * See Documentation/mm/mmu_notifier.rst > 0f10851ea475e08 Jérôme Glisse 2017-11-15 1914 */ > 6b27cc6c66abf0f Kefeng Wang 2024-01-11 1915 dec_mm_counter(mm, mm_counter_file(folio)); > 0f10851ea475e08 Jérôme Glisse 2017-11-15 1916 } > 854e9ed09dedf0c Minchan Kim 2016-01-15 1917 discard: > e135826b2da0cf2 David Hildenbrand 2023-12-20 1918 if (unlikely(folio_test_hugetlb(folio))) > e135826b2da0cf2 David Hildenbrand 2023-12-20 1919 hugetlb_remove_rmap(folio); > e135826b2da0cf2 David Hildenbrand 2023-12-20 1920 else > ca1a0746182c3c0 David Hildenbrand 2023-12-20 1921 folio_remove_rmap_pte(folio, subpage, vma); > b74355078b65542 Hugh Dickins 2022-02-14 1922 if (vma->vm_flags & VM_LOCKED) > 96f97c438f61ddb Lorenzo Stoakes 2023-01-12 1923 mlock_drain_local(); > 869f7ee6f647734 Matthew Wilcox (Oracle 2022-02-15 1924) folio_put(folio); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1925 continue; > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1926 walk_done_err: > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1927 ret = false; > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1928 walk_done: > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1929 page_vma_mapped_walk_done(&pvmw); > 3ee78e6ad3bc52e Lance Yang 2024-06-10 1930 break; > c7ab0d2fdc84026 Kirill A. Shutemov 2017-02-24 1931 } > 369ea8242c0fb52 Jérôme Glisse 2017-08-31 1932 > ac46d4f3c43241f Jérôme Glisse 2018-12-28 1933 mmu_notifier_invalidate_range_end(&range); > 369ea8242c0fb52 Jérôme Glisse 2017-08-31 1934 > caed0f486e582ee KOSAKI Motohiro 2009-12-14 1935 return ret; > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1936 } > ^1da177e4c3f415 Linus Torvalds 2005-04-16 1937 > > :::::: The code at line 1635 was first introduced by commit > :::::: 87b8388b6693beaad43d5d3f41534d5e042f9388 mm/vmscan: avoid split lazyfree THP during shrink_folio_list() > > :::::: TO: Lance Yang <ioworker0@xxxxxxxxx> > :::::: CC: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests/wiki