Message ID | 20230329011712.3242298-5-zi.yan@sent.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Split a folio to any lower order folios | expand |
Hi Zi, Thank you for the patch! Yet something to improve: [auto build test ERROR on akpm-mm/mm-everything] [also build test ERROR on linus/master v6.3-rc4 next-20230329] [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/Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20230329011712.3242298-5-zi.yan%40sent.com patch subject: [PATCH v2 4/7] mm: page_owner: add support for splitting to any order in split page_owner. config: i386-randconfig-m021 (https://download.01.org/0day-ci/archive/20230329/202303291732.7OqWI96E-lkp@intel.com/config) compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce (this is a W=1 build): # https://github.com/intel-lab-lkp/linux/commit/6d1831c0e01a1a742e026454fe6e5643e08c5985 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 git checkout 6d1831c0e01a1a742e026454fe6e5643e08c5985 # save the config file mkdir build_dir && cp config build_dir/.config make W=1 O=build_dir ARCH=i386 olddefconfig make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303291732.7OqWI96E-lkp@intel.com/ All errors (new ones prefixed by >>): mm/page_owner.c: In function '__split_page_owner': >> mm/page_owner.c:226:28: error: implicit declaration of function 'lookup_page_ext' [-Werror=implicit-function-declaration] 226 | page_ext = lookup_page_ext(page + i); | ^~~~~~~~~~~~~~~ mm/page_owner.c:226:26: warning: assignment to 'struct page_ext *' from 'int' makes pointer from integer without a cast [-Wint-conversion] 226 | page_ext = lookup_page_ext(page + i); | ^ cc1: some warnings being treated as errors vim +/lookup_page_ext +226 mm/page_owner.c 213 214 void __split_page_owner(struct page *page, int old_order, int new_order) 215 { 216 int i; 217 struct page_ext *page_ext = page_ext_get(page); 218 struct page_owner *page_owner; 219 unsigned int old_nr = 1 << old_order; 220 unsigned int new_nr = 1 << new_order; 221 222 if (unlikely(!page_ext)) 223 return; 224 225 for (i = 0; i < old_nr; i += new_nr) { > 226 page_ext = lookup_page_ext(page + i); 227 page_owner = get_page_owner(page_ext); 228 page_owner->order = new_order; 229 } 230 page_ext_put(page_ext); 231 } 232
On 29 Mar 2023, at 5:58, kernel test robot wrote: > Hi Zi, > > Thank you for the patch! Yet something to improve: > > [auto build test ERROR on akpm-mm/mm-everything] > [also build test ERROR on linus/master v6.3-rc4 next-20230329] > [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/Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 > base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything > patch link: https://lore.kernel.org/r/20230329011712.3242298-5-zi.yan%40sent.com > patch subject: [PATCH v2 4/7] mm: page_owner: add support for splitting to any order in split page_owner. > config: i386-randconfig-m021 (https://download.01.org/0day-ci/archive/20230329/202303291732.7OqWI96E-lkp@intel.com/config) > compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 > reproduce (this is a W=1 build): > # https://github.com/intel-lab-lkp/linux/commit/6d1831c0e01a1a742e026454fe6e5643e08c5985 > git remote add linux-review https://github.com/intel-lab-lkp/linux > git fetch --no-tags linux-review Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 > git checkout 6d1831c0e01a1a742e026454fe6e5643e08c5985 > # save the config file > mkdir build_dir && cp config build_dir/.config > make W=1 O=build_dir ARCH=i386 olddefconfig > make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash > > If you fix the issue, kindly add following tag where applicable > | Reported-by: kernel test robot <lkp@intel.com> > | Link: https://lore.kernel.org/oe-kbuild-all/202303291732.7OqWI96E-lkp@intel.com/ > > All errors (new ones prefixed by >>): > > mm/page_owner.c: In function '__split_page_owner': >>> mm/page_owner.c:226:28: error: implicit declaration of function 'lookup_page_ext' [-Werror=implicit-function-declaration] > 226 | page_ext = lookup_page_ext(page + i); > | ^~~~~~~~~~~~~~~ > mm/page_owner.c:226:26: warning: assignment to 'struct page_ext *' from 'int' makes pointer from integer without a cast [-Wint-conversion] > 226 | page_ext = lookup_page_ext(page + i); > | ^ > cc1: some warnings being treated as errors > > > vim +/lookup_page_ext +226 mm/page_owner.c > > 213 > 214 void __split_page_owner(struct page *page, int old_order, int new_order) > 215 { > 216 int i; > 217 struct page_ext *page_ext = page_ext_get(page); > 218 struct page_owner *page_owner; > 219 unsigned int old_nr = 1 << old_order; > 220 unsigned int new_nr = 1 << new_order; > 221 > 222 if (unlikely(!page_ext)) > 223 return; > 224 > 225 for (i = 0; i < old_nr; i += new_nr) { >> 226 page_ext = lookup_page_ext(page + i); > 227 page_owner = get_page_owner(page_ext); > 228 page_owner->order = new_order; > 229 } > 230 page_ext_put(page_ext); > 231 } > 232 > > -- > 0-DAY CI Kernel Test Service > https://github.com/intel/lkp-tests It can be fixed by the patch below. I will fix it in the next version. Thanks. diff --git a/mm/page_owner.c b/mm/page_owner.c index 347861fe9c50..72244a4f1a31 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -223,9 +223,9 @@ void __split_page_owner(struct page *page, int old_order, int new_order) return; for (i = 0; i < old_nr; i += new_nr) { - page_ext = lookup_page_ext(page + i); page_owner = get_page_owner(page_ext); page_owner->order = new_order; + page_ext = page_ext_next(page_ext); } page_ext_put(page_ext); } -- Best Regards, Yan, Zi
Hi Zi, Thank you for the patch! Yet something to improve: [auto build test ERROR on akpm-mm/mm-everything] [also build test ERROR on linus/master v6.3-rc4 next-20230329] [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/Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20230329011712.3242298-5-zi.yan%40sent.com patch subject: [PATCH v2 4/7] mm: page_owner: add support for splitting to any order in split page_owner. config: x86_64-randconfig-a016 (https://download.01.org/0day-ci/archive/20230329/202303292237.pg39cTKv-lkp@intel.com/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/6d1831c0e01a1a742e026454fe6e5643e08c5985 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 git checkout 6d1831c0e01a1a742e026454fe6e5643e08c5985 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303292237.pg39cTKv-lkp@intel.com/ All error/warnings (new ones prefixed by >>): >> mm/page_owner.c:226:14: error: implicit declaration of function 'lookup_page_ext' is invalid in C99 [-Werror,-Wimplicit-function-declaration] page_ext = lookup_page_ext(page + i); ^ >> mm/page_owner.c:226:12: warning: incompatible integer to pointer conversion assigning to 'struct page_ext *' from 'int' [-Wint-conversion] page_ext = lookup_page_ext(page + i); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning and 1 error generated. vim +/lookup_page_ext +226 mm/page_owner.c 213 214 void __split_page_owner(struct page *page, int old_order, int new_order) 215 { 216 int i; 217 struct page_ext *page_ext = page_ext_get(page); 218 struct page_owner *page_owner; 219 unsigned int old_nr = 1 << old_order; 220 unsigned int new_nr = 1 << new_order; 221 222 if (unlikely(!page_ext)) 223 return; 224 225 for (i = 0; i < old_nr; i += new_nr) { > 226 page_ext = lookup_page_ext(page + i); 227 page_owner = get_page_owner(page_ext); 228 page_owner->order = new_order; 229 } 230 page_ext_put(page_ext); 231 } 232
Hi Zi, Thank you for the patch! Yet something to improve: [auto build test ERROR on akpm-mm/mm-everything] [also build test ERROR on linus/master v6.3-rc4 next-20230329] [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/Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20230329011712.3242298-5-zi.yan%40sent.com patch subject: [PATCH v2 4/7] mm: page_owner: add support for splitting to any order in split page_owner. config: riscv-buildonly-randconfig-r006-20230329 (https://download.01.org/0day-ci/archive/20230330/202303300056.N12iGUqy-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 67409911353323ca5edf2049ef0df54132fa1ca7) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://github.com/intel-lab-lkp/linux/commit/6d1831c0e01a1a742e026454fe6e5643e08c5985 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Zi-Yan/mm-memcg-use-order-instead-of-nr-in-split_page_memcg/20230329-091809 git checkout 6d1831c0e01a1a742e026454fe6e5643e08c5985 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=riscv SHELL=/bin/bash If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Link: https://lore.kernel.org/oe-kbuild-all/202303300056.N12iGUqy-lkp@intel.com/ All errors (new ones prefixed by >>): >> mm/page_owner.c:226:14: error: call to undeclared function 'lookup_page_ext'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] page_ext = lookup_page_ext(page + i); ^ >> mm/page_owner.c:226:12: error: incompatible integer to pointer conversion assigning to 'struct page_ext *' from 'int' [-Wint-conversion] page_ext = lookup_page_ext(page + i); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ 2 errors generated. vim +/lookup_page_ext +226 mm/page_owner.c 213 214 void __split_page_owner(struct page *page, int old_order, int new_order) 215 { 216 int i; 217 struct page_ext *page_ext = page_ext_get(page); 218 struct page_owner *page_owner; 219 unsigned int old_nr = 1 << old_order; 220 unsigned int new_nr = 1 << new_order; 221 222 if (unlikely(!page_ext)) 223 return; 224 225 for (i = 0; i < old_nr; i += new_nr) { > 226 page_ext = lookup_page_ext(page + i); 227 page_owner = get_page_owner(page_ext); 228 page_owner->order = new_order; 229 } 230 page_ext_put(page_ext); 231 } 232
diff --git a/include/linux/page_owner.h b/include/linux/page_owner.h index d7878523adfc..a784ba69f67f 100644 --- a/include/linux/page_owner.h +++ b/include/linux/page_owner.h @@ -11,7 +11,7 @@ extern struct page_ext_operations page_owner_ops; extern void __reset_page_owner(struct page *page, unsigned short order); extern void __set_page_owner(struct page *page, unsigned short order, gfp_t gfp_mask); -extern void __split_page_owner(struct page *page, int order); +extern void __split_page_owner(struct page *page, int old_order, int new_order); extern void __folio_copy_owner(struct folio *newfolio, struct folio *old); extern void __set_page_owner_migrate_reason(struct page *page, int reason); extern void __dump_page_owner(const struct page *page); @@ -31,10 +31,10 @@ static inline void set_page_owner(struct page *page, __set_page_owner(page, order, gfp_mask); } -static inline void split_page_owner(struct page *page, int order) +static inline void split_page_owner(struct page *page, int old_order, int new_order) { if (static_branch_unlikely(&page_owner_inited)) - __split_page_owner(page, order); + __split_page_owner(page, old_order, new_order); } static inline void folio_copy_owner(struct folio *newfolio, struct folio *old) { @@ -56,11 +56,11 @@ static inline void reset_page_owner(struct page *page, unsigned short order) { } static inline void set_page_owner(struct page *page, - unsigned int order, gfp_t gfp_mask) + unsigned short order, gfp_t gfp_mask) { } static inline void split_page_owner(struct page *page, - int order) + int old_order, int new_order) { } static inline void folio_copy_owner(struct folio *newfolio, struct folio *folio) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 106cde74d933..f8a8a72b207d 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2557,7 +2557,7 @@ static void __split_huge_page(struct page *page, struct list_head *list, unlock_page_lruvec(lruvec); /* Caller disabled irqs, so they are still disabled here */ - split_page_owner(head, order); + split_page_owner(head, order, 0); /* See comment in __split_huge_page_tail() */ if (PageAnon(head)) { diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ef559795525b..4845ff6c4223 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2780,7 +2780,7 @@ void split_page(struct page *page, unsigned int order) for (i = 1; i < (1 << order); i++) set_page_refcounted(page + i); - split_page_owner(page, order); + split_page_owner(page, order, 0); split_page_memcg(page, order, 0); } EXPORT_SYMBOL_GPL(split_page); @@ -4996,7 +4996,7 @@ static void *make_alloc_exact(unsigned long addr, unsigned int order, struct page *page = virt_to_page((void *)addr); struct page *last = page + nr; - split_page_owner(page, order); + split_page_owner(page, order, 0); split_page_memcg(page, order, 0); while (page < --last) set_page_refcounted(last); diff --git a/mm/page_owner.c b/mm/page_owner.c index 64233b5b09d5..347861fe9c50 100644 --- a/mm/page_owner.c +++ b/mm/page_owner.c @@ -211,20 +211,21 @@ void __set_page_owner_migrate_reason(struct page *page, int reason) page_ext_put(page_ext); } -void __split_page_owner(struct page *page, int order) +void __split_page_owner(struct page *page, int old_order, int new_order) { int i; struct page_ext *page_ext = page_ext_get(page); struct page_owner *page_owner; - unsigned int nr = 1 << order; + unsigned int old_nr = 1 << old_order; + unsigned int new_nr = 1 << new_order; if (unlikely(!page_ext)) return; - for (i = 0; i < nr; i++) { + for (i = 0; i < old_nr; i += new_nr) { + page_ext = lookup_page_ext(page + i); page_owner = get_page_owner(page_ext); - page_owner->order = 0; - page_ext = page_ext_next(page_ext); + page_owner->order = new_order; } page_ext_put(page_ext); }