[akpm-mm:mm-unstable 201/281] mm/rmap.c:1635:14: warning: variable 'pmd_mapped' set but not used

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux