From: kbuild test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH] hugetlb: remove unused hstate in hugetlb_fault_mutex_hash()
Date: Sun, 06 Oct 2019 10:25:48 +0800 [thread overview]
Message-ID: <201910061041.AvdQQNe9%lkp@intel.com> (raw)
In-Reply-To: <20191005003302.785-1-richardw.yang@linux.intel.com>
[-- Attachment #1: Type: text/plain, Size: 19988 bytes --]
Hi Wei,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[cannot apply to v5.4-rc1 next-20191004]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Wei-Yang/hugetlb-remove-unused-hstate-in-hugetlb_fault_mutex_hash/20191005-090034
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-rc1-42-g38eda53-dirty
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
mm/userfaultfd.c:262:17: sparse: sparse: undefined identifier 'h'
mm/userfaultfd.c:273:75: sparse: sparse: undefined identifier 'h'
mm/userfaultfd.c:300:69: sparse: sparse: undefined identifier 'h'
>> mm/userfaultfd.c:262:17: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct hstate *h @@ got hstate *h @@
>> mm/userfaultfd.c:262:17: sparse: expected struct hstate *h
>> mm/userfaultfd.c:262:17: sparse: got bad type
mm/userfaultfd.c:273:75: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct hstate *h @@ got hstate *h @@
mm/userfaultfd.c:273:75: sparse: expected struct hstate *h
mm/userfaultfd.c:273:75: sparse: got bad type
mm/userfaultfd.c:300:69: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct hstate *h @@ got hstate *h @@
mm/userfaultfd.c:300:69: sparse: expected struct hstate *h
mm/userfaultfd.c:300:69: sparse: got bad type
vim +262 mm/userfaultfd.c
c1a4de99fada21 Andrea Arcangeli 2015-09-04 167
60d4d2d2b40e44 Mike Kravetz 2017-02-22 168 #ifdef CONFIG_HUGETLB_PAGE
60d4d2d2b40e44 Mike Kravetz 2017-02-22 169 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 170 * __mcopy_atomic processing for HUGETLB vmas. Note that this routine is
60d4d2d2b40e44 Mike Kravetz 2017-02-22 171 * called with mmap_sem held, it will release mmap_sem before returning.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 172 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 173 static __always_inline ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 174 struct vm_area_struct *dst_vma,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 175 unsigned long dst_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 176 unsigned long src_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 177 unsigned long len,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 178 bool zeropage)
60d4d2d2b40e44 Mike Kravetz 2017-02-22 179 {
1c9e8def43a345 Mike Kravetz 2017-02-22 180 int vm_alloc_shared = dst_vma->vm_flags & VM_SHARED;
1c9e8def43a345 Mike Kravetz 2017-02-22 181 int vm_shared = dst_vma->vm_flags & VM_SHARED;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 182 ssize_t err;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 183 pte_t *dst_pte;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 184 unsigned long src_addr, dst_addr;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 185 long copied;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 186 struct page *page;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 187 unsigned long vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 188 pgoff_t idx;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 189 u32 hash;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 190 struct address_space *mapping;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 191
60d4d2d2b40e44 Mike Kravetz 2017-02-22 192 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 193 * There is no default zero huge page for all huge page sizes as
60d4d2d2b40e44 Mike Kravetz 2017-02-22 194 * supported by hugetlb. A PMD_SIZE huge pages may exist as used
60d4d2d2b40e44 Mike Kravetz 2017-02-22 195 * by THP. Since we can not reliably insert a zero page, this
60d4d2d2b40e44 Mike Kravetz 2017-02-22 196 * feature is not supported.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 197 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 198 if (zeropage) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 199 up_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 200 return -EINVAL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 201 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 202
60d4d2d2b40e44 Mike Kravetz 2017-02-22 203 src_addr = src_start;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 204 dst_addr = dst_start;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 205 copied = 0;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 206 page = NULL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 207 vma_hpagesize = vma_kernel_pagesize(dst_vma);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 208
60d4d2d2b40e44 Mike Kravetz 2017-02-22 209 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 210 * Validate alignment based on huge page size
60d4d2d2b40e44 Mike Kravetz 2017-02-22 211 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 212 err = -EINVAL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 213 if (dst_start & (vma_hpagesize - 1) || len & (vma_hpagesize - 1))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 214 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 215
60d4d2d2b40e44 Mike Kravetz 2017-02-22 216 retry:
60d4d2d2b40e44 Mike Kravetz 2017-02-22 217 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 218 * On routine entry dst_vma is set. If we had to drop mmap_sem and
60d4d2d2b40e44 Mike Kravetz 2017-02-22 219 * retry, dst_vma will be set to NULL and we must lookup again.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 220 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 221 if (!dst_vma) {
27d02568f529e9 Mike Rapoport 2017-02-24 222 err = -ENOENT;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 223 dst_vma = find_vma(dst_mm, dst_start);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 224 if (!dst_vma || !is_vm_hugetlb_page(dst_vma))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 225 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 226 /*
29ec90660d68bb Andrea Arcangeli 2018-11-30 227 * Check the vma is registered in uffd, this is
29ec90660d68bb Andrea Arcangeli 2018-11-30 228 * required to enforce the VM_MAYWRITE check done at
29ec90660d68bb Andrea Arcangeli 2018-11-30 229 * uffd registration time.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 230 */
27d02568f529e9 Mike Rapoport 2017-02-24 231 if (!dst_vma->vm_userfaultfd_ctx.ctx)
27d02568f529e9 Mike Rapoport 2017-02-24 232 goto out_unlock;
27d02568f529e9 Mike Rapoport 2017-02-24 233
60d4d2d2b40e44 Mike Kravetz 2017-02-22 234 if (dst_start < dst_vma->vm_start ||
60d4d2d2b40e44 Mike Kravetz 2017-02-22 235 dst_start + len > dst_vma->vm_end)
60d4d2d2b40e44 Mike Kravetz 2017-02-22 236 goto out_unlock;
1c9e8def43a345 Mike Kravetz 2017-02-22 237
27d02568f529e9 Mike Rapoport 2017-02-24 238 err = -EINVAL;
27d02568f529e9 Mike Rapoport 2017-02-24 239 if (vma_hpagesize != vma_kernel_pagesize(dst_vma))
27d02568f529e9 Mike Rapoport 2017-02-24 240 goto out_unlock;
27d02568f529e9 Mike Rapoport 2017-02-24 241
1c9e8def43a345 Mike Kravetz 2017-02-22 242 vm_shared = dst_vma->vm_flags & VM_SHARED;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 243 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 244
60d4d2d2b40e44 Mike Kravetz 2017-02-22 245 if (WARN_ON(dst_addr & (vma_hpagesize - 1) ||
60d4d2d2b40e44 Mike Kravetz 2017-02-22 246 (len - copied) & (vma_hpagesize - 1)))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 247 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 248
60d4d2d2b40e44 Mike Kravetz 2017-02-22 249 /*
1c9e8def43a345 Mike Kravetz 2017-02-22 250 * If not shared, ensure the dst_vma has a anon_vma.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 251 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 252 err = -ENOMEM;
1c9e8def43a345 Mike Kravetz 2017-02-22 253 if (!vm_shared) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 254 if (unlikely(anon_vma_prepare(dst_vma)))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 255 goto out_unlock;
1c9e8def43a345 Mike Kravetz 2017-02-22 256 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 257
60d4d2d2b40e44 Mike Kravetz 2017-02-22 258 while (src_addr < src_start + len) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 259 pte_t dst_pteval;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 260
60d4d2d2b40e44 Mike Kravetz 2017-02-22 261 BUG_ON(dst_addr >= dst_start + len);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 @262 VM_BUG_ON(dst_addr & ~huge_page_mask(h));
60d4d2d2b40e44 Mike Kravetz 2017-02-22 263
60d4d2d2b40e44 Mike Kravetz 2017-02-22 264 /*
ddeaab32a89f04 Mike Kravetz 2019-01-08 265 * Serialize via hugetlb_fault_mutex
60d4d2d2b40e44 Mike Kravetz 2017-02-22 266 */
b43a9990055958 Mike Kravetz 2018-12-28 267 idx = linear_page_index(dst_vma, dst_addr);
ddeaab32a89f04 Mike Kravetz 2019-01-08 268 mapping = dst_vma->vm_file->f_mapping;
2b52c262f0e75d Wei Yang 2019-10-05 269 hash = hugetlb_fault_mutex_hash(mapping, idx, dst_addr);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 270 mutex_lock(&hugetlb_fault_mutex_table[hash]);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 271
60d4d2d2b40e44 Mike Kravetz 2017-02-22 272 err = -ENOMEM;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 273 dst_pte = huge_pte_alloc(dst_mm, dst_addr, huge_page_size(h));
60d4d2d2b40e44 Mike Kravetz 2017-02-22 274 if (!dst_pte) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 275 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 276 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 277 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 278
60d4d2d2b40e44 Mike Kravetz 2017-02-22 279 err = -EEXIST;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 280 dst_pteval = huge_ptep_get(dst_pte);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 281 if (!huge_pte_none(dst_pteval)) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 282 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 283 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 284 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 285
60d4d2d2b40e44 Mike Kravetz 2017-02-22 286 err = hugetlb_mcopy_atomic_pte(dst_mm, dst_pte, dst_vma,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 287 dst_addr, src_addr, &page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 288
60d4d2d2b40e44 Mike Kravetz 2017-02-22 289 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
1c9e8def43a345 Mike Kravetz 2017-02-22 290 vm_alloc_shared = vm_shared;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 291
60d4d2d2b40e44 Mike Kravetz 2017-02-22 292 cond_resched();
60d4d2d2b40e44 Mike Kravetz 2017-02-22 293
9e368259ad9883 Andrea Arcangeli 2018-11-30 294 if (unlikely(err == -ENOENT)) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 295 up_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 296 BUG_ON(!page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 297
60d4d2d2b40e44 Mike Kravetz 2017-02-22 298 err = copy_huge_page_from_user(page,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 299 (const void __user *)src_addr,
810a56b943e265 Mike Kravetz 2017-02-22 300 pages_per_huge_page(h), true);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 301 if (unlikely(err)) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 302 err = -EFAULT;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 303 goto out;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 304 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 305 down_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 306
60d4d2d2b40e44 Mike Kravetz 2017-02-22 307 dst_vma = NULL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 308 goto retry;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 309 } else
60d4d2d2b40e44 Mike Kravetz 2017-02-22 310 BUG_ON(page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 311
60d4d2d2b40e44 Mike Kravetz 2017-02-22 312 if (!err) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 313 dst_addr += vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 314 src_addr += vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 315 copied += vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 316
60d4d2d2b40e44 Mike Kravetz 2017-02-22 317 if (fatal_signal_pending(current))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 318 err = -EINTR;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 319 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 320 if (err)
60d4d2d2b40e44 Mike Kravetz 2017-02-22 321 break;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 322 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 323
60d4d2d2b40e44 Mike Kravetz 2017-02-22 324 out_unlock:
60d4d2d2b40e44 Mike Kravetz 2017-02-22 325 up_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 326 out:
21205bf8f77b23 Mike Kravetz 2017-02-22 327 if (page) {
21205bf8f77b23 Mike Kravetz 2017-02-22 328 /*
21205bf8f77b23 Mike Kravetz 2017-02-22 329 * We encountered an error and are about to free a newly
1c9e8def43a345 Mike Kravetz 2017-02-22 330 * allocated huge page.
1c9e8def43a345 Mike Kravetz 2017-02-22 331 *
1c9e8def43a345 Mike Kravetz 2017-02-22 332 * Reservation handling is very subtle, and is different for
1c9e8def43a345 Mike Kravetz 2017-02-22 333 * private and shared mappings. See the routine
1c9e8def43a345 Mike Kravetz 2017-02-22 334 * restore_reserve_on_error for details. Unfortunately, we
1c9e8def43a345 Mike Kravetz 2017-02-22 335 * can not call restore_reserve_on_error now as it would
1c9e8def43a345 Mike Kravetz 2017-02-22 336 * require holding mmap_sem.
1c9e8def43a345 Mike Kravetz 2017-02-22 337 *
1c9e8def43a345 Mike Kravetz 2017-02-22 338 * If a reservation for the page existed in the reservation
1c9e8def43a345 Mike Kravetz 2017-02-22 339 * map of a private mapping, the map was modified to indicate
1c9e8def43a345 Mike Kravetz 2017-02-22 340 * the reservation was consumed when the page was allocated.
1c9e8def43a345 Mike Kravetz 2017-02-22 341 * We clear the PagePrivate flag now so that the global
21205bf8f77b23 Mike Kravetz 2017-02-22 342 * reserve count will not be incremented in free_huge_page.
21205bf8f77b23 Mike Kravetz 2017-02-22 343 * The reservation map will still indicate the reservation
21205bf8f77b23 Mike Kravetz 2017-02-22 344 * was consumed and possibly prevent later page allocation.
1c9e8def43a345 Mike Kravetz 2017-02-22 345 * This is better than leaking a global reservation. If no
1c9e8def43a345 Mike Kravetz 2017-02-22 346 * reservation existed, it is still safe to clear PagePrivate
1c9e8def43a345 Mike Kravetz 2017-02-22 347 * as no adjustments to reservation counts were made during
1c9e8def43a345 Mike Kravetz 2017-02-22 348 * allocation.
1c9e8def43a345 Mike Kravetz 2017-02-22 349 *
1c9e8def43a345 Mike Kravetz 2017-02-22 350 * The reservation map for shared mappings indicates which
1c9e8def43a345 Mike Kravetz 2017-02-22 351 * pages have reservations. When a huge page is allocated
1c9e8def43a345 Mike Kravetz 2017-02-22 352 * for an address with a reservation, no change is made to
1c9e8def43a345 Mike Kravetz 2017-02-22 353 * the reserve map. In this case PagePrivate will be set
1c9e8def43a345 Mike Kravetz 2017-02-22 354 * to indicate that the global reservation count should be
1c9e8def43a345 Mike Kravetz 2017-02-22 355 * incremented when the page is freed. This is the desired
1c9e8def43a345 Mike Kravetz 2017-02-22 356 * behavior. However, when a huge page is allocated for an
1c9e8def43a345 Mike Kravetz 2017-02-22 357 * address without a reservation a reservation entry is added
1c9e8def43a345 Mike Kravetz 2017-02-22 358 * to the reservation map, and PagePrivate will not be set.
1c9e8def43a345 Mike Kravetz 2017-02-22 359 * When the page is freed, the global reserve count will NOT
1c9e8def43a345 Mike Kravetz 2017-02-22 360 * be incremented and it will appear as though we have leaked
1c9e8def43a345 Mike Kravetz 2017-02-22 361 * reserved page. In this case, set PagePrivate so that the
1c9e8def43a345 Mike Kravetz 2017-02-22 362 * global reserve count will be incremented to match the
1c9e8def43a345 Mike Kravetz 2017-02-22 363 * reservation map entry which was created.
1c9e8def43a345 Mike Kravetz 2017-02-22 364 *
1c9e8def43a345 Mike Kravetz 2017-02-22 365 * Note that vm_alloc_shared is based on the flags of the vma
1c9e8def43a345 Mike Kravetz 2017-02-22 366 * for which the page was originally allocated. dst_vma could
1c9e8def43a345 Mike Kravetz 2017-02-22 367 * be different or NULL on error.
21205bf8f77b23 Mike Kravetz 2017-02-22 368 */
1c9e8def43a345 Mike Kravetz 2017-02-22 369 if (vm_alloc_shared)
1c9e8def43a345 Mike Kravetz 2017-02-22 370 SetPagePrivate(page);
1c9e8def43a345 Mike Kravetz 2017-02-22 371 else
21205bf8f77b23 Mike Kravetz 2017-02-22 372 ClearPagePrivate(page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 373 put_page(page);
21205bf8f77b23 Mike Kravetz 2017-02-22 374 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 375 BUG_ON(copied < 0);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 376 BUG_ON(err > 0);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 377 BUG_ON(!copied && !err);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 378 return copied ? copied : err;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 379 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 380 #else /* !CONFIG_HUGETLB_PAGE */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 381 /* fail at build time if gcc attempts to use this */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 382 extern ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 383 struct vm_area_struct *dst_vma,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 384 unsigned long dst_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 385 unsigned long src_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 386 unsigned long len,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 387 bool zeropage);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 388 #endif /* CONFIG_HUGETLB_PAGE */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 389
:::::: The code at line 262 was first introduced by commit
:::::: 60d4d2d2b40e44cd36bfb6049e8d9e2055a24f8a userfaultfd: hugetlbfs: add __mcopy_atomic_hugetlb for huge page UFFDIO_COPY
:::::: TO: Mike Kravetz <mike.kravetz@oracle.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
WARNING: multiple messages have this Message-ID (diff)
From: kbuild test robot <lkp@intel.com>
To: Wei Yang <richardw.yang@linux.intel.com>
Cc: kbuild-all@01.org, mike.kravetz@oracle.com,
akpm@linux-foundation.org, hughd@google.com, aarcange@redhat.com,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Wei Yang <richardw.yang@linux.intel.com>
Subject: Re: [PATCH] hugetlb: remove unused hstate in hugetlb_fault_mutex_hash()
Date: Sun, 6 Oct 2019 10:25:48 +0800 [thread overview]
Message-ID: <201910061041.AvdQQNe9%lkp@intel.com> (raw)
In-Reply-To: <20191005003302.785-1-richardw.yang@linux.intel.com>
Hi Wei,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[cannot apply to v5.4-rc1 next-20191004]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Wei-Yang/hugetlb-remove-unused-hstate-in-hugetlb_fault_mutex_hash/20191005-090034
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-rc1-42-g38eda53-dirty
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
mm/userfaultfd.c:262:17: sparse: sparse: undefined identifier 'h'
mm/userfaultfd.c:273:75: sparse: sparse: undefined identifier 'h'
mm/userfaultfd.c:300:69: sparse: sparse: undefined identifier 'h'
>> mm/userfaultfd.c:262:17: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct hstate *h @@ got hstate *h @@
>> mm/userfaultfd.c:262:17: sparse: expected struct hstate *h
>> mm/userfaultfd.c:262:17: sparse: got bad type
mm/userfaultfd.c:273:75: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct hstate *h @@ got hstate *h @@
mm/userfaultfd.c:273:75: sparse: expected struct hstate *h
mm/userfaultfd.c:273:75: sparse: got bad type
mm/userfaultfd.c:300:69: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected struct hstate *h @@ got hstate *h @@
mm/userfaultfd.c:300:69: sparse: expected struct hstate *h
mm/userfaultfd.c:300:69: sparse: got bad type
vim +262 mm/userfaultfd.c
c1a4de99fada21 Andrea Arcangeli 2015-09-04 167
60d4d2d2b40e44 Mike Kravetz 2017-02-22 168 #ifdef CONFIG_HUGETLB_PAGE
60d4d2d2b40e44 Mike Kravetz 2017-02-22 169 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 170 * __mcopy_atomic processing for HUGETLB vmas. Note that this routine is
60d4d2d2b40e44 Mike Kravetz 2017-02-22 171 * called with mmap_sem held, it will release mmap_sem before returning.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 172 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 173 static __always_inline ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 174 struct vm_area_struct *dst_vma,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 175 unsigned long dst_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 176 unsigned long src_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 177 unsigned long len,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 178 bool zeropage)
60d4d2d2b40e44 Mike Kravetz 2017-02-22 179 {
1c9e8def43a345 Mike Kravetz 2017-02-22 180 int vm_alloc_shared = dst_vma->vm_flags & VM_SHARED;
1c9e8def43a345 Mike Kravetz 2017-02-22 181 int vm_shared = dst_vma->vm_flags & VM_SHARED;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 182 ssize_t err;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 183 pte_t *dst_pte;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 184 unsigned long src_addr, dst_addr;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 185 long copied;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 186 struct page *page;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 187 unsigned long vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 188 pgoff_t idx;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 189 u32 hash;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 190 struct address_space *mapping;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 191
60d4d2d2b40e44 Mike Kravetz 2017-02-22 192 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 193 * There is no default zero huge page for all huge page sizes as
60d4d2d2b40e44 Mike Kravetz 2017-02-22 194 * supported by hugetlb. A PMD_SIZE huge pages may exist as used
60d4d2d2b40e44 Mike Kravetz 2017-02-22 195 * by THP. Since we can not reliably insert a zero page, this
60d4d2d2b40e44 Mike Kravetz 2017-02-22 196 * feature is not supported.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 197 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 198 if (zeropage) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 199 up_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 200 return -EINVAL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 201 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 202
60d4d2d2b40e44 Mike Kravetz 2017-02-22 203 src_addr = src_start;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 204 dst_addr = dst_start;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 205 copied = 0;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 206 page = NULL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 207 vma_hpagesize = vma_kernel_pagesize(dst_vma);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 208
60d4d2d2b40e44 Mike Kravetz 2017-02-22 209 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 210 * Validate alignment based on huge page size
60d4d2d2b40e44 Mike Kravetz 2017-02-22 211 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 212 err = -EINVAL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 213 if (dst_start & (vma_hpagesize - 1) || len & (vma_hpagesize - 1))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 214 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 215
60d4d2d2b40e44 Mike Kravetz 2017-02-22 216 retry:
60d4d2d2b40e44 Mike Kravetz 2017-02-22 217 /*
60d4d2d2b40e44 Mike Kravetz 2017-02-22 218 * On routine entry dst_vma is set. If we had to drop mmap_sem and
60d4d2d2b40e44 Mike Kravetz 2017-02-22 219 * retry, dst_vma will be set to NULL and we must lookup again.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 220 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 221 if (!dst_vma) {
27d02568f529e9 Mike Rapoport 2017-02-24 222 err = -ENOENT;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 223 dst_vma = find_vma(dst_mm, dst_start);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 224 if (!dst_vma || !is_vm_hugetlb_page(dst_vma))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 225 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 226 /*
29ec90660d68bb Andrea Arcangeli 2018-11-30 227 * Check the vma is registered in uffd, this is
29ec90660d68bb Andrea Arcangeli 2018-11-30 228 * required to enforce the VM_MAYWRITE check done at
29ec90660d68bb Andrea Arcangeli 2018-11-30 229 * uffd registration time.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 230 */
27d02568f529e9 Mike Rapoport 2017-02-24 231 if (!dst_vma->vm_userfaultfd_ctx.ctx)
27d02568f529e9 Mike Rapoport 2017-02-24 232 goto out_unlock;
27d02568f529e9 Mike Rapoport 2017-02-24 233
60d4d2d2b40e44 Mike Kravetz 2017-02-22 234 if (dst_start < dst_vma->vm_start ||
60d4d2d2b40e44 Mike Kravetz 2017-02-22 235 dst_start + len > dst_vma->vm_end)
60d4d2d2b40e44 Mike Kravetz 2017-02-22 236 goto out_unlock;
1c9e8def43a345 Mike Kravetz 2017-02-22 237
27d02568f529e9 Mike Rapoport 2017-02-24 238 err = -EINVAL;
27d02568f529e9 Mike Rapoport 2017-02-24 239 if (vma_hpagesize != vma_kernel_pagesize(dst_vma))
27d02568f529e9 Mike Rapoport 2017-02-24 240 goto out_unlock;
27d02568f529e9 Mike Rapoport 2017-02-24 241
1c9e8def43a345 Mike Kravetz 2017-02-22 242 vm_shared = dst_vma->vm_flags & VM_SHARED;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 243 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 244
60d4d2d2b40e44 Mike Kravetz 2017-02-22 245 if (WARN_ON(dst_addr & (vma_hpagesize - 1) ||
60d4d2d2b40e44 Mike Kravetz 2017-02-22 246 (len - copied) & (vma_hpagesize - 1)))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 247 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 248
60d4d2d2b40e44 Mike Kravetz 2017-02-22 249 /*
1c9e8def43a345 Mike Kravetz 2017-02-22 250 * If not shared, ensure the dst_vma has a anon_vma.
60d4d2d2b40e44 Mike Kravetz 2017-02-22 251 */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 252 err = -ENOMEM;
1c9e8def43a345 Mike Kravetz 2017-02-22 253 if (!vm_shared) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 254 if (unlikely(anon_vma_prepare(dst_vma)))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 255 goto out_unlock;
1c9e8def43a345 Mike Kravetz 2017-02-22 256 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 257
60d4d2d2b40e44 Mike Kravetz 2017-02-22 258 while (src_addr < src_start + len) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 259 pte_t dst_pteval;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 260
60d4d2d2b40e44 Mike Kravetz 2017-02-22 261 BUG_ON(dst_addr >= dst_start + len);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 @262 VM_BUG_ON(dst_addr & ~huge_page_mask(h));
60d4d2d2b40e44 Mike Kravetz 2017-02-22 263
60d4d2d2b40e44 Mike Kravetz 2017-02-22 264 /*
ddeaab32a89f04 Mike Kravetz 2019-01-08 265 * Serialize via hugetlb_fault_mutex
60d4d2d2b40e44 Mike Kravetz 2017-02-22 266 */
b43a9990055958 Mike Kravetz 2018-12-28 267 idx = linear_page_index(dst_vma, dst_addr);
ddeaab32a89f04 Mike Kravetz 2019-01-08 268 mapping = dst_vma->vm_file->f_mapping;
2b52c262f0e75d Wei Yang 2019-10-05 269 hash = hugetlb_fault_mutex_hash(mapping, idx, dst_addr);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 270 mutex_lock(&hugetlb_fault_mutex_table[hash]);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 271
60d4d2d2b40e44 Mike Kravetz 2017-02-22 272 err = -ENOMEM;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 273 dst_pte = huge_pte_alloc(dst_mm, dst_addr, huge_page_size(h));
60d4d2d2b40e44 Mike Kravetz 2017-02-22 274 if (!dst_pte) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 275 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 276 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 277 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 278
60d4d2d2b40e44 Mike Kravetz 2017-02-22 279 err = -EEXIST;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 280 dst_pteval = huge_ptep_get(dst_pte);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 281 if (!huge_pte_none(dst_pteval)) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 282 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 283 goto out_unlock;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 284 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 285
60d4d2d2b40e44 Mike Kravetz 2017-02-22 286 err = hugetlb_mcopy_atomic_pte(dst_mm, dst_pte, dst_vma,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 287 dst_addr, src_addr, &page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 288
60d4d2d2b40e44 Mike Kravetz 2017-02-22 289 mutex_unlock(&hugetlb_fault_mutex_table[hash]);
1c9e8def43a345 Mike Kravetz 2017-02-22 290 vm_alloc_shared = vm_shared;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 291
60d4d2d2b40e44 Mike Kravetz 2017-02-22 292 cond_resched();
60d4d2d2b40e44 Mike Kravetz 2017-02-22 293
9e368259ad9883 Andrea Arcangeli 2018-11-30 294 if (unlikely(err == -ENOENT)) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 295 up_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 296 BUG_ON(!page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 297
60d4d2d2b40e44 Mike Kravetz 2017-02-22 298 err = copy_huge_page_from_user(page,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 299 (const void __user *)src_addr,
810a56b943e265 Mike Kravetz 2017-02-22 300 pages_per_huge_page(h), true);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 301 if (unlikely(err)) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 302 err = -EFAULT;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 303 goto out;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 304 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 305 down_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 306
60d4d2d2b40e44 Mike Kravetz 2017-02-22 307 dst_vma = NULL;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 308 goto retry;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 309 } else
60d4d2d2b40e44 Mike Kravetz 2017-02-22 310 BUG_ON(page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 311
60d4d2d2b40e44 Mike Kravetz 2017-02-22 312 if (!err) {
60d4d2d2b40e44 Mike Kravetz 2017-02-22 313 dst_addr += vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 314 src_addr += vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 315 copied += vma_hpagesize;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 316
60d4d2d2b40e44 Mike Kravetz 2017-02-22 317 if (fatal_signal_pending(current))
60d4d2d2b40e44 Mike Kravetz 2017-02-22 318 err = -EINTR;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 319 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 320 if (err)
60d4d2d2b40e44 Mike Kravetz 2017-02-22 321 break;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 322 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 323
60d4d2d2b40e44 Mike Kravetz 2017-02-22 324 out_unlock:
60d4d2d2b40e44 Mike Kravetz 2017-02-22 325 up_read(&dst_mm->mmap_sem);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 326 out:
21205bf8f77b23 Mike Kravetz 2017-02-22 327 if (page) {
21205bf8f77b23 Mike Kravetz 2017-02-22 328 /*
21205bf8f77b23 Mike Kravetz 2017-02-22 329 * We encountered an error and are about to free a newly
1c9e8def43a345 Mike Kravetz 2017-02-22 330 * allocated huge page.
1c9e8def43a345 Mike Kravetz 2017-02-22 331 *
1c9e8def43a345 Mike Kravetz 2017-02-22 332 * Reservation handling is very subtle, and is different for
1c9e8def43a345 Mike Kravetz 2017-02-22 333 * private and shared mappings. See the routine
1c9e8def43a345 Mike Kravetz 2017-02-22 334 * restore_reserve_on_error for details. Unfortunately, we
1c9e8def43a345 Mike Kravetz 2017-02-22 335 * can not call restore_reserve_on_error now as it would
1c9e8def43a345 Mike Kravetz 2017-02-22 336 * require holding mmap_sem.
1c9e8def43a345 Mike Kravetz 2017-02-22 337 *
1c9e8def43a345 Mike Kravetz 2017-02-22 338 * If a reservation for the page existed in the reservation
1c9e8def43a345 Mike Kravetz 2017-02-22 339 * map of a private mapping, the map was modified to indicate
1c9e8def43a345 Mike Kravetz 2017-02-22 340 * the reservation was consumed when the page was allocated.
1c9e8def43a345 Mike Kravetz 2017-02-22 341 * We clear the PagePrivate flag now so that the global
21205bf8f77b23 Mike Kravetz 2017-02-22 342 * reserve count will not be incremented in free_huge_page.
21205bf8f77b23 Mike Kravetz 2017-02-22 343 * The reservation map will still indicate the reservation
21205bf8f77b23 Mike Kravetz 2017-02-22 344 * was consumed and possibly prevent later page allocation.
1c9e8def43a345 Mike Kravetz 2017-02-22 345 * This is better than leaking a global reservation. If no
1c9e8def43a345 Mike Kravetz 2017-02-22 346 * reservation existed, it is still safe to clear PagePrivate
1c9e8def43a345 Mike Kravetz 2017-02-22 347 * as no adjustments to reservation counts were made during
1c9e8def43a345 Mike Kravetz 2017-02-22 348 * allocation.
1c9e8def43a345 Mike Kravetz 2017-02-22 349 *
1c9e8def43a345 Mike Kravetz 2017-02-22 350 * The reservation map for shared mappings indicates which
1c9e8def43a345 Mike Kravetz 2017-02-22 351 * pages have reservations. When a huge page is allocated
1c9e8def43a345 Mike Kravetz 2017-02-22 352 * for an address with a reservation, no change is made to
1c9e8def43a345 Mike Kravetz 2017-02-22 353 * the reserve map. In this case PagePrivate will be set
1c9e8def43a345 Mike Kravetz 2017-02-22 354 * to indicate that the global reservation count should be
1c9e8def43a345 Mike Kravetz 2017-02-22 355 * incremented when the page is freed. This is the desired
1c9e8def43a345 Mike Kravetz 2017-02-22 356 * behavior. However, when a huge page is allocated for an
1c9e8def43a345 Mike Kravetz 2017-02-22 357 * address without a reservation a reservation entry is added
1c9e8def43a345 Mike Kravetz 2017-02-22 358 * to the reservation map, and PagePrivate will not be set.
1c9e8def43a345 Mike Kravetz 2017-02-22 359 * When the page is freed, the global reserve count will NOT
1c9e8def43a345 Mike Kravetz 2017-02-22 360 * be incremented and it will appear as though we have leaked
1c9e8def43a345 Mike Kravetz 2017-02-22 361 * reserved page. In this case, set PagePrivate so that the
1c9e8def43a345 Mike Kravetz 2017-02-22 362 * global reserve count will be incremented to match the
1c9e8def43a345 Mike Kravetz 2017-02-22 363 * reservation map entry which was created.
1c9e8def43a345 Mike Kravetz 2017-02-22 364 *
1c9e8def43a345 Mike Kravetz 2017-02-22 365 * Note that vm_alloc_shared is based on the flags of the vma
1c9e8def43a345 Mike Kravetz 2017-02-22 366 * for which the page was originally allocated. dst_vma could
1c9e8def43a345 Mike Kravetz 2017-02-22 367 * be different or NULL on error.
21205bf8f77b23 Mike Kravetz 2017-02-22 368 */
1c9e8def43a345 Mike Kravetz 2017-02-22 369 if (vm_alloc_shared)
1c9e8def43a345 Mike Kravetz 2017-02-22 370 SetPagePrivate(page);
1c9e8def43a345 Mike Kravetz 2017-02-22 371 else
21205bf8f77b23 Mike Kravetz 2017-02-22 372 ClearPagePrivate(page);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 373 put_page(page);
21205bf8f77b23 Mike Kravetz 2017-02-22 374 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 375 BUG_ON(copied < 0);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 376 BUG_ON(err > 0);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 377 BUG_ON(!copied && !err);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 378 return copied ? copied : err;
60d4d2d2b40e44 Mike Kravetz 2017-02-22 379 }
60d4d2d2b40e44 Mike Kravetz 2017-02-22 380 #else /* !CONFIG_HUGETLB_PAGE */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 381 /* fail at build time if gcc attempts to use this */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 382 extern ssize_t __mcopy_atomic_hugetlb(struct mm_struct *dst_mm,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 383 struct vm_area_struct *dst_vma,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 384 unsigned long dst_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 385 unsigned long src_start,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 386 unsigned long len,
60d4d2d2b40e44 Mike Kravetz 2017-02-22 387 bool zeropage);
60d4d2d2b40e44 Mike Kravetz 2017-02-22 388 #endif /* CONFIG_HUGETLB_PAGE */
60d4d2d2b40e44 Mike Kravetz 2017-02-22 389
:::::: The code at line 262 was first introduced by commit
:::::: 60d4d2d2b40e44cd36bfb6049e8d9e2055a24f8a userfaultfd: hugetlbfs: add __mcopy_atomic_hugetlb for huge page UFFDIO_COPY
:::::: TO: Mike Kravetz <mike.kravetz@oracle.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
next prev parent reply other threads:[~2019-10-06 2:25 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-27 7:00 [PATCH v2 1/3] userfaultfd: use vma_pagesize for all huge page size calculation Wei Yang
2019-09-27 7:00 ` [PATCH v2 2/3] userfaultfd: remove unnecessary warn_on in __mcopy_atomic_hugetlb Wei Yang
2019-09-27 7:00 ` [PATCH v2 3/3] userfaultfd: wrap the common dst_vma check into an inlined function Wei Yang
2019-09-27 22:10 ` [PATCH v2 1/3] userfaultfd: use vma_pagesize for all huge page size calculation Andrew Morton
2019-09-27 22:21 ` Mike Kravetz
2019-10-05 0:34 ` Wei Yang
2019-09-29 0:45 ` Wei Yang
2019-10-07 22:55 ` Mike Kravetz
2019-10-08 0:57 ` Wei Yang
2019-10-05 0:33 ` [PATCH] hugetlb: remove unused hstate in hugetlb_fault_mutex_hash() Wei Yang
2019-10-05 5:42 ` kbuild test robot
2019-10-05 5:42 ` kbuild test robot
2019-10-05 5:43 ` kbuild test robot
2019-10-05 5:43 ` kbuild test robot
2019-10-06 2:25 ` kbuild test robot [this message]
2019-10-06 2:25 ` kbuild test robot
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=201910061041.AvdQQNe9%lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@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.