CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: Alistair Popple <[email protected]>
TO: [email protected]
TO: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]
CC: [email protected]

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 <[email protected]>


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/[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