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 --]
next 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.