Message ID | 1622589753-9206-2-git-send-email-mlin@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm: adds MAP_NOSIGBUS extension for shmem read | expand |
Hi Ming, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on linux/master] [also build test WARNING on arm64/for-next/core powerpc/next asm-generic/master linus/master v5.13-rc4] [cannot apply to hnaz-linux-mm/master tip/x86/core next-20210601] [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/Ming-Lin/mm-adds-MAP_NOSIGBUS-extension-for-shmem-read/20210602-072403 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git dd860052c99b1e088352bdd4fb7aef46f8d2ef47 config: x86_64-allyesconfig (attached as .config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 reproduce (this is a W=1 build): # https://github.com/0day-ci/linux/commit/0b6b8b44f566199698248899d0fef7466ba6b0f3 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Ming-Lin/mm-adds-MAP_NOSIGBUS-extension-for-shmem-read/20210602-072403 git checkout 0b6b8b44f566199698248899d0fef7466ba6b0f3 # save the attached .config to linux build tree make W=1 ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from drivers/infiniband/hw/hfi1/trace.h:57, from drivers/infiniband/hw/hfi1/file_ops.c:61: drivers/infiniband/hw/hfi1/file_ops.c: In function 'hfi1_file_mmap': >> drivers/infiniband/hw/hfi1/file_ops.c:572:5: warning: format '%lx' expects argument of type 'long unsigned int', but argument 11 has type 'vm_flags_t' {aka 'long long unsigned int'} [-Wformat=] 572 | "%u:%u type:%u io/vf:%d/%d, addr:0x%llx, len:%lu(%lu), flags:0x%lx\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 573 | ctxt, subctxt, type, mapio, vmf, memaddr, memlen, 574 | vma->vm_end - vma->vm_start, vma->vm_flags); | ~~~~~~~~~~~~~ | | | vm_flags_t {aka long long unsigned int} drivers/infiniband/hw/hfi1/trace_dbg.h:133:33: note: in definition of macro 'hfi1_cdbg' 133 | __hfi1_trace_##which(__func__, fmt, ##__VA_ARGS__) | ^~~ drivers/infiniband/hw/hfi1/file_ops.c:572:70: note: format string is defined here 572 | "%u:%u type:%u io/vf:%d/%d, addr:0x%llx, len:%lu(%lu), flags:0x%lx\n", | ~~^ | | | long unsigned int | %llx -- In file included from include/linux/device.h:15, from include/linux/pci.h:37, from drivers/infiniband/hw/qib/qib_file_ops.c:35: drivers/infiniband/hw/qib/qib_file_ops.c: In function 'mmap_rcvegrbufs': >> drivers/infiniband/hw/qib/qib_file_ops.c:849:4: warning: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'vm_flags_t' {aka 'long long unsigned int'} [-Wformat=] 849 | "Can't map eager buffers as writable (flags=%lx)\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/dev_printk.h:19:22: note: in definition of macro 'dev_fmt' 19 | #define dev_fmt(fmt) fmt | ^~~ drivers/infiniband/hw/qib/qib.h:1472:2: note: in expansion of macro 'dev_info' 1472 | dev_info(&(pcidev)->dev, fmt, ##__VA_ARGS__) | ^~~~~~~~ drivers/infiniband/hw/qib/qib_file_ops.c:848:3: note: in expansion of macro 'qib_devinfo' 848 | qib_devinfo(dd->pcidev, | ^~~~~~~~~~~ drivers/infiniband/hw/qib/qib_file_ops.c:849:50: note: format string is defined here 849 | "Can't map eager buffers as writable (flags=%lx)\n", | ~~^ | | | long unsigned int | %llx In file included from include/linux/device.h:15, from include/linux/pci.h:37, from drivers/infiniband/hw/qib/qib_file_ops.c:35: drivers/infiniband/hw/qib/qib_file_ops.c: In function 'mmap_kvaddr': drivers/infiniband/hw/qib/qib_file_ops.c:938:6: warning: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'vm_flags_t' {aka 'long long unsigned int'} [-Wformat=] 938 | "Can't map eager buffers as writable (flags=%lx)\n", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/dev_printk.h:19:22: note: in definition of macro 'dev_fmt' 19 | #define dev_fmt(fmt) fmt | ^~~ drivers/infiniband/hw/qib/qib.h:1472:2: note: in expansion of macro 'dev_info' 1472 | dev_info(&(pcidev)->dev, fmt, ##__VA_ARGS__) | ^~~~~~~~ drivers/infiniband/hw/qib/qib_file_ops.c:937:4: note: in expansion of macro 'qib_devinfo' 937 | qib_devinfo(dd->pcidev, | ^~~~~~~~~~~ drivers/infiniband/hw/qib/qib_file_ops.c:938:52: note: format string is defined here 938 | "Can't map eager buffers as writable (flags=%lx)\n", | ~~^ | | | long unsigned int | %llx -- In file included from drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_priv.h:48, from drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.c:38: drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.c: In function 'kfd_mmio_mmap': >> drivers/gpu/drm/amd/amdgpu/../amdgpu/amdgpu.h:35:21: warning: format '%lX' expects argument of type 'long unsigned int', but argument 6 has type 'vm_flags_t' {aka 'long long unsigned int'} [-Wformat=] 35 | #define pr_fmt(fmt) "amdgpu: " fmt | ^~~~~~~~~~ include/linux/dynamic_debug.h:129:15: note: in expansion of macro 'pr_fmt' 129 | func(&id, ##__VA_ARGS__); \ | ^~~~~~~~~~~ include/linux/dynamic_debug.h:147:2: note: in expansion of macro '__dynamic_func_call' 147 | __dynamic_func_call(__UNIQUE_ID(ddebug), fmt, func, ##__VA_ARGS__) | ^~~~~~~~~~~~~~~~~~~ include/linux/dynamic_debug.h:157:2: note: in expansion of macro '_dynamic_func_call' 157 | _dynamic_func_call(fmt, __dynamic_pr_debug, \ | ^~~~~~~~~~~~~~~~~~ include/linux/printk.h:424:2: note: in expansion of macro 'dynamic_pr_debug' 424 | dynamic_pr_debug(fmt, ##__VA_ARGS__) | ^~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.c:1957:2: note: in expansion of macro 'pr_debug' 1957 | pr_debug("pasid 0x%x mapping mmio page\n" | ^~~~~~~~ drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.c:1960:39: note: format string is defined here 1960 | " vm_flags == 0x%04lX\n" | ~~~~^ | | | long unsigned int | %04llX vim +572 drivers/infiniband/hw/hfi1/file_ops.c 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 347 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 348 static int hfi1_file_mmap(struct file *fp, struct vm_area_struct *vma) 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 349 { 9e10af4787ac51 drivers/staging/rdma/hfi1/file_ops.c Ira Weiny 2015-10-30 350 struct hfi1_filedata *fd = fp->private_data; 9e10af4787ac51 drivers/staging/rdma/hfi1/file_ops.c Ira Weiny 2015-10-30 351 struct hfi1_ctxtdata *uctxt = fd->uctxt; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 352 struct hfi1_devdata *dd; 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 353 unsigned long flags; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 354 u64 token = vma->vm_pgoff << PAGE_SHIFT, 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 355 memaddr = 0; 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 356 void *memvirt = NULL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 357 u8 subctxt, mapio = 0, vmf = 0, type; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 358 ssize_t memlen = 0; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 359 int ret = 0; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 360 u16 ctxt; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 361 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 362 if (!is_valid_mmap(token) || !uctxt || 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 363 !(vma->vm_flags & VM_SHARED)) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 364 ret = -EINVAL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 365 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 366 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 367 dd = uctxt->dd; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 368 ctxt = HFI1_MMAP_TOKEN_GET(CTXT, token); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 369 subctxt = HFI1_MMAP_TOKEN_GET(SUBCTXT, token); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 370 type = HFI1_MMAP_TOKEN_GET(TYPE, token); 9e10af4787ac51 drivers/staging/rdma/hfi1/file_ops.c Ira Weiny 2015-10-30 371 if (ctxt != uctxt->ctxt || subctxt != fd->subctxt) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 372 ret = -EINVAL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 373 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 374 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 375 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 376 flags = vma->vm_flags; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 377 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 378 switch (type) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 379 case PIO_BUFS: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 380 case PIO_BUFS_SOP: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 381 memaddr = ((dd->physaddr + TXE_PIO_SEND) + 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 382 /* chip pio base */ d32cf44a62716d drivers/staging/rdma/hfi1/file_ops.c Amitoj Kaur Chawla 2015-10-16 383 (uctxt->sc->hw_context * BIT(16))) + 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 384 /* 64K PIO space / ctxt */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 385 (type == PIO_BUFS_SOP ? 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 386 (TXE_PIO_SIZE / 2) : 0); /* sop? */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 387 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 388 * Map only the amount allocated to the context, not the 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 389 * entire available context's PIO space. 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 390 */ 437b29d1159af1 drivers/staging/rdma/hfi1/file_ops.c Amitoj Kaur Chawla 2016-03-04 391 memlen = PAGE_ALIGN(uctxt->sc->credits * PIO_BLOCK_SIZE); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 392 flags &= ~VM_MAYREAD; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 393 flags |= VM_DONTCOPY | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 394 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 395 mapio = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 396 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 397 case PIO_CRED: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 398 if (flags & VM_WRITE) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 399 ret = -EPERM; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 400 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 401 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 402 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 403 * The credit return location for this context could be on the 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 404 * second or third page allocated for credit returns (if number 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 405 * of enabled contexts > 64 and 128 respectively). 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 406 */ 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 407 memvirt = dd->cr_base[uctxt->numa_id].va; 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 408 memaddr = virt_to_phys(memvirt) + 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 409 (((u64)uctxt->sc->hw_free - 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 410 (u64)dd->cr_base[uctxt->numa_id].va) & PAGE_MASK); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 411 memlen = PAGE_SIZE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 412 flags &= ~VM_MAYWRITE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 413 flags |= VM_DONTCOPY | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 414 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 415 * The driver has already allocated memory for credit 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 416 * returns and programmed it into the chip. Has that 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 417 * memory been flagged as non-cached? 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 418 */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 419 /* vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 420 mapio = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 421 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 422 case RCV_HDRQ: b25784312840bc drivers/infiniband/hw/hfi1/file_ops.c Mike Marciniszyn 2018-06-20 423 memlen = rcvhdrq_size(uctxt); 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 424 memvirt = uctxt->rcvhdrq; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 425 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 426 case RCV_EGRBUF: { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 427 unsigned long addr; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 428 int i; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 429 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 430 * The RcvEgr buffer need to be handled differently 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 431 * as multiple non-contiguous pages need to be mapped 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 432 * into the user process. 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 433 */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 434 memlen = uctxt->egrbufs.size; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 435 if ((vma->vm_end - vma->vm_start) != memlen) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 436 dd_dev_err(dd, "Eager buffer map size invalid (%lu != %lu)\n", 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 437 (vma->vm_end - vma->vm_start), memlen); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 438 ret = -EINVAL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 439 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 440 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 441 if (vma->vm_flags & VM_WRITE) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 442 ret = -EPERM; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 443 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 444 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 445 vma->vm_flags &= ~VM_MAYWRITE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 446 addr = vma->vm_start; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 447 for (i = 0 ; i < uctxt->egrbufs.numbufs; i++) { 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 448 memlen = uctxt->egrbufs.buffers[i].len; 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 449 memvirt = uctxt->egrbufs.buffers[i].addr; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 450 ret = remap_pfn_range( 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 451 vma, addr, 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 452 /* 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 453 * virt_to_pfn() does the same, but 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 454 * it's not available on x86_64 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 455 * when CONFIG_MMU is enabled. 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 456 */ 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 457 PFN_DOWN(__pa(memvirt)), 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 458 memlen, 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 459 vma->vm_page_prot); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 460 if (ret < 0) 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 461 goto done; 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 462 addr += memlen; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 463 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 464 ret = 0; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 465 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 466 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 467 case UREGS: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 468 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 469 * Map only the page that contains this context's user 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 470 * registers. 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 471 */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 472 memaddr = (unsigned long) 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 473 (dd->physaddr + RXE_PER_CONTEXT_USER) 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 474 + (uctxt->ctxt * RXE_PER_CONTEXT_SIZE); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 475 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 476 * TidFlow table is on the same page as the rest of the 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 477 * user registers. 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 478 */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 479 memlen = PAGE_SIZE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 480 flags |= VM_DONTCOPY | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 481 vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 482 mapio = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 483 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 484 case EVENTS: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 485 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 486 * Use the page where this context's flags are. User level 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 487 * knows where it's own bitmap is within the page. 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 488 */ 21e5acc06403f6 drivers/infiniband/hw/hfi1/file_ops.c Michael J. Ruhl 2017-09-26 489 memaddr = (unsigned long) 21e5acc06403f6 drivers/infiniband/hw/hfi1/file_ops.c Michael J. Ruhl 2017-09-26 490 (dd->events + uctxt_offset(uctxt)) & PAGE_MASK; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 491 memlen = PAGE_SIZE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 492 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 493 * v3.7 removes VM_RESERVED but the effect is kept by 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 494 * using VM_IO. 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 495 */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 496 flags |= VM_IO | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 497 vmf = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 498 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 499 case STATUS: 7709b0dc265f28 drivers/infiniband/hw/hfi1/file_ops.c Michael J. Ruhl 2019-01-17 500 if (flags & VM_WRITE) { 12220267645cb7 drivers/infiniband/hw/hfi1/file_ops.c Ira Weiny 2017-04-09 501 ret = -EPERM; 12220267645cb7 drivers/infiniband/hw/hfi1/file_ops.c Ira Weiny 2017-04-09 502 goto done; 12220267645cb7 drivers/infiniband/hw/hfi1/file_ops.c Ira Weiny 2017-04-09 503 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 504 memaddr = kvirt_to_phys((void *)dd->status); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 505 memlen = PAGE_SIZE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 506 flags |= VM_IO | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 507 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 508 case RTAIL: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 509 if (!HFI1_CAP_IS_USET(DMA_RTAIL)) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 510 /* 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 511 * If the memory allocation failed, the context alloc 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 512 * also would have failed, so we would never get here 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 513 */ 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 514 ret = -EINVAL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 515 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 516 } 2fb3b5ae1ca771 drivers/infiniband/hw/hfi1/file_ops.c Mike Marciniszyn 2019-12-19 517 if ((flags & VM_WRITE) || !hfi1_rcvhdrtail_kvaddr(uctxt)) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 518 ret = -EPERM; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 519 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 520 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 521 memlen = PAGE_SIZE; 2fb3b5ae1ca771 drivers/infiniband/hw/hfi1/file_ops.c Mike Marciniszyn 2019-12-19 522 memvirt = (void *)hfi1_rcvhdrtail_kvaddr(uctxt); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 523 flags &= ~VM_MAYWRITE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 524 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 525 case SUBCTXT_UREGS: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 526 memaddr = (u64)uctxt->subctxt_uregbase; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 527 memlen = PAGE_SIZE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 528 flags |= VM_IO | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 529 vmf = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 530 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 531 case SUBCTXT_RCV_HDRQ: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 532 memaddr = (u64)uctxt->subctxt_rcvhdr_base; b25784312840bc drivers/infiniband/hw/hfi1/file_ops.c Mike Marciniszyn 2018-06-20 533 memlen = rcvhdrq_size(uctxt) * uctxt->subctxt_cnt; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 534 flags |= VM_IO | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 535 vmf = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 536 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 537 case SUBCTXT_EGRBUF: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 538 memaddr = (u64)uctxt->subctxt_rcvegrbuf; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 539 memlen = uctxt->egrbufs.size * uctxt->subctxt_cnt; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 540 flags |= VM_IO | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 541 flags &= ~VM_MAYWRITE; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 542 vmf = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 543 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 544 case SDMA_COMP: { 9e10af4787ac51 drivers/staging/rdma/hfi1/file_ops.c Ira Weiny 2015-10-30 545 struct hfi1_user_sdma_comp_q *cq = fd->cq; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 546 9e10af4787ac51 drivers/staging/rdma/hfi1/file_ops.c Ira Weiny 2015-10-30 547 if (!cq) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 548 ret = -EFAULT; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 549 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 550 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 551 memaddr = (u64)cq->comps; 437b29d1159af1 drivers/staging/rdma/hfi1/file_ops.c Amitoj Kaur Chawla 2016-03-04 552 memlen = PAGE_ALIGN(sizeof(*cq->comps) * cq->nentries); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 553 flags |= VM_IO | VM_DONTEXPAND; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 554 vmf = 1; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 555 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 556 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 557 default: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 558 ret = -EINVAL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 559 break; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 560 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 561 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 562 if ((vma->vm_end - vma->vm_start) != memlen) { 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 563 hfi1_cdbg(PROC, "%u:%u Memory size mismatch %lu:%lu", 9e10af4787ac51 drivers/staging/rdma/hfi1/file_ops.c Ira Weiny 2015-10-30 564 uctxt->ctxt, fd->subctxt, 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 565 (vma->vm_end - vma->vm_start), memlen); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 566 ret = -EINVAL; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 567 goto done; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 568 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 569 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 570 vma->vm_flags = flags; 6c63e4238acad0 drivers/staging/rdma/hfi1/file_ops.c Sebastian Sanchez 2015-11-06 571 hfi1_cdbg(PROC, 6c63e4238acad0 drivers/staging/rdma/hfi1/file_ops.c Sebastian Sanchez 2015-11-06 @572 "%u:%u type:%u io/vf:%d/%d, addr:0x%llx, len:%lu(%lu), flags:0x%lx\n", 6c63e4238acad0 drivers/staging/rdma/hfi1/file_ops.c Sebastian Sanchez 2015-11-06 573 ctxt, subctxt, type, mapio, vmf, memaddr, memlen, 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 574 vma->vm_end - vma->vm_start, vma->vm_flags); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 575 if (vmf) { 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 576 vma->vm_pgoff = PFN_DOWN(memaddr); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 577 vma->vm_ops = &vm_ops; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 578 ret = 0; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 579 } else if (mapio) { 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 580 ret = io_remap_pfn_range(vma, vma->vm_start, 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 581 PFN_DOWN(memaddr), 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 582 memlen, 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 583 vma->vm_page_prot); 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 584 } else if (memvirt) { 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 585 ret = remap_pfn_range(vma, vma->vm_start, 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 586 PFN_DOWN(__pa(memvirt)), 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 587 memlen, 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 588 vma->vm_page_prot); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 589 } else { 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 590 ret = remap_pfn_range(vma, vma->vm_start, 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 591 PFN_DOWN(memaddr), 60368186fd8538 drivers/infiniband/hw/hfi1/file_ops.c Tymoteusz Kielan 2016-09-06 592 memlen, 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 593 vma->vm_page_prot); 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 594 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 595 done: 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 596 return ret; 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 597 } 7724105686e718 drivers/staging/rdma/hfi1/file_ops.c Mike Marciniszyn 2015-07-30 598 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Ming,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on linux/master]
[also build test ERROR on arm64/for-next/core powerpc/next asm-generic/master linus/master v5.13-rc4]
[cannot apply to hnaz-linux-mm/master tip/x86/core next-20210601]
[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/Ming-Lin/mm-adds-MAP_NOSIGBUS-extension-for-shmem-read/20210602-072403
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git dd860052c99b1e088352bdd4fb7aef46f8d2ef47
config: s390-randconfig-r011-20210601 (attached as .config)
compiler: s390-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/0b6b8b44f566199698248899d0fef7466ba6b0f3
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ming-Lin/mm-adds-MAP_NOSIGBUS-extension-for-shmem-read/20210602-072403
git checkout 0b6b8b44f566199698248899d0fef7466ba6b0f3
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=s390
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
arch/s390/mm/gmap.c: In function 'gmap_mark_unmergeable':
>> arch/s390/mm/gmap.c:2577:25: error: passing argument 5 of 'ksm_madvise' from incompatible pointer type [-Werror=incompatible-pointer-types]
2577 | MADV_UNMERGEABLE, &vma->vm_flags);
| ^~~~~~~~~~~~~~
| |
| vm_flags_t * {aka long long unsigned int *}
In file included from arch/s390/mm/gmap.c:18:
include/linux/ksm.h:70:49: note: expected 'long unsigned int *' but argument is of type 'vm_flags_t *' {aka 'long long unsigned int *'}
70 | unsigned long end, int advice, unsigned long *vm_flags)
| ~~~~~~~~~~~~~~~^~~~~~~~
cc1: some warnings being treated as errors
vim +/ksm_madvise +2577 arch/s390/mm/gmap.c
1e133ab296f3ff Martin Schwidefsky 2016-03-08 2568
fa0c5eabbdd330 Janosch Frank 2019-07-16 2569 int gmap_mark_unmergeable(void)
fa0c5eabbdd330 Janosch Frank 2019-07-16 2570 {
fa0c5eabbdd330 Janosch Frank 2019-07-16 2571 struct mm_struct *mm = current->mm;
fa0c5eabbdd330 Janosch Frank 2019-07-16 2572 struct vm_area_struct *vma;
7a2653612bb6f1 Christian Borntraeger 2020-03-27 2573 int ret;
fa0c5eabbdd330 Janosch Frank 2019-07-16 2574
fa0c5eabbdd330 Janosch Frank 2019-07-16 2575 for (vma = mm->mmap; vma; vma = vma->vm_next) {
7a2653612bb6f1 Christian Borntraeger 2020-03-27 2576 ret = ksm_madvise(vma, vma->vm_start, vma->vm_end,
7a2653612bb6f1 Christian Borntraeger 2020-03-27 @2577 MADV_UNMERGEABLE, &vma->vm_flags);
7a2653612bb6f1 Christian Borntraeger 2020-03-27 2578 if (ret)
7a2653612bb6f1 Christian Borntraeger 2020-03-27 2579 return ret;
fa0c5eabbdd330 Janosch Frank 2019-07-16 2580 }
fa0c5eabbdd330 Janosch Frank 2019-07-16 2581 mm->def_flags &= ~VM_MERGEABLE;
fa0c5eabbdd330 Janosch Frank 2019-07-16 2582 return 0;
fa0c5eabbdd330 Janosch Frank 2019-07-16 2583 }
fa0c5eabbdd330 Janosch Frank 2019-07-16 2584 EXPORT_SYMBOL_GPL(gmap_mark_unmergeable);
fa0c5eabbdd330 Janosch Frank 2019-07-16 2585
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 9f1d856..c6960ea 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1658,7 +1658,6 @@ config ARM64_MTE depends on AS_HAS_LSE_ATOMICS # Required for tag checking in the uaccess routines depends on ARM64_PAN - select ARCH_USES_HIGH_VMA_FLAGS help Memory Tagging (part of the ARMv8.5 Extensions) provides architectural support for run-time, always-on detection of diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 088dd2a..5c1b49e 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -940,7 +940,6 @@ config PPC_MEM_KEYS prompt "PowerPC Memory Protection Keys" def_bool y depends on PPC_BOOK3S_64 - select ARCH_USES_HIGH_VMA_FLAGS select ARCH_HAS_PKEYS help Memory Protection Keys provides a mechanism for enforcing diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 0045e1b..a885336 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -1874,7 +1874,6 @@ config X86_INTEL_MEMORY_PROTECTION_KEYS def_bool y # Note: only available in 64-bit mode depends on X86_64 && (CPU_SUP_INTEL || CPU_SUP_AMD) - select ARCH_USES_HIGH_VMA_FLAGS select ARCH_HAS_PKEYS help Memory Protection Keys provides a mechanism for enforcing diff --git a/include/linux/mm.h b/include/linux/mm.h index c274f75..e9d67bc 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -264,73 +264,68 @@ int __add_to_page_cache_locked(struct page *page, struct address_space *mapping, extern unsigned int kobjsize(const void *objp); #endif +#define VM_FLAGS_BIT(N) (1ULL << (N)) + /* * vm_flags in vm_area_struct, see mm_types.h. * When changing, update also include/trace/events/mmflags.h */ #define VM_NONE 0x00000000 -#define VM_READ 0x00000001 /* currently active flags */ -#define VM_WRITE 0x00000002 -#define VM_EXEC 0x00000004 -#define VM_SHARED 0x00000008 +#define VM_READ VM_FLAGS_BIT(0) /* currently active flags */ +#define VM_WRITE VM_FLAGS_BIT(1) +#define VM_EXEC VM_FLAGS_BIT(2) +#define VM_SHARED VM_FLAGS_BIT(3) /* mprotect() hardcodes VM_MAYREAD >> 4 == VM_READ, and so for r/w/x bits. */ -#define VM_MAYREAD 0x00000010 /* limits for mprotect() etc */ -#define VM_MAYWRITE 0x00000020 -#define VM_MAYEXEC 0x00000040 -#define VM_MAYSHARE 0x00000080 - -#define VM_GROWSDOWN 0x00000100 /* general info on the segment */ -#define VM_UFFD_MISSING 0x00000200 /* missing pages tracking */ -#define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page", just pure PFN */ -#define VM_DENYWRITE 0x00000800 /* ETXTBSY on write attempts.. */ -#define VM_UFFD_WP 0x00001000 /* wrprotect pages tracking */ - -#define VM_LOCKED 0x00002000 -#define VM_IO 0x00004000 /* Memory mapped I/O or similar */ - - /* Used by sys_madvise() */ -#define VM_SEQ_READ 0x00008000 /* App will access data sequentially */ -#define VM_RAND_READ 0x00010000 /* App will not benefit from clustered reads */ - -#define VM_DONTCOPY 0x00020000 /* Do not copy this vma on fork */ -#define VM_DONTEXPAND 0x00040000 /* Cannot expand with mremap() */ -#define VM_LOCKONFAULT 0x00080000 /* Lock the pages covered when they are faulted in */ -#define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */ -#define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */ -#define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ -#define VM_SYNC 0x00800000 /* Synchronous page faults */ -#define VM_ARCH_1 0x01000000 /* Architecture-specific flag */ -#define VM_WIPEONFORK 0x02000000 /* Wipe VMA contents in child. */ -#define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */ +#define VM_MAYREAD VM_FLAGS_BIT(4) /* limits for mprotect() etc */ +#define VM_MAYWRITE VM_FLAGS_BIT(5) +#define VM_MAYEXEC VM_FLAGS_BIT(6) +#define VM_MAYSHARE VM_FLAGS_BIT(7) + +#define VM_GROWSDOWN VM_FLAGS_BIT(8) /* general info on the segment */ +#define VM_UFFD_MISSING VM_FLAGS_BIT(9) /* missing pages tracking */ +#define VM_PFNMAP VM_FLAGS_BIT(10) /* Page-ranges managed without "struct page", just pure PFN */ +#define VM_DENYWRITE VM_FLAGS_BIT(11) /* ETXTBSY on write attempts.. */ +#define VM_UFFD_WP VM_FLAGS_BIT(12) /* wrprotect pages tracking */ + +#define VM_LOCKED VM_FLAGS_BIT(13) +#define VM_IO VM_FLAGS_BIT(14) /* Memory mapped I/O or similar */ + + /* Used by sys_madvise() */ +#define VM_SEQ_READ VM_FLAGS_BIT(15) /* App will access data sequentially */ +#define VM_RAND_READ VM_FLAGS_BIT(16) /* App will not benefit from clustered reads */ + +#define VM_DONTCOPY VM_FLAGS_BIT(17) /* Do not copy this vma on fork */ +#define VM_DONTEXPAND VM_FLAGS_BIT(18) /* Cannot expand with mremap() */ +#define VM_LOCKONFAULT VM_FLAGS_BIT(19) /* Lock the pages covered when they are faulted in */ +#define VM_ACCOUNT VM_FLAGS_BIT(20) /* Is a VM accounted object */ +#define VM_NORESERVE VM_FLAGS_BIT(21) /* should the VM suppress accounting */ +#define VM_HUGETLB VM_FLAGS_BIT(22) /* Huge TLB Page VM */ +#define VM_SYNC VM_FLAGS_BIT(23) /* Synchronous page faults */ +#define VM_ARCH_1 VM_FLAGS_BIT(24) /* Architecture-specific flag */ +#define VM_WIPEONFORK VM_FLAGS_BIT(25) /* Wipe VMA contents in child. */ +#define VM_DONTDUMP VM_FLAGS_BIT(26) /* Do not include in the core dump */ #ifdef CONFIG_MEM_SOFT_DIRTY -# define VM_SOFTDIRTY 0x08000000 /* Not soft dirty clean area */ +# define VM_SOFTDIRTY VM_FLAGS_BIT(27) /* Not soft dirty clean area */ #else # define VM_SOFTDIRTY 0 #endif -#define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */ -#define VM_HUGEPAGE 0x20000000 /* MADV_HUGEPAGE marked this vma */ -#define VM_NOHUGEPAGE 0x40000000 /* MADV_NOHUGEPAGE marked this vma */ -#define VM_MERGEABLE 0x80000000 /* KSM may merge identical pages */ - -#ifdef CONFIG_ARCH_USES_HIGH_VMA_FLAGS -#define VM_HIGH_ARCH_BIT_0 32 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_1 33 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_2 34 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_3 35 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_4 36 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_0 BIT(VM_HIGH_ARCH_BIT_0) -#define VM_HIGH_ARCH_1 BIT(VM_HIGH_ARCH_BIT_1) -#define VM_HIGH_ARCH_2 BIT(VM_HIGH_ARCH_BIT_2) -#define VM_HIGH_ARCH_3 BIT(VM_HIGH_ARCH_BIT_3) -#define VM_HIGH_ARCH_4 BIT(VM_HIGH_ARCH_BIT_4) -#endif /* CONFIG_ARCH_USES_HIGH_VMA_FLAGS */ +#define VM_MIXEDMAP VM_FLAGS_BIT(28) /* Can contain "struct page" and pure PFN pages */ +#define VM_HUGEPAGE VM_FLAGS_BIT(29) /* MADV_HUGEPAGE marked this vma */ +#define VM_NOHUGEPAGE VM_FLAGS_BIT(30) /* MADV_NOHUGEPAGE marked this vma */ +#define VM_MERGEABLE VM_FLAGS_BIT(31) /* KSM may merge identical pages */ + +#define VM_HIGH_ARCH_0 VM_FLAGS_BIT(32) +#define VM_HIGH_ARCH_1 VM_FLAGS_BIT(33) +#define VM_HIGH_ARCH_2 VM_FLAGS_BIT(34) +#define VM_HIGH_ARCH_3 VM_FLAGS_BIT(35) +#define VM_HIGH_ARCH_4 VM_FLAGS_BIT(36) #ifdef CONFIG_ARCH_HAS_PKEYS -# define VM_PKEY_SHIFT VM_HIGH_ARCH_BIT_0 +# define VM_PKEY_SHIFT 32 # define VM_PKEY_BIT0 VM_HIGH_ARCH_0 /* A protection key is a 4-bit value */ # define VM_PKEY_BIT1 VM_HIGH_ARCH_1 /* on x86 and 5-bit value on ppc64 */ # define VM_PKEY_BIT2 VM_HIGH_ARCH_2 @@ -373,8 +368,7 @@ int __add_to_page_cache_locked(struct page *page, struct address_space *mapping, #endif #ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR -# define VM_UFFD_MINOR_BIT 37 -# define VM_UFFD_MINOR BIT(VM_UFFD_MINOR_BIT) /* UFFD minor faults */ +# define VM_UFFD_MINOR VM_FLAGS_BIT(37) /* UFFD minor faults */ #else /* !CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ # define VM_UFFD_MINOR VM_NONE #endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 5aacc1c..5347293 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -264,7 +264,7 @@ struct page_frag_cache { bool pfmemalloc; }; -typedef unsigned long vm_flags_t; +typedef u64 vm_flags_t; /* * A region containing a mapping of a non-memory backed file under NOMMU @@ -330,7 +330,7 @@ struct vm_area_struct { * See vmf_insert_mixed_prot() for discussion. */ pgprot_t vm_page_prot; - unsigned long vm_flags; /* Flags, see mm.h. */ + vm_flags_t vm_flags; /* Flags, see mm.h. */ /* * For areas with an address space and backing store, diff --git a/include/linux/mman.h b/include/linux/mman.h index 629cefc..b2cbae9 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h @@ -135,7 +135,7 @@ static inline bool arch_validate_flags(unsigned long flags) /* * Combine the mmap "prot" argument into "vm_flags" used internally. */ -static inline unsigned long +static inline vm_flags_t calc_vm_prot_bits(unsigned long prot, unsigned long pkey) { return _calc_vm_trans(prot, PROT_READ, VM_READ ) | @@ -147,7 +147,7 @@ static inline bool arch_validate_flags(unsigned long flags) /* * Combine the mmap "flags" argument into "vm_flags" used internally. */ -static inline unsigned long +static inline vm_flags_t calc_vm_flag_bits(unsigned long flags) { return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) | diff --git a/mm/Kconfig b/mm/Kconfig index 02d44e3..aa8efba 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -830,8 +830,6 @@ config DEVICE_PRIVATE config VMAP_PFN bool -config ARCH_USES_HIGH_VMA_FLAGS - bool config ARCH_HAS_PKEYS bool diff --git a/mm/memory.c b/mm/memory.c index 730daa0..eff2a47 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -550,7 +550,7 @@ static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr, (long long)pte_val(pte), (long long)pmd_val(*pmd)); if (page) dump_page(page, "bad pte"); - pr_alert("addr:%px vm_flags:%08lx anon_vma:%px mapping:%px index:%lx\n", + pr_alert("addr:%px vm_flags:%08llx anon_vma:%px mapping:%px index:%lx\n", (void *)addr, vma->vm_flags, vma->anon_vma, mapping, index); pr_alert("file:%pD fault:%ps mmap:%ps readpage:%ps\n", vma->vm_file, diff --git a/mm/mmap.c b/mm/mmap.c index 0584e54..096bba4 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1353,7 +1353,7 @@ static inline unsigned long round_hint_to_min(unsigned long hint) } static inline int mlock_future_check(struct mm_struct *mm, - unsigned long flags, + vm_flags_t flags, unsigned long len) { unsigned long locked, lock_limit;
So we can have enough bits on 32-bit architectures. Signed-off-by: Ming Lin <mlin@kernel.org> --- arch/arm64/Kconfig | 1 - arch/powerpc/Kconfig | 1 - arch/x86/Kconfig | 1 - include/linux/mm.h | 100 ++++++++++++++++++++++------------------------- include/linux/mm_types.h | 4 +- include/linux/mman.h | 4 +- mm/Kconfig | 2 - mm/memory.c | 2 +- mm/mmap.c | 2 +- 9 files changed, 53 insertions(+), 64 deletions(-)