tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 90568ecf561540fa330511e21fcd823b0c3829c6 commit: 6bd33e1ece528f67646db33bf97406b747dafda0 riscv: add nommu support date: 3 months ago config: riscv-randconfig-a001-20200207 (attached as .config) compiler: riscv64-linux-gcc (GCC) 7.5.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross git checkout 6bd33e1ece528f67646db33bf97406b747dafda0 # save the attached .config to linux build tree GCC_VERSION=7.5.0 make.cross ARCH=riscv If you fix the issue, kindly add following tag Reported-by: kbuild test robot All error/warnings (new ones prefixed by >>): include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ include/linux/scatterlist.h:145:18: note: in expansion of macro 'virt_to_page' sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf)); ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:12:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/mm.h:10, from include/linux/pagemap.h:8, from fs//cifs/smb2ops.c:8: include/linux/scatterlist.h: In function 'sg_phys': include/asm-generic/memory_model.h:55:54: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __page_to_pfn(page) (unsigned long)((page) - vmemmap) ^ include/linux/pfn.h:21:36: note: in definition of macro 'PFN_PHYS' #define PFN_PHYS(x) ((phys_addr_t)(x) << PAGE_SHIFT) ^ arch/riscv/include/asm/page.h:115:29: note: in expansion of macro 'pfn_to_phys' #define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) ^~~~~~~~~~~ include/asm-generic/memory_model.h:81:21: note: in expansion of macro '__page_to_pfn' #define page_to_pfn __page_to_pfn ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:115:41: note: in expansion of macro 'page_to_pfn' #define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) ^~~~~~~~~~~ include/linux/scatterlist.h:224:9: note: in expansion of macro 'page_to_phys' return page_to_phys(sg_page(sg)) + sg->offset; ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:131:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/mm.h:10, from include/linux/pagemap.h:8, from fs//cifs/smb2ops.c:8: include/linux/scatterlist.h: In function 'sg_page_iter_page': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ include/linux/mm.h:213:26: note: in expansion of macro 'pfn_to_page' #define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) ^~~~~~~~~~~ include/linux/scatterlist.h:384:9: note: in expansion of macro 'nth_page' return nth_page(sg_page(piter->sg), piter->sg_pgoffset); ^~~~~~~~ include/linux/dma-mapping.h: In function 'dma_map_single_attrs': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ include/linux/dma-mapping.h:587:33: note: in expansion of macro 'virt_to_page' return dma_map_page_attrs(dev, virt_to_page(ptr), offset_in_page(ptr), ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:131:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/mm.h:10, from include/linux/pagemap.h:8, from fs//cifs/smb2ops.c:8: fs//cifs/smb2ops.c: In function 'smb2_sg_set_buf': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ >> fs//cifs/smb2ops.c:3542:10: note: in expansion of macro 'virt_to_page' addr = virt_to_page(buf); ^~~~~~~~~~~~ In file included from include/linux/pagemap.h:8:0, from fs//cifs/smb2ops.c:8: include/linux/mm.h: In function 'lowmem_page_address': include/linux/mm.h:1322:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ -- from include/linux/module.h:10, from drivers//staging/comedi/comedi_fops.c:14: include/linux/scatterlist.h: In function 'sg_set_buf': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ include/linux/scatterlist.h:145:18: note: in expansion of macro 'virt_to_page' sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf)); ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:12:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/seqlock.h:36, from include/linux/time.h:6, from include/linux/stat.h:19, from include/linux/module.h:10, from drivers//staging/comedi/comedi_fops.c:14: include/linux/scatterlist.h: In function 'sg_phys': include/asm-generic/memory_model.h:55:54: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __page_to_pfn(page) (unsigned long)((page) - vmemmap) ^ include/linux/pfn.h:21:36: note: in definition of macro 'PFN_PHYS' #define PFN_PHYS(x) ((phys_addr_t)(x) << PAGE_SHIFT) ^ arch/riscv/include/asm/page.h:115:29: note: in expansion of macro 'pfn_to_phys' #define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) ^~~~~~~~~~~ include/asm-generic/memory_model.h:81:21: note: in expansion of macro '__page_to_pfn' #define page_to_pfn __page_to_pfn ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:115:41: note: in expansion of macro 'page_to_pfn' #define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) ^~~~~~~~~~~ include/linux/scatterlist.h:224:9: note: in expansion of macro 'page_to_phys' return page_to_phys(sg_page(sg)) + sg->offset; ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:131:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/seqlock.h:36, from include/linux/time.h:6, from include/linux/stat.h:19, from include/linux/module.h:10, from drivers//staging/comedi/comedi_fops.c:14: include/linux/scatterlist.h: In function 'sg_page_iter_page': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ include/linux/mm.h:213:26: note: in expansion of macro 'pfn_to_page' #define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) ^~~~~~~~~~~ include/linux/scatterlist.h:384:9: note: in expansion of macro 'nth_page' return nth_page(sg_page(piter->sg), piter->sg_pgoffset); ^~~~~~~~ include/linux/dma-mapping.h: In function 'dma_map_single_attrs': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ include/linux/dma-mapping.h:587:33: note: in expansion of macro 'virt_to_page' return dma_map_page_attrs(dev, virt_to_page(ptr), offset_in_page(ptr), ^~~~~~~~~~~~ drivers//staging/comedi/comedi_fops.c: In function 'comedi_mmap': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:55:46: note: in definition of macro '__page_to_pfn' #define __page_to_pfn(page) (unsigned long)((page) - vmemmap) ^~~~ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ drivers//staging/comedi/comedi_fops.c:2378:22: note: in expansion of macro 'virt_to_page' pfn = page_to_pfn(virt_to_page(buf->virt_addr)); ^~~~~~~~~~~~ >> drivers//staging/comedi/comedi_fops.c:2380:8: error: 'PAGE_SHARED' undeclared (first use in this function); did you mean 'PAGE_SIZE'? PAGE_SHARED); ^~~~~~~~~~~ PAGE_SIZE -- include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ include/linux/scatterlist.h:145:18: note: in expansion of macro 'virt_to_page' sg_set_page(sg, virt_to_page(buf), buflen, offset_in_page(buf)); ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:12:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/slab.h:15, from net//sunrpc/xprtsock.c:24: include/linux/scatterlist.h: In function 'sg_phys': include/asm-generic/memory_model.h:55:54: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __page_to_pfn(page) (unsigned long)((page) - vmemmap) ^ include/linux/pfn.h:21:36: note: in definition of macro 'PFN_PHYS' #define PFN_PHYS(x) ((phys_addr_t)(x) << PAGE_SHIFT) ^ arch/riscv/include/asm/page.h:115:29: note: in expansion of macro 'pfn_to_phys' #define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) ^~~~~~~~~~~ include/asm-generic/memory_model.h:81:21: note: in expansion of macro '__page_to_pfn' #define page_to_pfn __page_to_pfn ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:115:41: note: in expansion of macro 'page_to_pfn' #define page_to_phys(page) (pfn_to_phys(page_to_pfn(page))) ^~~~~~~~~~~ include/linux/scatterlist.h:224:9: note: in expansion of macro 'page_to_phys' return page_to_phys(sg_page(sg)) + sg->offset; ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:131:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/slab.h:15, from net//sunrpc/xprtsock.c:24: include/linux/scatterlist.h: In function 'sg_page_iter_page': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ include/linux/mm.h:213:26: note: in expansion of macro 'pfn_to_page' #define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) ^~~~~~~~~~~ include/linux/scatterlist.h:384:9: note: in expansion of macro 'nth_page' return nth_page(sg_page(piter->sg), piter->sg_pgoffset); ^~~~~~~~ include/linux/dma-mapping.h: In function 'dma_map_single_attrs': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ include/linux/dma-mapping.h:587:33: note: in expansion of macro 'virt_to_page' return dma_map_page_attrs(dev, virt_to_page(ptr), offset_in_page(ptr), ^~~~~~~~~~~~ In file included from arch/riscv/include/asm/page.h:131:0, from arch/riscv/include/asm/thread_info.h:11, from include/linux/thread_info.h:38, from include/asm-generic/preempt.h:5, from ./arch/riscv/include/generated/asm/preempt.h:1, from include/linux/preempt.h:78, from include/linux/spinlock.h:51, from include/linux/mmzone.h:8, from include/linux/gfp.h:6, from include/linux/slab.h:15, from net//sunrpc/xprtsock.c:24: net//sunrpc/xprtsock.c: In function 'bc_sendto': include/asm-generic/memory_model.h:54:29: error: 'vmemmap' undeclared (first use in this function); did you mean 'vm_mmap'? #define __pfn_to_page(pfn) (vmemmap + (pfn)) ^ include/asm-generic/memory_model.h:82:21: note: in expansion of macro '__pfn_to_page' #define pfn_to_page __pfn_to_page ^~~~~~~~~~~~~ arch/riscv/include/asm/page.h:112:30: note: in expansion of macro 'pfn_to_page' #define virt_to_page(vaddr) (pfn_to_page(virt_to_pfn(vaddr))) ^~~~~~~~~~~ >> net//sunrpc/xprtsock.c:2668:14: note: in expansion of macro 'virt_to_page' tailpage = virt_to_page(xbufp->tail[0].iov_base); ^~~~~~~~~~~~ In file included from include/linux/pagemap.h:8:0, from net//sunrpc/xprtsock.c:27: include/linux/mm.h: In function 'lowmem_page_address': include/linux/mm.h:1322:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ .. vim +2380 drivers//staging/comedi/comedi_fops.c ed9eccbe8970f6 David Schleef 2008-11-04 2296 ed9eccbe8970f6 David Schleef 2008-11-04 2297 static int comedi_mmap(struct file *file, struct vm_area_struct *vma) ed9eccbe8970f6 David Schleef 2008-11-04 2298 { 20f083c07565cb Ian Abbott 2014-11-04 2299 struct comedi_file *cfp = file->private_data; 20f083c07565cb Ian Abbott 2014-11-04 2300 struct comedi_device *dev = cfp->dev; a52840a98bbb50 H Hartley Sweeten 2012-12-19 2301 struct comedi_subdevice *s; a52840a98bbb50 H Hartley Sweeten 2012-12-19 2302 struct comedi_async *async; b34aa86f12e884 Ian Abbott 2014-04-10 2303 struct comedi_buf_map *bm = NULL; e36472145aa706 Ian Abbott 2019-06-25 2304 struct comedi_buf_page *buf; ed9eccbe8970f6 David Schleef 2008-11-04 2305 unsigned long start = vma->vm_start; ed9eccbe8970f6 David Schleef 2008-11-04 2306 unsigned long size; ed9eccbe8970f6 David Schleef 2008-11-04 2307 int n_pages; ed9eccbe8970f6 David Schleef 2008-11-04 2308 int i; e36472145aa706 Ian Abbott 2019-06-25 2309 int retval = 0; 3ffab428f40849 Bernd Porr 2011-11-08 2310 b34aa86f12e884 Ian Abbott 2014-04-10 2311 /* b34aa86f12e884 Ian Abbott 2014-04-10 2312 * 'trylock' avoids circular dependency with current->mm->mmap_sem b34aa86f12e884 Ian Abbott 2014-04-10 2313 * and down-reading &dev->attach_lock should normally succeed without b34aa86f12e884 Ian Abbott 2014-04-10 2314 * contention unless the device is in the process of being attached b34aa86f12e884 Ian Abbott 2014-04-10 2315 * or detached. b34aa86f12e884 Ian Abbott 2014-04-10 2316 */ b34aa86f12e884 Ian Abbott 2014-04-10 2317 if (!down_read_trylock(&dev->attach_lock)) b34aa86f12e884 Ian Abbott 2014-04-10 2318 return -EAGAIN; a52840a98bbb50 H Hartley Sweeten 2012-12-19 2319 ed9eccbe8970f6 David Schleef 2008-11-04 2320 if (!dev->attached) { 272850f07c47ab H Hartley Sweeten 2013-11-26 2321 dev_dbg(dev->class_dev, "no driver attached\n"); ed9eccbe8970f6 David Schleef 2008-11-04 2322 retval = -ENODEV; ed9eccbe8970f6 David Schleef 2008-11-04 2323 goto done; ed9eccbe8970f6 David Schleef 2008-11-04 2324 } a52840a98bbb50 H Hartley Sweeten 2012-12-19 2325 476b847733636c Greg Kroah-Hartman 2008-11-13 2326 if (vma->vm_flags & VM_WRITE) 20f083c07565cb Ian Abbott 2014-11-04 2327 s = comedi_file_write_subdevice(file); 476b847733636c Greg Kroah-Hartman 2008-11-13 2328 else 20f083c07565cb Ian Abbott 2014-11-04 2329 s = comedi_file_read_subdevice(file); a52840a98bbb50 H Hartley Sweeten 2012-12-19 2330 if (!s) { ed9eccbe8970f6 David Schleef 2008-11-04 2331 retval = -EINVAL; ed9eccbe8970f6 David Schleef 2008-11-04 2332 goto done; ed9eccbe8970f6 David Schleef 2008-11-04 2333 } a52840a98bbb50 H Hartley Sweeten 2012-12-19 2334 ed9eccbe8970f6 David Schleef 2008-11-04 2335 async = s->async; a52840a98bbb50 H Hartley Sweeten 2012-12-19 2336 if (!async) { ed9eccbe8970f6 David Schleef 2008-11-04 2337 retval = -EINVAL; ed9eccbe8970f6 David Schleef 2008-11-04 2338 goto done; ed9eccbe8970f6 David Schleef 2008-11-04 2339 } ed9eccbe8970f6 David Schleef 2008-11-04 2340 ed9eccbe8970f6 David Schleef 2008-11-04 2341 if (vma->vm_pgoff != 0) { 272850f07c47ab H Hartley Sweeten 2013-11-26 2342 dev_dbg(dev->class_dev, "mmap() offset must be 0.\n"); ed9eccbe8970f6 David Schleef 2008-11-04 2343 retval = -EINVAL; ed9eccbe8970f6 David Schleef 2008-11-04 2344 goto done; ed9eccbe8970f6 David Schleef 2008-11-04 2345 } ed9eccbe8970f6 David Schleef 2008-11-04 2346 ed9eccbe8970f6 David Schleef 2008-11-04 2347 size = vma->vm_end - vma->vm_start; ed9eccbe8970f6 David Schleef 2008-11-04 2348 if (size > async->prealloc_bufsz) { ed9eccbe8970f6 David Schleef 2008-11-04 2349 retval = -EFAULT; ed9eccbe8970f6 David Schleef 2008-11-04 2350 goto done; ed9eccbe8970f6 David Schleef 2008-11-04 2351 } 44b8c793fc0d63 Sandhya Bankar 2016-03-06 2352 if (offset_in_page(size)) { ed9eccbe8970f6 David Schleef 2008-11-04 2353 retval = -EFAULT; ed9eccbe8970f6 David Schleef 2008-11-04 2354 goto done; ed9eccbe8970f6 David Schleef 2008-11-04 2355 } ed9eccbe8970f6 David Schleef 2008-11-04 2356 ec9d0754e0c640 sayli karnik 2016-09-20 2357 n_pages = vma_pages(vma); b34aa86f12e884 Ian Abbott 2014-04-10 2358 b34aa86f12e884 Ian Abbott 2014-04-10 2359 /* get reference to current buf map (if any) */ b34aa86f12e884 Ian Abbott 2014-04-10 2360 bm = comedi_buf_map_from_subdev_get(s); af93da31634d6d Ian Abbott 2013-11-08 2361 if (!bm || n_pages > bm->n_pages) { af93da31634d6d Ian Abbott 2013-11-08 2362 retval = -EINVAL; af93da31634d6d Ian Abbott 2013-11-08 2363 goto done; af93da31634d6d Ian Abbott 2013-11-08 2364 } e36472145aa706 Ian Abbott 2019-06-25 2365 if (bm->dma_dir != DMA_NONE) { e36472145aa706 Ian Abbott 2019-06-25 2366 /* e36472145aa706 Ian Abbott 2019-06-25 2367 * DMA buffer was allocated as a single block. e36472145aa706 Ian Abbott 2019-06-25 2368 * Address is in page_list[0]. e36472145aa706 Ian Abbott 2019-06-25 2369 */ e36472145aa706 Ian Abbott 2019-06-25 2370 buf = &bm->page_list[0]; e36472145aa706 Ian Abbott 2019-06-25 2371 retval = dma_mmap_coherent(bm->dma_hw_dev, vma, buf->virt_addr, e36472145aa706 Ian Abbott 2019-06-25 2372 buf->dma_addr, n_pages * PAGE_SIZE); e36472145aa706 Ian Abbott 2019-06-25 2373 } else { ed9eccbe8970f6 David Schleef 2008-11-04 2374 for (i = 0; i < n_pages; ++i) { e36472145aa706 Ian Abbott 2019-06-25 2375 unsigned long pfn; e36472145aa706 Ian Abbott 2019-06-25 2376 e36472145aa706 Ian Abbott 2019-06-25 2377 buf = &bm->page_list[i]; e36472145aa706 Ian Abbott 2019-06-25 2378 pfn = page_to_pfn(virt_to_page(buf->virt_addr)); e36472145aa706 Ian Abbott 2019-06-25 2379 retval = remap_pfn_range(vma, start, pfn, PAGE_SIZE, e36472145aa706 Ian Abbott 2019-06-25 @2380 PAGE_SHARED); e36472145aa706 Ian Abbott 2019-06-25 2381 if (retval) e36472145aa706 Ian Abbott 2019-06-25 2382 break; a52840a98bbb50 H Hartley Sweeten 2012-12-19 2383 ed9eccbe8970f6 David Schleef 2008-11-04 2384 start += PAGE_SIZE; ed9eccbe8970f6 David Schleef 2008-11-04 2385 } e36472145aa706 Ian Abbott 2019-06-25 2386 } ed9eccbe8970f6 David Schleef 2008-11-04 2387 e36472145aa706 Ian Abbott 2019-06-25 2388 if (retval == 0) { ed9eccbe8970f6 David Schleef 2008-11-04 2389 vma->vm_ops = &comedi_vm_ops; af93da31634d6d Ian Abbott 2013-11-08 2390 vma->vm_private_data = bm; ed9eccbe8970f6 David Schleef 2008-11-04 2391 af93da31634d6d Ian Abbott 2013-11-08 2392 vma->vm_ops->open(vma); e36472145aa706 Ian Abbott 2019-06-25 2393 } ed9eccbe8970f6 David Schleef 2008-11-04 2394 ed9eccbe8970f6 David Schleef 2008-11-04 2395 done: b34aa86f12e884 Ian Abbott 2014-04-10 2396 up_read(&dev->attach_lock); b34aa86f12e884 Ian Abbott 2014-04-10 2397 comedi_buf_map_put(bm); /* put reference to buf map - okay if NULL */ ed9eccbe8970f6 David Schleef 2008-11-04 2398 return retval; ed9eccbe8970f6 David Schleef 2008-11-04 2399 } ed9eccbe8970f6 David Schleef 2008-11-04 2400 :::::: The code at line 2380 was first introduced by commit :::::: e36472145aa706c186a6bb4f6419c613b0b1305c staging: comedi: use dma_mmap_coherent for DMA-able buffer mmap :::::: TO: Ian Abbott :::::: CC: Greg Kroah-Hartman --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org