diff mbox series

[1/2] mm: make "vm_flags" be an u64

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

Commit Message

Ming Lin June 1, 2021, 11:22 p.m. UTC
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(-)

Comments

kernel test robot June 2, 2021, 1:58 a.m. UTC | #1
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
kernel test robot June 2, 2021, 2:06 a.m. UTC | #2
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 mbox series

Patch

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;