All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: Re: [PATCH v10 04/10] mm/rmap: Split migration into its own function
Date: Thu, 10 Jun 2021 01:43:39 +0800	[thread overview]
Message-ID: <202106100113.mpFDMPYj-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 16246 bytes --]

CC: kbuild-all(a)lists.01.org
In-Reply-To: <20210607075855.5084-5-apopple@nvidia.com>
References: <20210607075855.5084-5-apopple@nvidia.com>
TO: Alistair Popple <apopple@nvidia.com>
TO: linux-mm(a)kvack.org
TO: akpm(a)linux-foundation.org
CC: rcampbell(a)nvidia.com
CC: linux-doc(a)vger.kernel.org
CC: nouveau(a)lists.freedesktop.org
CC: hughd(a)google.com
CC: linux-kernel(a)vger.kernel.org
CC: dri-devel(a)lists.freedesktop.org
CC: hch(a)infradead.org
CC: bskeggs(a)redhat.com

Hi Alistair,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on s390/features]
[also build test WARNING on kselftest/next linus/master v5.13-rc5]
[cannot apply to hnaz-linux-mm/master next-20210609]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Alistair-Popple/Add-support-for-SVM-atomics-in-Nouveau/20210607-160056
base:   https://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git features
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago
config: parisc-randconfig-s032-20210607 (attached as .config)
compiler: hppa64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-341-g8af24329-dirty
        # https://github.com/0day-ci/linux/commit/80e54e5e679c95e425608a45721ca6cc30ae25f4
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Alistair-Popple/Add-support-for-SVM-atomics-in-Nouveau/20210607-160056
        git checkout 80e54e5e679c95e425608a45721ca6cc30ae25f4
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=parisc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)
   mm/rmap.c: note: in included file (through include/linux/ksm.h):
   include/linux/rmap.h:217:28: sparse: sparse: context imbalance in 'page_referenced_one' - unexpected unlock
   mm/rmap.c:970:25: sparse: sparse: context imbalance in 'page_mkclean_one' - different lock contexts for basic block
   include/linux/rmap.h:217:28: sparse: sparse: context imbalance in 'try_to_unmap_one' - unexpected unlock
>> mm/rmap.c:1899:17: sparse: sparse: context imbalance in 'try_to_migrate_one' - different lock contexts for basic block
   include/linux/rmap.h:217:28: sparse: sparse: context imbalance in 'page_mlock_one' - unexpected unlock

vim +/try_to_migrate_one +1899 mm/rmap.c

