tree:
git://git.infradead.org/users/hch/misc.git pgmap-refcount
head: 0ac1434894ef0abc44e26edeabf0761eeb861f12
commit: eebcce4f8a487c1b2865cae00a41e6cf83cb9e60 [14/27] mm: build migrate_vma_* for all
configs with ZONE_DEVICE support
config: x86_64-kexec
(
https://download.01.org/0day-ci/archive/20220210/202202102240.RJGD8Yw6-lk...)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
git remote add hch-misc
git://git.infradead.org/users/hch/misc.git
git fetch --no-tags hch-misc pgmap-refcount
git checkout eebcce4f8a487c1b2865cae00a41e6cf83cb9e60
# save the config file to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
mm/migrate_device.c: In function 'migrate_vma_collect_pmd':
> mm/migrate_device.c:236:3: error: implicit declaration of
function 'flush_tlb_range'; did you mean 'flush_pmd_tlb_range'?
[-Werror=implicit-function-declaration]
236 | flush_tlb_range(walk->vma,
start, end);
| ^~~~~~~~~~~~~~~
| flush_pmd_tlb_range
cc1: some warnings being treated as errors
vim +236 mm/migrate_device.c
1a520c048d761b Christoph Hellwig 2022-02-10 54
1a520c048d761b Christoph Hellwig 2022-02-10 55 static int migrate_vma_collect_pmd(pmd_t
*pmdp,
1a520c048d761b Christoph Hellwig 2022-02-10 56 unsigned long start,
1a520c048d761b Christoph Hellwig 2022-02-10 57 unsigned long end,
1a520c048d761b Christoph Hellwig 2022-02-10 58 struct mm_walk *walk)
1a520c048d761b Christoph Hellwig 2022-02-10 59 {
1a520c048d761b Christoph Hellwig 2022-02-10 60 struct migrate_vma *migrate =
walk->private;
1a520c048d761b Christoph Hellwig 2022-02-10 61 struct vm_area_struct *vma =
walk->vma;
1a520c048d761b Christoph Hellwig 2022-02-10 62 struct mm_struct *mm = vma->vm_mm;
1a520c048d761b Christoph Hellwig 2022-02-10 63 unsigned long addr = start, unmapped =
0;
1a520c048d761b Christoph Hellwig 2022-02-10 64 spinlock_t *ptl;
1a520c048d761b Christoph Hellwig 2022-02-10 65 pte_t *ptep;
1a520c048d761b Christoph Hellwig 2022-02-10 66
1a520c048d761b Christoph Hellwig 2022-02-10 67 again:
1a520c048d761b Christoph Hellwig 2022-02-10 68 if (pmd_none(*pmdp))
1a520c048d761b Christoph Hellwig 2022-02-10 69 return migrate_vma_collect_hole(start,
end, -1, walk);
1a520c048d761b Christoph Hellwig 2022-02-10 70
1a520c048d761b Christoph Hellwig 2022-02-10 71 if (pmd_trans_huge(*pmdp)) {
1a520c048d761b Christoph Hellwig 2022-02-10 72 struct page *page;
1a520c048d761b Christoph Hellwig 2022-02-10 73
1a520c048d761b Christoph Hellwig 2022-02-10 74 ptl = pmd_lock(mm, pmdp);
1a520c048d761b Christoph Hellwig 2022-02-10 75 if (unlikely(!pmd_trans_huge(*pmdp)))
{
1a520c048d761b Christoph Hellwig 2022-02-10 76 spin_unlock(ptl);
1a520c048d761b Christoph Hellwig 2022-02-10 77 goto again;
1a520c048d761b Christoph Hellwig 2022-02-10 78 }
1a520c048d761b Christoph Hellwig 2022-02-10 79
1a520c048d761b Christoph Hellwig 2022-02-10 80 page = pmd_page(*pmdp);
1a520c048d761b Christoph Hellwig 2022-02-10 81 if (is_huge_zero_page(page)) {
1a520c048d761b Christoph Hellwig 2022-02-10 82 spin_unlock(ptl);
1a520c048d761b Christoph Hellwig 2022-02-10 83 split_huge_pmd(vma, pmdp, addr);
1a520c048d761b Christoph Hellwig 2022-02-10 84 if (pmd_trans_unstable(pmdp))
1a520c048d761b Christoph Hellwig 2022-02-10 85 return
migrate_vma_collect_skip(start, end,
1a520c048d761b Christoph Hellwig 2022-02-10 86 walk);
1a520c048d761b Christoph Hellwig 2022-02-10 87 } else {
1a520c048d761b Christoph Hellwig 2022-02-10 88 int ret;
1a520c048d761b Christoph Hellwig 2022-02-10 89
1a520c048d761b Christoph Hellwig 2022-02-10 90 get_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 91 spin_unlock(ptl);
1a520c048d761b Christoph Hellwig 2022-02-10 92 if (unlikely(!trylock_page(page)))
1a520c048d761b Christoph Hellwig 2022-02-10 93 return
migrate_vma_collect_skip(start, end,
1a520c048d761b Christoph Hellwig 2022-02-10 94 walk);
1a520c048d761b Christoph Hellwig 2022-02-10 95 ret = split_huge_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 96 unlock_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 97 put_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 98 if (ret)
1a520c048d761b Christoph Hellwig 2022-02-10 99 return
migrate_vma_collect_skip(start, end,
1a520c048d761b Christoph Hellwig 2022-02-10 100 walk);
1a520c048d761b Christoph Hellwig 2022-02-10 101 if (pmd_none(*pmdp))
1a520c048d761b Christoph Hellwig 2022-02-10 102 return
migrate_vma_collect_hole(start, end, -1,
1a520c048d761b Christoph Hellwig 2022-02-10 103 walk);
1a520c048d761b Christoph Hellwig 2022-02-10 104 }
1a520c048d761b Christoph Hellwig 2022-02-10 105 }
1a520c048d761b Christoph Hellwig 2022-02-10 106
1a520c048d761b Christoph Hellwig 2022-02-10 107 if (unlikely(pmd_bad(*pmdp)))
1a520c048d761b Christoph Hellwig 2022-02-10 108 return migrate_vma_collect_skip(start,
end, walk);
1a520c048d761b Christoph Hellwig 2022-02-10 109
1a520c048d761b Christoph Hellwig 2022-02-10 110 ptep = pte_offset_map_lock(mm, pmdp,
addr, &ptl);
1a520c048d761b Christoph Hellwig 2022-02-10 111 arch_enter_lazy_mmu_mode();
1a520c048d761b Christoph Hellwig 2022-02-10 112
1a520c048d761b Christoph Hellwig 2022-02-10 113 for (; addr < end; addr +=
PAGE_SIZE, ptep++) {
1a520c048d761b Christoph Hellwig 2022-02-10 114 unsigned long mpfn = 0, pfn;
1a520c048d761b Christoph Hellwig 2022-02-10 115 struct page *page;
1a520c048d761b Christoph Hellwig 2022-02-10 116 swp_entry_t entry;
1a520c048d761b Christoph Hellwig 2022-02-10 117 pte_t pte;
1a520c048d761b Christoph Hellwig 2022-02-10 118
1a520c048d761b Christoph Hellwig 2022-02-10 119 pte = *ptep;
1a520c048d761b Christoph Hellwig 2022-02-10 120
1a520c048d761b Christoph Hellwig 2022-02-10 121 if (pte_none(pte)) {
1a520c048d761b Christoph Hellwig 2022-02-10 122 if (vma_is_anonymous(vma)) {
1a520c048d761b Christoph Hellwig 2022-02-10 123 mpfn = MIGRATE_PFN_MIGRATE;
1a520c048d761b Christoph Hellwig 2022-02-10 124 migrate->cpages++;
1a520c048d761b Christoph Hellwig 2022-02-10 125 }
1a520c048d761b Christoph Hellwig 2022-02-10 126 goto next;
1a520c048d761b Christoph Hellwig 2022-02-10 127 }
1a520c048d761b Christoph Hellwig 2022-02-10 128
1a520c048d761b Christoph Hellwig 2022-02-10 129 if (!pte_present(pte)) {
1a520c048d761b Christoph Hellwig 2022-02-10 130 /*
1a520c048d761b Christoph Hellwig 2022-02-10 131 * Only care about unaddressable
device page special
1a520c048d761b Christoph Hellwig 2022-02-10 132 * page table entry. Other special
swap entries are not
1a520c048d761b Christoph Hellwig 2022-02-10 133 * migratable, and we ignore regular
swapped page.
1a520c048d761b Christoph Hellwig 2022-02-10 134 */
1a520c048d761b Christoph Hellwig 2022-02-10 135 entry = pte_to_swp_entry(pte);
1a520c048d761b Christoph Hellwig 2022-02-10 136 if (!is_device_private_entry(entry))
1a520c048d761b Christoph Hellwig 2022-02-10 137 goto next;
1a520c048d761b Christoph Hellwig 2022-02-10 138
1a520c048d761b Christoph Hellwig 2022-02-10 139 page =
pfn_swap_entry_to_page(entry);
1a520c048d761b Christoph Hellwig 2022-02-10 140 if (!(migrate->flags &
1a520c048d761b Christoph Hellwig 2022-02-10 141 MIGRATE_VMA_SELECT_DEVICE_PRIVATE)
||
1a520c048d761b Christoph Hellwig 2022-02-10 142 page->pgmap->owner !=
migrate->pgmap_owner)
1a520c048d761b Christoph Hellwig 2022-02-10 143 goto next;
1a520c048d761b Christoph Hellwig 2022-02-10 144
1a520c048d761b Christoph Hellwig 2022-02-10 145 mpfn = migrate_pfn(page_to_pfn(page))
|
1a520c048d761b Christoph Hellwig 2022-02-10 146 MIGRATE_PFN_MIGRATE;
1a520c048d761b Christoph Hellwig 2022-02-10 147 if
(is_writable_device_private_entry(entry))
1a520c048d761b Christoph Hellwig 2022-02-10 148 mpfn |= MIGRATE_PFN_WRITE;
1a520c048d761b Christoph Hellwig 2022-02-10 149 } else {
1a520c048d761b Christoph Hellwig 2022-02-10 150 if (!(migrate->flags &
MIGRATE_VMA_SELECT_SYSTEM))
1a520c048d761b Christoph Hellwig 2022-02-10 151 goto next;
1a520c048d761b Christoph Hellwig 2022-02-10 152 pfn = pte_pfn(pte);
1a520c048d761b Christoph Hellwig 2022-02-10 153 if (is_zero_pfn(pfn)) {
1a520c048d761b Christoph Hellwig 2022-02-10 154 mpfn = MIGRATE_PFN_MIGRATE;
1a520c048d761b Christoph Hellwig 2022-02-10 155 migrate->cpages++;
1a520c048d761b Christoph Hellwig 2022-02-10 156 goto next;
1a520c048d761b Christoph Hellwig 2022-02-10 157 }
1a520c048d761b Christoph Hellwig 2022-02-10 158 page =
vm_normal_page(migrate->vma, addr, pte);
1a520c048d761b Christoph Hellwig 2022-02-10 159 mpfn = migrate_pfn(pfn) |
MIGRATE_PFN_MIGRATE;
1a520c048d761b Christoph Hellwig 2022-02-10 160 mpfn |= pte_write(pte) ?
MIGRATE_PFN_WRITE : 0;
1a520c048d761b Christoph Hellwig 2022-02-10 161 }
1a520c048d761b Christoph Hellwig 2022-02-10 162
1a520c048d761b Christoph Hellwig 2022-02-10 163 /* FIXME support THP */
1a520c048d761b Christoph Hellwig 2022-02-10 164 if (!page || !page->mapping ||
PageTransCompound(page)) {
1a520c048d761b Christoph Hellwig 2022-02-10 165 mpfn = 0;
1a520c048d761b Christoph Hellwig 2022-02-10 166 goto next;
1a520c048d761b Christoph Hellwig 2022-02-10 167 }
1a520c048d761b Christoph Hellwig 2022-02-10 168
1a520c048d761b Christoph Hellwig 2022-02-10 169 /*
1a520c048d761b Christoph Hellwig 2022-02-10 170 * By getting a reference on the page
we pin it and that blocks
1a520c048d761b Christoph Hellwig 2022-02-10 171 * any kind of migration. Side effect
is that it "freezes" the
1a520c048d761b Christoph Hellwig 2022-02-10 172 * pte.
1a520c048d761b Christoph Hellwig 2022-02-10 173 *
1a520c048d761b Christoph Hellwig 2022-02-10 174 * We drop this reference after
isolating the page from the lru
1a520c048d761b Christoph Hellwig 2022-02-10 175 * for non device page (device page
are not on the lru and thus
1a520c048d761b Christoph Hellwig 2022-02-10 176 * can't be dropped from it).
1a520c048d761b Christoph Hellwig 2022-02-10 177 */
1a520c048d761b Christoph Hellwig 2022-02-10 178 get_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 179
1a520c048d761b Christoph Hellwig 2022-02-10 180 /*
1a520c048d761b Christoph Hellwig 2022-02-10 181 * Optimize for the common case where
page is only mapped once
1a520c048d761b Christoph Hellwig 2022-02-10 182 * in one process. If we can lock the
page, then we can safely
1a520c048d761b Christoph Hellwig 2022-02-10 183 * set up a special migration page
table entry now.
1a520c048d761b Christoph Hellwig 2022-02-10 184 */
1a520c048d761b Christoph Hellwig 2022-02-10 185 if (trylock_page(page)) {
1a520c048d761b Christoph Hellwig 2022-02-10 186 pte_t swp_pte;
1a520c048d761b Christoph Hellwig 2022-02-10 187
1a520c048d761b Christoph Hellwig 2022-02-10 188 migrate->cpages++;
1a520c048d761b Christoph Hellwig 2022-02-10 189 ptep_get_and_clear(mm, addr, ptep);
1a520c048d761b Christoph Hellwig 2022-02-10 190
1a520c048d761b Christoph Hellwig 2022-02-10 191 /* Setup special migration page table
entry */
1a520c048d761b Christoph Hellwig 2022-02-10 192 if (mpfn & MIGRATE_PFN_WRITE)
1a520c048d761b Christoph Hellwig 2022-02-10 193 entry =
make_writable_migration_entry(
1a520c048d761b Christoph Hellwig 2022-02-10 194 page_to_pfn(page));
1a520c048d761b Christoph Hellwig 2022-02-10 195 else
1a520c048d761b Christoph Hellwig 2022-02-10 196 entry =
make_readable_migration_entry(
1a520c048d761b Christoph Hellwig 2022-02-10 197 page_to_pfn(page));
1a520c048d761b Christoph Hellwig 2022-02-10 198 swp_pte = swp_entry_to_pte(entry);
1a520c048d761b Christoph Hellwig 2022-02-10 199 if (pte_present(pte)) {
1a520c048d761b Christoph Hellwig 2022-02-10 200 if (pte_soft_dirty(pte))
1a520c048d761b Christoph Hellwig 2022-02-10 201 swp_pte =
pte_swp_mksoft_dirty(swp_pte);
1a520c048d761b Christoph Hellwig 2022-02-10 202 if (pte_uffd_wp(pte))
1a520c048d761b Christoph Hellwig 2022-02-10 203 swp_pte =
pte_swp_mkuffd_wp(swp_pte);
1a520c048d761b Christoph Hellwig 2022-02-10 204 } else {
1a520c048d761b Christoph Hellwig 2022-02-10 205 if (pte_swp_soft_dirty(pte))
1a520c048d761b Christoph Hellwig 2022-02-10 206 swp_pte =
pte_swp_mksoft_dirty(swp_pte);
1a520c048d761b Christoph Hellwig 2022-02-10 207 if (pte_swp_uffd_wp(pte))
1a520c048d761b Christoph Hellwig 2022-02-10 208 swp_pte =
pte_swp_mkuffd_wp(swp_pte);
1a520c048d761b Christoph Hellwig 2022-02-10 209 }
1a520c048d761b Christoph Hellwig 2022-02-10 210 set_pte_at(mm, addr, ptep, swp_pte);
1a520c048d761b Christoph Hellwig 2022-02-10 211
1a520c048d761b Christoph Hellwig 2022-02-10 212 /*
1a520c048d761b Christoph Hellwig 2022-02-10 213 * This is like regular unmap: we
remove the rmap and
1a520c048d761b Christoph Hellwig 2022-02-10 214 * drop page refcount. Page won't
be freed, as we took
1a520c048d761b Christoph Hellwig 2022-02-10 215 * a reference just above.
1a520c048d761b Christoph Hellwig 2022-02-10 216 */
1a520c048d761b Christoph Hellwig 2022-02-10 217 page_remove_rmap(page, false);
1a520c048d761b Christoph Hellwig 2022-02-10 218 put_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 219
1a520c048d761b Christoph Hellwig 2022-02-10 220 if (pte_present(pte))
1a520c048d761b Christoph Hellwig 2022-02-10 221 unmapped++;
1a520c048d761b Christoph Hellwig 2022-02-10 222 } else {
1a520c048d761b Christoph Hellwig 2022-02-10 223 put_page(page);
1a520c048d761b Christoph Hellwig 2022-02-10 224 mpfn = 0;
1a520c048d761b Christoph Hellwig 2022-02-10 225 }
1a520c048d761b Christoph Hellwig 2022-02-10 226
1a520c048d761b Christoph Hellwig 2022-02-10 227 next:
1a520c048d761b Christoph Hellwig 2022-02-10 228 migrate->dst[migrate->npages] =
0;
1a520c048d761b Christoph Hellwig 2022-02-10 229 migrate->src[migrate->npages++]
= mpfn;
1a520c048d761b Christoph Hellwig 2022-02-10 230 }
1a520c048d761b Christoph Hellwig 2022-02-10 231 arch_leave_lazy_mmu_mode();
1a520c048d761b Christoph Hellwig 2022-02-10 232 pte_unmap_unlock(ptep - 1, ptl);
1a520c048d761b Christoph Hellwig 2022-02-10 233
1a520c048d761b Christoph Hellwig 2022-02-10 234 /* Only flush the TLB if we actually
modified any entries */
1a520c048d761b Christoph Hellwig 2022-02-10 235 if (unmapped)
1a520c048d761b Christoph Hellwig 2022-02-10 @236 flush_tlb_range(walk->vma, start,
end);
1a520c048d761b Christoph Hellwig 2022-02-10 237
1a520c048d761b Christoph Hellwig 2022-02-10 238 return 0;
1a520c048d761b Christoph Hellwig 2022-02-10 239 }
1a520c048d761b Christoph Hellwig 2022-02-10 240
:::::: The code at line 236 was first introduced by commit
:::::: 1a520c048d761b0437c33b9663013799539ea4d3 mm: move the migrate_vma_* device
migration code into it's own file
:::::: TO: Christoph Hellwig <hch(a)lst.de>
:::::: CC: Christoph Hellwig <hch(a)lst.de>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org