Hi Jérôme,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.20-rc5]
[cannot apply to next-20181206]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/jglisse-redhat-com/mmu-notifier-contextual-informations/20181207-031930
config: x86_64-randconfig-x017-201848 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   fs//proc/task_mmu.c: In function 'clear_refs_write':
>> fs//proc/task_mmu.c:1099:29: error: storage size of 'range' isn't known
      struct mmu_notifier_range range;
                                ^~~~~
   fs//proc/task_mmu.c:1099:29: warning: unused variable 'range' 
[-Wunused-variable]

vim +1099 fs//proc/task_mmu.c

  1069  
  1070  static ssize_t clear_refs_write(struct file *file, const char __user 
*buf,
  1071                                  size_t count, loff_t *ppos)
  1072  {
  1073          struct task_struct *task;
  1074          char buffer[PROC_NUMBUF];
  1075          struct mm_struct *mm;
  1076          struct vm_area_struct *vma;
  1077          enum clear_refs_types type;
  1078          struct mmu_gather tlb;
  1079          int itype;
  1080          int rv;
  1081  
  1082          memset(buffer, 0, sizeof(buffer));
  1083          if (count > sizeof(buffer) - 1)
  1084                  count = sizeof(buffer) - 1;
  1085          if (copy_from_user(buffer, buf, count))
  1086                  return -EFAULT;
  1087          rv = kstrtoint(strstrip(buffer), 10, &itype);
  1088          if (rv < 0)
  1089                  return rv;
  1090          type = (enum clear_refs_types)itype;
  1091          if (type < CLEAR_REFS_ALL || type >= CLEAR_REFS_LAST)
  1092                  return -EINVAL;
  1093  
  1094          task = get_proc_task(file_inode(file));
  1095          if (!task)
  1096                  return -ESRCH;
  1097          mm = get_task_mm(task);
  1098          if (mm) {
> 1099                  struct mmu_notifier_range range;
  1100                  struct clear_refs_private cp = {
  1101                          .type = type,
  1102                  };
  1103                  struct mm_walk clear_refs_walk = {
  1104                          .pmd_entry = clear_refs_pte_range,
  1105                          .test_walk = clear_refs_test_walk,
  1106                          .mm = mm,
  1107                          .private = &cp,
  1108                  };
  1109  
  1110                  if (type == CLEAR_REFS_MM_HIWATER_RSS) {
  1111                          if (down_write_killable(&mm->mmap_sem)) {
  1112                                  count = -EINTR;
  1113                                  goto out_mm;
  1114                          }
  1115  
  1116                          /*
  1117                           * Writing 5 to /proc/pid/clear_refs resets the 
peak
  1118                           * resident set size to this mm's current rss 
value.
  1119                           */
  1120                          reset_mm_hiwater_rss(mm);
  1121                          up_write(&mm->mmap_sem);
  1122                          goto out_mm;
  1123                  }
  1124  
  1125                  down_read(&mm->mmap_sem);
  1126                  tlb_gather_mmu(&tlb, mm, 0, -1);
  1127                  if (type == CLEAR_REFS_SOFT_DIRTY) {
  1128                          for (vma = mm->mmap; vma; vma = vma->vm_next) {
  1129                                  if (!(vma->vm_flags & VM_SOFTDIRTY))
  1130                                          continue;
  1131                                  up_read(&mm->mmap_sem);
  1132                                  if (down_write_killable(&mm->mmap_sem)) 
{
  1133                                          count = -EINTR;
  1134                                          goto out_mm;
  1135                                  }
  1136                                  for (vma = mm->mmap; vma; vma = 
vma->vm_next) {
  1137                                          vma->vm_flags &= ~VM_SOFTDIRTY;
  1138                                          vma_set_page_prot(vma);
  1139                                  }
  1140                                  downgrade_write(&mm->mmap_sem);
  1141                                  break;
  1142                          }
  1143  
  1144                          range.start = 0;
  1145                          range.end = -1UL;
  1146                          range.mm = mm;
  1147                          mmu_notifier_invalidate_range_start(&range);
  1148                  }
  1149                  walk_page_range(0, mm->highest_vm_end, 
&clear_refs_walk);
  1150                  if (type == CLEAR_REFS_SOFT_DIRTY)
  1151                          mmu_notifier_invalidate_range_end(&range);
  1152                  tlb_finish_mmu(&tlb, 0, -1);
  1153                  up_read(&mm->mmap_sem);
  1154  out_mm:
  1155                  mmput(mm);
  1156          }
  1157          put_task_struct(task);
  1158  
  1159          return count;
  1160  }
  1161  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to