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