Building the Linux kernel with Clang and LLVM
 help / color / mirror / Atom feed
* Re: [PATCH] [RFC] proc: Add mmap callback for /proc/<pid>/mem
       [not found] <20240913174003.1786581-1-hmiraj@cisco.com>
@ 2024-09-15 20:45 ` kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2024-09-15 20:45 UTC (permalink / raw)
  To: Haider Miraj; +Cc: llvm, oe-kbuild-all

Hi Haider,

[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:

[auto build test ERROR on akpm-mm/mm-everything]
[also build test ERROR on linus/master v6.11]
[cannot apply to next-20240913]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Haider-Miraj/proc-Add-mmap-callback-for-proc-pid-mem/20240914-014144
base:   https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything
patch link:    https://lore.kernel.org/r/20240913174003.1786581-1-hmiraj%40cisco.com
patch subject: [PATCH] [RFC] proc: Add mmap callback for /proc/<pid>/mem
config: x86_64-allnoconfig (https://download.01.org/0day-ci/archive/20240916/202409160450.N6EXHAts-lkp@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240916/202409160450.N6EXHAts-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409160450.N6EXHAts-lkp@intel.com/

All errors (new ones prefixed by >>):

>> fs/proc/base.c:1022:20: error: too many arguments to function call, expected 6, have 7
    1021 |                 pinned = get_user_pages_remote(mm, addr, 1, FOLL_GET | FOLL_NOFAULT,
         |                          ~~~~~~~~~~~~~~~~~~~~~
    1022 |                                                 &page, NULL, NULL);
         |                                                              ^~~~
   include/linux/stddef.h:8:14: note: expanded from macro 'NULL'
       8 | #define NULL ((void *)0)
         |              ^~~~~~~~~~~
   include/linux/mm.h:2462:6: note: 'get_user_pages_remote' declared here
    2462 | long get_user_pages_remote(struct mm_struct *mm,
         |      ^                     ~~~~~~~~~~~~~~~~~~~~~
    2463 |                            unsigned long start, unsigned long nr_pages,
         |                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2464 |                            unsigned int gup_flags, struct page **pages,
         |                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    2465 |                            int *locked);
         |                            ~~~~~~~~~~~
   1 error generated.


vim +1022 fs/proc/base.c

   970	
   971	/**
   972	 * mem_mmap - Memory mapping function
   973	 *
   974	 * This function implements mmap call for /proc/<pid>/mem.
   975	 *
   976	 * Assumptions and Limitations:
   977	 * - This function does not handle reverse mapping, which is required for swapping.
   978	 * - The VMA is not expected to be split with an unmap call.
   979	 */
   980	static int mem_mmap(struct file *file, struct vm_area_struct *vma)
   981	{
   982		uintptr_t addr, target_start_addr, target_end_addr;
   983		struct page_list_item *item;
   984		struct page *page, *zero_page;
   985		unsigned long zero_page_pfn;
   986		struct vma_info *info;
   987		long pinned;
   988		int ret;
   989	
   990		/* Retrieve mm of the target process*/
   991		struct mm_struct *mm = (struct mm_struct *)file->private_data;
   992		size_t size = vma->vm_end - vma->vm_start;
   993		uintptr_t start_addr = vma->vm_start;
   994	
   995		target_start_addr = vma->vm_pgoff << PAGE_SHIFT; /* Multiply by PAGE_SIZE */
   996		target_end_addr = target_start_addr + size;
   997	
   998		if (!mm)
   999			return -EINVAL;
  1000	
  1001		info = kmalloc(sizeof(struct vma_info), GFP_KERNEL);
  1002		if (!info)
  1003			return -ENOMEM;
  1004		INIT_LIST_HEAD(&info->page_list_head);
  1005		info->vma_start_addr = vma->vm_start;
  1006		info->vma_end_addr = vma->vm_end;
  1007	
  1008		vma->vm_private_data = info;
  1009		vma->vm_ops = &mem_vm_ops;
  1010	
  1011		zero_page = ZERO_PAGE(0);
  1012		zero_page_pfn = page_to_pfn(zero_page);
  1013	
  1014		/* Acquire the mmap_lock before pinning the page (get_user_pages_remote) */
  1015		down_read(&mm->mmap_lock);
  1016	
  1017		for (addr = target_start_addr; addr < target_end_addr; addr += PAGE_SIZE) {
  1018			unsigned long pfn;
  1019	
  1020			/* Pin the user page */
  1021			pinned = get_user_pages_remote(mm, addr, 1, FOLL_GET | FOLL_NOFAULT,
> 1022							&page, NULL, NULL);
  1023			/* Page is not resident (FOLL_NOFAULT), we will skip to the next address */
  1024			if (pinned <= 0) {
  1025				ret = remap_pfn_range(vma, start_addr, zero_page_pfn, PAGE_SIZE,
  1026						vma->vm_page_prot);
  1027				if (ret)
  1028					goto err_unlock;
  1029				start_addr += PAGE_SIZE;
  1030				continue;
  1031			}
  1032	
  1033			/* We need to keep track of pages which are pinned */
  1034			item = kmalloc(sizeof(struct page_list_item), GFP_KERNEL);
  1035			if (!item) {
  1036				kfree(info);
  1037				return -ENOMEM;
  1038			}
  1039	
  1040			item->page = page;
  1041			list_add(&item->list, &info->page_list_head);
  1042			pfn = page_to_pfn(page);
  1043	
  1044			/* Remap the page frame under current vma */
  1045			ret = remap_pfn_range(vma, start_addr, pfn, PAGE_SIZE,
  1046						vma->vm_page_prot);
  1047			if (ret)
  1048				kfree(item);
  1049	
  1050			start_addr += PAGE_SIZE;
  1051		}
  1052	err_unlock:
  1053		up_read(&mm->mmap_lock);
  1054		return 0;
  1055	}
  1056	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-09-15 20:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20240913174003.1786581-1-hmiraj@cisco.com>
2024-09-15 20:45 ` [PATCH] [RFC] proc: Add mmap callback for /proc/<pid>/mem kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox