CC: [email protected]
CC: [email protected]
TO: Alistair Popple <[email protected]>
CC: Christoph Hellwig <[email protected]>
CC: Ralph Campbell <[email protected]>
CC: Andrew Morton <[email protected]>
CC: Linux Memory Management List <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   f55966571d5eb2876a11e48e798b4592fa1ffbb7
commit: a98a2f0c8ce1b2138cb8e3ae410444dedcc14809 mm/rmap: split migration into 
its own function
date:   8 days ago
:::::: branch date: 25 hours ago
:::::: commit date: 8 days ago
config: parisc-randconfig-s032-20210709 (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://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a98a2f0c8ce1b2138cb8e3ae410444dedcc14809
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout a98a2f0c8ce1b2138cb8e3ae410444dedcc14809
        # 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__' O=build_dir ARCH=parisc 
SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


sparse warnings: (new ones prefixed by >>)
   mm/rmap.c: note: in included file (through include/linux/export.h, 
include/linux/linkage.h, include/linux/kernel.h, ...):
   ./include/generated/autoksyms.h:5:16: sparse: sparse: no whitespace before 
object-like macro body
   ./include/generated/autoksyms.h:6:16: sparse: sparse: no whitespace before 
object-like macro body
   ./include/generated/autoksyms.h:6:9: sparse: sparse: preprocessor token 
__KSYM_ redefined
   ./include/generated/autoksyms.h:5:9: sparse: this was the original definition
   ./include/generated/autoksyms.h:7:16: sparse: sparse: no whitespace before 
object-like macro body
   ./include/generated/autoksyms.h:7:9: sparse: sparse: preprocessor token 
__KSYM_ redefined
   ./include/generated/autoksyms.h:5:9: sparse: this was the original definition
   ./include/generated/autoksyms.h:8:16: sparse: sparse: no whitespace before 
object-like macro body
   ./include/generated/autoksyms.h:8:9: sparse: sparse: preprocessor token 
__KSYM_ redefined
   ./include/generated/autoksyms.h:5:9: sparse: this was the original definition
   ./include/generated/autoksyms.h:9:16: sparse: sparse: no whitespace before 
object-like macro body
   ./include/generated/autoksyms.h:9:9: sparse: sparse: preprocessor token 
__KSYM_ redefined
   ./include/generated/autoksyms.h:5:9: sparse: this was the original definition
   mm/rmap.c: note: in included file (through include/linux/ksm.h):
   include/linux/rmap.h:218:28: sparse: sparse: context imbalance in 
'page_referenced_one' - unexpected unlock
   mm/rmap.c:967:25: sparse: sparse: context imbalance in 'page_mkclean_one' - 
different lock contexts for basic block
   include/linux/rmap.h:218:28: sparse: sparse: context imbalance in 
'try_to_unmap_one' - unexpected unlock
>> mm/rmap.c:1915:17: sparse: sparse: context imbalance in 'try_to_migrate_one' 
>> - different lock contexts for basic block
   include/linux/rmap.h:218:28: sparse: sparse: context imbalance in 
'page_mlock_one' - unexpected unlock

vim +/try_to_migrate_one +1915 mm/rmap.c

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

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to