* 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