80e54e5e679c95 Alistair Popple 2021-06-07  1744  
80e54e5e679c95 Alistair Popple 2021-06-07  1745  		/* Unexpected PMD-mapped THP? */
80e54e5e679c95 Alistair Popple 2021-06-07  1746  		VM_BUG_ON_PAGE(!pvmw.pte, page);
80e54e5e679c95 Alistair Popple 2021-06-07  1747  
80e54e5e679c95 Alistair Popple 2021-06-07  1748  		subpage = page - page_to_pfn(page) + pte_pfn(*pvmw.pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1749  		address = pvmw.address;
80e54e5e679c95 Alistair Popple 2021-06-07  1750  
80e54e5e679c95 Alistair Popple 2021-06-07  1751  		if (PageHuge(page) && !PageAnon(page)) {
80e54e5e679c95 Alistair Popple 2021-06-07  1752  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1753  			 * To call huge_pmd_unshare, i_mmap_rwsem must be
80e54e5e679c95 Alistair Popple 2021-06-07  1754  			 * held in write mode.  Caller needs to explicitly
80e54e5e679c95 Alistair Popple 2021-06-07  1755  			 * do this outside rmap routines.
80e54e5e679c95 Alistair Popple 2021-06-07  1756  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1757  			VM_BUG_ON(!(flags & TTU_RMAP_LOCKED));
80e54e5e679c95 Alistair Popple 2021-06-07  1758  			if (huge_pmd_unshare(mm, vma, &address, pvmw.pte)) {
80e54e5e679c95 Alistair Popple 2021-06-07  1759  				/*
80e54e5e679c95 Alistair Popple 2021-06-07  1760  				 * huge_pmd_unshare unmapped an entire PMD
80e54e5e679c95 Alistair Popple 2021-06-07  1761  				 * page.  There is no way of knowing exactly
80e54e5e679c95 Alistair Popple 2021-06-07  1762  				 * which PMDs may be cached for this mm, so
80e54e5e679c95 Alistair Popple 2021-06-07  1763  				 * we must flush them all.  start/end were
80e54e5e679c95 Alistair Popple 2021-06-07  1764  				 * already adjusted above to cover this range.
80e54e5e679c95 Alistair Popple 2021-06-07  1765  				 */
80e54e5e679c95 Alistair Popple 2021-06-07  1766  				flush_cache_range(vma, range.start, range.end);
80e54e5e679c95 Alistair Popple 2021-06-07  1767  				flush_tlb_range(vma, range.start, range.end);
80e54e5e679c95 Alistair Popple 2021-06-07  1768  				mmu_notifier_invalidate_range(mm, range.start,
80e54e5e679c95 Alistair Popple 2021-06-07  1769  							      range.end);
80e54e5e679c95 Alistair Popple 2021-06-07  1770  
80e54e5e679c95 Alistair Popple 2021-06-07  1771  				/*
80e54e5e679c95 Alistair Popple 2021-06-07  1772  				 * The ref count of the PMD page was dropped
80e54e5e679c95 Alistair Popple 2021-06-07  1773  				 * which is part of the way map counting
80e54e5e679c95 Alistair Popple 2021-06-07  1774  				 * is done for shared PMDs.  Return 'true'
80e54e5e679c95 Alistair Popple 2021-06-07  1775  				 * here.  When there is no other sharing,
80e54e5e679c95 Alistair Popple 2021-06-07  1776  				 * huge_pmd_unshare returns false and we will
80e54e5e679c95 Alistair Popple 2021-06-07  1777  				 * unmap the actual page and drop map count
80e54e5e679c95 Alistair Popple 2021-06-07  1778  				 * to zero.
80e54e5e679c95 Alistair Popple 2021-06-07  1779  				 */
80e54e5e679c95 Alistair Popple 2021-06-07  1780  				page_vma_mapped_walk_done(&pvmw);
80e54e5e679c95 Alistair Popple 2021-06-07  1781  				break;
80e54e5e679c95 Alistair Popple 2021-06-07  1782  			}
80e54e5e679c95 Alistair Popple 2021-06-07  1783  		}
80e54e5e679c95 Alistair Popple 2021-06-07  1784  
80e54e5e679c95 Alistair Popple 2021-06-07  1785  		/* Nuke the page table entry. */
80e54e5e679c95 Alistair Popple 2021-06-07  1786  		flush_cache_page(vma, address, pte_pfn(*pvmw.pte));
80e54e5e679c95 Alistair Popple 2021-06-07  1787  		pteval = ptep_clear_flush(vma, address, pvmw.pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1788  
80e54e5e679c95 Alistair Popple 2021-06-07  1789  		/* Move the dirty bit to the page. Now the pte is gone. */
80e54e5e679c95 Alistair Popple 2021-06-07  1790  		if (pte_dirty(pteval))
80e54e5e679c95 Alistair Popple 2021-06-07  1791  			set_page_dirty(page);
80e54e5e679c95 Alistair Popple 2021-06-07  1792  
80e54e5e679c95 Alistair Popple 2021-06-07  1793  		/* Update high watermark before we lower rss */
80e54e5e679c95 Alistair Popple 2021-06-07  1794  		update_hiwater_rss(mm);
80e54e5e679c95 Alistair Popple 2021-06-07  1795  
80e54e5e679c95 Alistair Popple 2021-06-07  1796  		if (is_zone_device_page(page)) {
80e54e5e679c95 Alistair Popple 2021-06-07  1797  			swp_entry_t entry;
80e54e5e679c95 Alistair Popple 2021-06-07  1798  			pte_t swp_pte;
80e54e5e679c95 Alistair Popple 2021-06-07  1799  
80e54e5e679c95 Alistair Popple 2021-06-07  1800  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1801  			 * Store the pfn of the page in a special migration
80e54e5e679c95 Alistair Popple 2021-06-07  1802  			 * pte. do_swap_page() will wait until the migration
80e54e5e679c95 Alistair Popple 2021-06-07  1803  			 * pte is removed and then restart fault handling.
80e54e5e679c95 Alistair Popple 2021-06-07  1804  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1805  			entry = make_readable_migration_entry(
80e54e5e679c95 Alistair Popple 2021-06-07  1806  							page_to_pfn(page));
80e54e5e679c95 Alistair Popple 2021-06-07  1807  			swp_pte = swp_entry_to_pte(entry);
80e54e5e679c95 Alistair Popple 2021-06-07  1808  
80e54e5e679c95 Alistair Popple 2021-06-07  1809  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1810  			 * pteval maps a zone device page and is therefore
80e54e5e679c95 Alistair Popple 2021-06-07  1811  			 * a swap pte.
80e54e5e679c95 Alistair Popple 2021-06-07  1812  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1813  			if (pte_swp_soft_dirty(pteval))
80e54e5e679c95 Alistair Popple 2021-06-07  1814  				swp_pte = pte_swp_mksoft_dirty(swp_pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1815  			if (pte_swp_uffd_wp(pteval))
80e54e5e679c95 Alistair Popple 2021-06-07  1816  				swp_pte = pte_swp_mkuffd_wp(swp_pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1817  			set_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1818  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1819  			 * No need to invalidate here it will synchronize on
80e54e5e679c95 Alistair Popple 2021-06-07  1820  			 * against the special swap migration pte.
80e54e5e679c95 Alistair Popple 2021-06-07  1821  			 *
80e54e5e679c95 Alistair Popple 2021-06-07  1822  			 * The assignment to subpage above was computed from a
80e54e5e679c95 Alistair Popple 2021-06-07  1823  			 * swap PTE which results in an invalid pointer.
80e54e5e679c95 Alistair Popple 2021-06-07  1824  			 * Since only PAGE_SIZE pages can currently be
80e54e5e679c95 Alistair Popple 2021-06-07  1825  			 * migrated, just set it to page. This will need to be
80e54e5e679c95 Alistair Popple 2021-06-07  1826  			 * changed when hugepage migrations to device private
80e54e5e679c95 Alistair Popple 2021-06-07  1827  			 * memory are supported.
80e54e5e679c95 Alistair Popple 2021-06-07  1828  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1829  			subpage = page;
80e54e5e679c95 Alistair Popple 2021-06-07  1830  		} else if (PageHWPoison(page)) {
80e54e5e679c95 Alistair Popple 2021-06-07  1831  			pteval = swp_entry_to_pte(make_hwpoison_entry(subpage));
80e54e5e679c95 Alistair Popple 2021-06-07  1832  			if (PageHuge(page)) {
80e54e5e679c95 Alistair Popple 2021-06-07  1833  				hugetlb_count_sub(compound_nr(page), mm);
80e54e5e679c95 Alistair Popple 2021-06-07  1834  				set_huge_swap_pte_at(mm, address,
80e54e5e679c95 Alistair Popple 2021-06-07  1835  						     pvmw.pte, pteval,
80e54e5e679c95 Alistair Popple 2021-06-07  1836  						     vma_mmu_pagesize(vma));
80e54e5e679c95 Alistair Popple 2021-06-07  1837  			} else {
80e54e5e679c95 Alistair Popple 2021-06-07  1838  				dec_mm_counter(mm, mm_counter(page));
80e54e5e679c95 Alistair Popple 2021-06-07  1839  				set_pte_at(mm, address, pvmw.pte, pteval);
80e54e5e679c95 Alistair Popple 2021-06-07  1840  			}
80e54e5e679c95 Alistair Popple 2021-06-07  1841  
80e54e5e679c95 Alistair Popple 2021-06-07  1842  		} else if (pte_unused(pteval) && !userfaultfd_armed(vma)) {
80e54e5e679c95 Alistair Popple 2021-06-07  1843  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1844  			 * The guest indicated that the page content is of no
80e54e5e679c95 Alistair Popple 2021-06-07  1845  			 * interest anymore. Simply discard the pte, vmscan
80e54e5e679c95 Alistair Popple 2021-06-07  1846  			 * will take care of the rest.
80e54e5e679c95 Alistair Popple 2021-06-07  1847  			 * A future reference will then fault in a new zero
80e54e5e679c95 Alistair Popple 2021-06-07  1848  			 * page. When userfaultfd is active, we must not drop
80e54e5e679c95 Alistair Popple 2021-06-07  1849  			 * this page though, as its main user (postcopy
80e54e5e679c95 Alistair Popple 2021-06-07  1850  			 * migration) will not expect userfaults on already
80e54e5e679c95 Alistair Popple 2021-06-07  1851  			 * copied pages.
80e54e5e679c95 Alistair Popple 2021-06-07  1852  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1853  			dec_mm_counter(mm, mm_counter(page));
80e54e5e679c95 Alistair Popple 2021-06-07  1854  			/* We have to invalidate as we cleared the pte */
80e54e5e679c95 Alistair Popple 2021-06-07  1855  			mmu_notifier_invalidate_range(mm, address,
80e54e5e679c95 Alistair Popple 2021-06-07  1856  						      address + PAGE_SIZE);
80e54e5e679c95 Alistair Popple 2021-06-07  1857  		} else {
80e54e5e679c95 Alistair Popple 2021-06-07  1858  			swp_entry_t entry;
80e54e5e679c95 Alistair Popple 2021-06-07  1859  			pte_t swp_pte;
80e54e5e679c95 Alistair Popple 2021-06-07  1860  
80e54e5e679c95 Alistair Popple 2021-06-07  1861  			if (arch_unmap_one(mm, vma, address, pteval) < 0) {
80e54e5e679c95 Alistair Popple 2021-06-07  1862  				set_pte_at(mm, address, pvmw.pte, pteval);
80e54e5e679c95 Alistair Popple 2021-06-07  1863  				ret = false;
80e54e5e679c95 Alistair Popple 2021-06-07  1864  				page_vma_mapped_walk_done(&pvmw);
80e54e5e679c95 Alistair Popple 2021-06-07  1865  				break;
80e54e5e679c95 Alistair Popple 2021-06-07  1866  			}
80e54e5e679c95 Alistair Popple 2021-06-07  1867  
80e54e5e679c95 Alistair Popple 2021-06-07  1868  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1869  			 * Store the pfn of the page in a special migration
80e54e5e679c95 Alistair Popple 2021-06-07  1870  			 * pte. do_swap_page() will wait until the migration
80e54e5e679c95 Alistair Popple 2021-06-07  1871  			 * pte is removed and then restart fault handling.
80e54e5e679c95 Alistair Popple 2021-06-07  1872  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1873  			if (pte_write(pteval))
80e54e5e679c95 Alistair Popple 2021-06-07  1874  				entry = make_writable_migration_entry(
80e54e5e679c95 Alistair Popple 2021-06-07  1875  							page_to_pfn(subpage));
80e54e5e679c95 Alistair Popple 2021-06-07  1876  			else
80e54e5e679c95 Alistair Popple 2021-06-07  1877  				entry = make_readable_migration_entry(
80e54e5e679c95 Alistair Popple 2021-06-07  1878  							page_to_pfn(subpage));
80e54e5e679c95 Alistair Popple 2021-06-07  1879  
80e54e5e679c95 Alistair Popple 2021-06-07  1880  			swp_pte = swp_entry_to_pte(entry);
80e54e5e679c95 Alistair Popple 2021-06-07  1881  			if (pte_soft_dirty(pteval))
80e54e5e679c95 Alistair Popple 2021-06-07  1882  				swp_pte = pte_swp_mksoft_dirty(swp_pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1883  			if (pte_uffd_wp(pteval))
80e54e5e679c95 Alistair Popple 2021-06-07  1884  				swp_pte = pte_swp_mkuffd_wp(swp_pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1885  			set_pte_at(mm, address, pvmw.pte, swp_pte);
80e54e5e679c95 Alistair Popple 2021-06-07  1886  			/*
80e54e5e679c95 Alistair Popple 2021-06-07  1887  			 * No need to invalidate here it will synchronize on
80e54e5e679c95 Alistair Popple 2021-06-07  1888  			 * against the special swap migration pte.
80e54e5e679c95 Alistair Popple 2021-06-07  1889  			 */
80e54e5e679c95 Alistair Popple 2021-06-07  1890  		}
80e54e5e679c95 Alistair Popple 2021-06-07  1891  
80e54e5e679c95 Alistair Popple 2021-06-07  1892  		/*
80e54e5e679c95 Alistair Popple 2021-06-07  1893  		 * No need to call mmu_notifier_invalidate_range() it has be
80e54e5e679c95 Alistair Popple 2021-06-07  1894  		 * done above for all cases requiring it to happen under page
80e54e5e679c95 Alistair Popple 2021-06-07  1895  		 * table lock before mmu_notifier_invalidate_range_end()
80e54e5e679c95 Alistair Popple 2021-06-07  1896  		 *
80e54e5e679c95 Alistair Popple 2021-06-07  1897  		 * See Documentation/vm/mmu_notifier.rst
80e54e5e679c95 Alistair Popple 2021-06-07  1898  		 */
80e54e5e679c95 Alistair Popple 2021-06-07 @1899  		page_remove_rmap(subpage, PageHuge(page));
80e54e5e679c95 Alistair Popple 2021-06-07  1900  		put_page(page);
80e54e5e679c95 Alistair Popple 2021-06-07  1901  	}
80e54e5e679c95 Alistair Popple 2021-06-07  1902  
80e54e5e679c95 Alistair Popple 2021-06-07  1903  	mmu_notifier_invalidate_range_end(&range);
80e54e5e679c95 Alistair Popple 2021-06-07  1904  
80e54e5e679c95 Alistair Popple 2021-06-07  1905  	return ret;
80e54e5e679c95 Alistair Popple 2021-06-07  1906  }
80e54e5e679c95 Alistair Popple 2021-06-07  1907  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 37498 bytes --]

             reply	other threads:[~2021-06-09 17:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-09 17:43 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2021-06-07  7:58 [PATCH v10 00/10] Add support for SVM atomics in Nouveau Alistair Popple
2021-06-07  7:58 ` [PATCH v10 04/10] mm/rmap: Split migration into its own function Alistair Popple
2021-06-07  7:58   ` Alistair Popple

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202106100113.mpFDMPYj-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.