Hi David, I love your patch! Yet something to improve: [auto build test ERROR on linus/master] [also build test ERROR on linux/master v5.5-rc1 next-20191209] [cannot apply to mmotm/master] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system. BTW, we also suggest to use '--base' option to specify the base tree in git format-patch, please see https://stackoverflow.com/a/37406982] url: https://github.com/0day-ci/linux/commits/David-Hildenbrand/mm-fix-max_pfn-not-falling-on-section-boundary/20191210-071011 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 6794862a16ef41f753abd75c03a152836e4c8028 config: um-x86_64_defconfig (attached as .config) compiler: gcc-7 (Debian 7.5.0-1) 7.5.0 reproduce: # save the attached .config to linux build tree make ARCH=um SUBARCH=x86_64 If you fix the issue, kindly add following tag Reported-by: kbuild test robot <lkp@xxxxxxxxx> All error/warnings (new ones prefixed by >>): In file included from include/asm-generic/bug.h:19:0, from ./arch/um/include/generated/asm/bug.h:1, from include/linux/bug.h:5, from include/linux/mmdebug.h:5, from include/linux/mm.h:9, from include/linux/memblock.h:13, from fs/proc/page.c:2: fs/proc/page.c: In function 'kpagecount_read': >> fs/proc/page.c:32:55: error: 'PAGES_PER_SECTION' undeclared (first use in this function); did you mean 'USEC_PER_SEC'? const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); ^ include/linux/kernel.h:62:46: note: in definition of macro '__round_mask' #define __round_mask(x, y) ((__typeof__(x))((y)-1)) ^ >> fs/proc/page.c:32:37: note: in expansion of macro 'round_up' const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); ^~~~~~~~ fs/proc/page.c:32:55: note: each undeclared identifier is reported only once for each function it appears in const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); ^ include/linux/kernel.h:62:46: note: in definition of macro '__round_mask' #define __round_mask(x, y) ((__typeof__(x))((y)-1)) ^ >> fs/proc/page.c:32:37: note: in expansion of macro 'round_up' const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); ^~~~~~~~ fs/proc/page.c: In function 'kpageflags_read': fs/proc/page.c:212:55: error: 'PAGES_PER_SECTION' undeclared (first use in this function); did you mean 'USEC_PER_SEC'? const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); ^ include/linux/kernel.h:62:46: note: in definition of macro '__round_mask' #define __round_mask(x, y) ((__typeof__(x))((y)-1)) ^ fs/proc/page.c:212:37: note: in expansion of macro 'round_up' const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); ^~~~~~~~ vim +32 fs/proc/page.c > 2 #include <linux/memblock.h> 3 #include <linux/compiler.h> 4 #include <linux/fs.h> 5 #include <linux/init.h> 6 #include <linux/ksm.h> 7 #include <linux/mm.h> 8 #include <linux/mmzone.h> 9 #include <linux/huge_mm.h> 10 #include <linux/proc_fs.h> 11 #include <linux/seq_file.h> 12 #include <linux/hugetlb.h> 13 #include <linux/memcontrol.h> 14 #include <linux/mmu_notifier.h> 15 #include <linux/page_idle.h> 16 #include <linux/kernel-page-flags.h> 17 #include <linux/uaccess.h> 18 #include "internal.h" 19 20 #define KPMSIZE sizeof(u64) 21 #define KPMMASK (KPMSIZE - 1) 22 #define KPMBITS (KPMSIZE * BITS_PER_BYTE) 23 24 /* /proc/kpagecount - an array exposing page counts 25 * 26 * Each entry is a u64 representing the corresponding 27 * physical page count. 28 */ 29 static ssize_t kpagecount_read(struct file *file, char __user *buf, 30 size_t count, loff_t *ppos) 31 { > 32 const unsigned long max_dump_pfn = round_up(max_pfn, PAGES_PER_SECTION); 33 u64 __user *out = (u64 __user *)buf; 34 struct page *ppage; 35 unsigned long src = *ppos; 36 unsigned long pfn; 37 ssize_t ret = 0; 38 u64 pcount; 39 40 pfn = src / KPMSIZE; 41 if (src & KPMMASK || count & KPMMASK) 42 return -EINVAL; 43 if (src >= max_dump_pfn * KPMSIZE) 44 return 0; 45 count = min_t(unsigned long, count, (max_dump_pfn * KPMSIZE) - src); 46 47 while (count > 0) { 48 /* 49 * TODO: ZONE_DEVICE support requires to identify 50 * memmaps that were actually initialized. 51 */ 52 ppage = pfn_to_online_page(pfn); 53 54 if (!ppage || PageSlab(ppage) || page_has_type(ppage)) 55 pcount = 0; 56 else 57 pcount = page_mapcount(ppage); 58 59 if (put_user(pcount, out)) { 60 ret = -EFAULT; 61 break; 62 } 63 64 pfn++; 65 out++; 66 count -= KPMSIZE; 67 68 cond_resched(); 69 } 70 71 *ppos += (char __user *)out - buf; 72 if (!ret) 73 ret = (char __user *)out - buf; 74 return ret; 75 } 76 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx Intel Corporation
Attachment:
.config.gz
Description: application/gzip