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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
