Re: [PATCH 2/2] mm: rename _count, field of the struct page, to _refcount

From: kbuild test robot
Date: Mon Mar 28 2016 - 02:15:42 EST


Hi Joonsoo,

[auto build test WARNING on net/master]
[also build test WARNING on v4.6-rc1 next-20160327]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url: https://github.com/0day-ci/linux/commits/js1304-gmail-com/mm-page_ref-use-page_ref-helper-instead-of-direct-modification-of-_count/20160328-140113
config: xtensa-allmodconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=xtensa

All warnings (new ones prefixed by >>):

In file included from arch/xtensa/include/asm/processor.h:16:0,
from arch/xtensa/kernel/asm-offsets.c:15:
include/linux/page_ref.h: In function 'page_ref_count':
include/linux/page_ref.h:66:26: error: 'struct page' has no member named '_count'
return atomic_read(&page->_count);
^
include/linux/compiler.h:284:17: note: in definition of macro '__READ_ONCE'
union { typeof(x) __val; char __c[1]; } __u; \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
>> include/linux/page_ref.h:66:9: note: in expansion of macro 'atomic_read'
return atomic_read(&page->_count);
^
include/linux/page_ref.h:66:26: error: 'struct page' has no member named '_count'
return atomic_read(&page->_count);
^
include/linux/compiler.h:286:22: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
>> include/linux/page_ref.h:66:9: note: in expansion of macro 'atomic_read'
return atomic_read(&page->_count);
^
include/linux/page_ref.h:66:26: error: 'struct page' has no member named '_count'
return atomic_read(&page->_count);
^
include/linux/compiler.h:286:42: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
>> include/linux/page_ref.h:66:9: note: in expansion of macro 'atomic_read'
return atomic_read(&page->_count);
^
include/linux/page_ref.h:66:26: error: 'struct page' has no member named '_count'
return atomic_read(&page->_count);
^
include/linux/compiler.h:288:30: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
>> include/linux/page_ref.h:66:9: note: in expansion of macro 'atomic_read'
return atomic_read(&page->_count);
^
include/linux/page_ref.h:66:26: error: 'struct page' has no member named '_count'
return atomic_read(&page->_count);
^
include/linux/compiler.h:288:50: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
>> include/linux/page_ref.h:66:9: note: in expansion of macro 'atomic_read'
return atomic_read(&page->_count);
^
include/linux/page_ref.h: In function 'page_count':
include/linux/page_ref.h:71:41: error: 'struct page' has no member named '_count'
return atomic_read(&compound_head(page)->_count);
^
include/linux/compiler.h:284:17: note: in definition of macro '__READ_ONCE'
union { typeof(x) __val; char __c[1]; } __u; \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
include/linux/page_ref.h:71:9: note: in expansion of macro 'atomic_read'
return atomic_read(&compound_head(page)->_count);
^
include/linux/page_ref.h:71:41: error: 'struct page' has no member named '_count'
return atomic_read(&compound_head(page)->_count);
^
include/linux/compiler.h:286:22: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
include/linux/page_ref.h:71:9: note: in expansion of macro 'atomic_read'
return atomic_read(&compound_head(page)->_count);
^
include/linux/page_ref.h:71:41: error: 'struct page' has no member named '_count'
return atomic_read(&compound_head(page)->_count);
^
include/linux/compiler.h:286:42: note: in definition of macro '__READ_ONCE'
__read_once_size(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
include/linux/page_ref.h:71:9: note: in expansion of macro 'atomic_read'
return atomic_read(&compound_head(page)->_count);
^
include/linux/page_ref.h:71:41: error: 'struct page' has no member named '_count'
return atomic_read(&compound_head(page)->_count);
^
include/linux/compiler.h:288:30: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
include/linux/page_ref.h:71:9: note: in expansion of macro 'atomic_read'
return atomic_read(&compound_head(page)->_count);
^
include/linux/page_ref.h:71:41: error: 'struct page' has no member named '_count'
return atomic_read(&compound_head(page)->_count);
^
include/linux/compiler.h:288:50: note: in definition of macro '__READ_ONCE'
__read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \
^
>> arch/xtensa/include/asm/atomic.h:50:25: note: in expansion of macro 'READ_ONCE'
#define atomic_read(v) READ_ONCE((v)->counter)
^
include/linux/page_ref.h:71:9: note: in expansion of macro 'atomic_read'
return atomic_read(&compound_head(page)->_count);
^
include/linux/page_ref.h: In function 'set_page_count':
include/linux/page_ref.h:76:18: error: 'struct page' has no member named '_count'
atomic_set(&page->_count, v);
^
include/linux/compiler.h:301:17: note: in definition of macro 'WRITE_ONCE'
union { typeof(x) __val; char __c[1]; } __u = \
^
>> include/linux/page_ref.h:76:2: note: in expansion of macro 'atomic_set'
atomic_set(&page->_count, v);
^
include/linux/page_ref.h:76:18: error: 'struct page' has no member named '_count'
atomic_set(&page->_count, v);
^
include/linux/compiler.h:302:30: note: in definition of macro 'WRITE_ONCE'
{ .__val = (__force typeof(x)) (val) }; \
^
>> include/linux/page_ref.h:76:2: note: in expansion of macro 'atomic_set'
atomic_set(&page->_count, v);
^
include/linux/page_ref.h:76:18: error: 'struct page' has no member named '_count'
atomic_set(&page->_count, v);
^
include/linux/compiler.h:303:22: note: in definition of macro 'WRITE_ONCE'
__write_once_size(&(x), __u.__c, sizeof(x)); \
^
>> include/linux/page_ref.h:76:2: note: in expansion of macro 'atomic_set'
atomic_set(&page->_count, v);
^
include/linux/page_ref.h:76:18: error: 'struct page' has no member named '_count'
atomic_set(&page->_count, v);
^
include/linux/compiler.h:303:42: note: in definition of macro 'WRITE_ONCE'
__write_once_size(&(x), __u.__c, sizeof(x)); \
^
>> include/linux/page_ref.h:76:2: note: in expansion of macro 'atomic_set'
atomic_set(&page->_count, v);
^
In file included from include/linux/mm.h:25:0,
from include/linux/pid_namespace.h:6,
from include/linux/ptrace.h:8,
from arch/xtensa/kernel/asm-offsets.c:21:
include/linux/page_ref.h: In function 'page_ref_add':
include/linux/page_ref.h:92:22: error: 'struct page' has no member named '_count'
atomic_add(nr, &page->_count);
^
include/linux/page_ref.h: In function 'page_ref_sub':
include/linux/page_ref.h:99:22: error: 'struct page' has no member named '_count'
atomic_sub(nr, &page->_count);
^
In file included from include/linux/atomic.h:4:0,
from include/linux/debug_locks.h:5,
from include/linux/lockdep.h:23,
from include/linux/spinlock_types.h:18,
from include/linux/spinlock.h:81,
from include/linux/seqlock.h:35,
from include/linux/time.h:5,
from include/uapi/linux/timex.h:56,
from include/linux/timex.h:56,
from include/linux/sched.h:19,
from include/linux/ptrace.h:5,
from arch/xtensa/kernel/asm-offsets.c:21:
include/linux/page_ref.h: In function 'page_ref_inc':
include/linux/page_ref.h:106:18: error: 'struct page' has no member named '_count'
atomic_inc(&page->_count);
^
arch/xtensa/include/asm/atomic.h:173:37: note: in definition of macro 'atomic_inc'
#define atomic_inc(v) atomic_add(1,(v))
^
include/linux/page_ref.h: In function 'page_ref_dec':
include/linux/page_ref.h:113:18: error: 'struct page' has no member named '_count'
atomic_dec(&page->_count);
^
arch/xtensa/include/asm/atomic.h:189:37: note: in definition of macro 'atomic_dec'
#define atomic_dec(v) atomic_sub(1,(v))
^
include/linux/page_ref.h: In function 'page_ref_sub_and_test':
include/linux/page_ref.h:120:41: error: 'struct page' has no member named '_count'
int ret = atomic_sub_and_test(nr, &page->_count);
^
arch/xtensa/include/asm/atomic.h:165:58: note: in definition of macro 'atomic_sub_and_test'
#define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)
^
include/linux/page_ref.h: In function 'page_ref_dec_and_test':
include/linux/page_ref.h:129:37: error: 'struct page' has no member named '_count'
int ret = atomic_dec_and_test(&page->_count);
^
arch/xtensa/include/asm/atomic.h:207:54: note: in definition of macro 'atomic_dec_and_test'
#define atomic_dec_and_test(v) (atomic_sub_return(1,(v)) == 0)
^
include/linux/page_ref.h: In function 'page_ref_dec_return':
include/linux/page_ref.h:138:35: error: 'struct page' has no member named '_count'
int ret = atomic_dec_return(&page->_count);
^
arch/xtensa/include/asm/atomic.h:197:51: note: in definition of macro 'atomic_dec_return'
#define atomic_dec_return(v) atomic_sub_return(1,(v))
^
In file included from include/linux/mm.h:25:0,
from include/linux/pid_namespace.h:6,
from include/linux/ptrace.h:8,
from arch/xtensa/kernel/asm-offsets.c:21:
include/linux/page_ref.h: In function 'page_ref_add_unless':
include/linux/page_ref.h:147:35: error: 'struct page' has no member named '_count'
int ret = atomic_add_unless(&page->_count, nr, u);
^
In file included from arch/xtensa/include/asm/processor.h:16:0,
from arch/xtensa/kernel/asm-offsets.c:15:
include/linux/page_ref.h: In function 'page_ref_freeze':
include/linux/page_ref.h:156:39: error: 'struct page' has no member named '_count'
int ret = likely(atomic_cmpxchg(&page->_count, count, 0) == count);
^
include/linux/compiler.h:169:40: note: in definition of macro 'likely'
# define likely(x) __builtin_expect(!!(x), 1)
^
>> arch/xtensa/include/asm/atomic.h:230:39: note: in expansion of macro 'cmpxchg'
#define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n)))
^

vim +/atomic_read +66 include/linux/page_ref.h

95813b8f Joonsoo Kim 2016-03-17 60 }
95813b8f Joonsoo Kim 2016-03-17 61
95813b8f Joonsoo Kim 2016-03-17 62 #endif
fe896d18 Joonsoo Kim 2016-03-17 63
fe896d18 Joonsoo Kim 2016-03-17 64 static inline int page_ref_count(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 65 {
fe896d18 Joonsoo Kim 2016-03-17 @66 return atomic_read(&page->_count);
fe896d18 Joonsoo Kim 2016-03-17 67 }
fe896d18 Joonsoo Kim 2016-03-17 68
fe896d18 Joonsoo Kim 2016-03-17 69 static inline int page_count(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 70 {
fe896d18 Joonsoo Kim 2016-03-17 71 return atomic_read(&compound_head(page)->_count);
fe896d18 Joonsoo Kim 2016-03-17 72 }
fe896d18 Joonsoo Kim 2016-03-17 73
fe896d18 Joonsoo Kim 2016-03-17 74 static inline void set_page_count(struct page *page, int v)
fe896d18 Joonsoo Kim 2016-03-17 75 {
fe896d18 Joonsoo Kim 2016-03-17 @76 atomic_set(&page->_count, v);
95813b8f Joonsoo Kim 2016-03-17 77 if (page_ref_tracepoint_active(__tracepoint_page_ref_set))
95813b8f Joonsoo Kim 2016-03-17 78 __page_ref_set(page, v);
fe896d18 Joonsoo Kim 2016-03-17 79 }
fe896d18 Joonsoo Kim 2016-03-17 80
fe896d18 Joonsoo Kim 2016-03-17 81 /*
fe896d18 Joonsoo Kim 2016-03-17 82 * Setup the page count before being freed into the page allocator for
fe896d18 Joonsoo Kim 2016-03-17 83 * the first time (boot or memory hotplug)
fe896d18 Joonsoo Kim 2016-03-17 84 */
fe896d18 Joonsoo Kim 2016-03-17 85 static inline void init_page_count(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 86 {
fe896d18 Joonsoo Kim 2016-03-17 87 set_page_count(page, 1);
fe896d18 Joonsoo Kim 2016-03-17 88 }
fe896d18 Joonsoo Kim 2016-03-17 89
fe896d18 Joonsoo Kim 2016-03-17 90 static inline void page_ref_add(struct page *page, int nr)
fe896d18 Joonsoo Kim 2016-03-17 91 {
fe896d18 Joonsoo Kim 2016-03-17 92 atomic_add(nr, &page->_count);
95813b8f Joonsoo Kim 2016-03-17 93 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod))
95813b8f Joonsoo Kim 2016-03-17 94 __page_ref_mod(page, nr);
fe896d18 Joonsoo Kim 2016-03-17 95 }
fe896d18 Joonsoo Kim 2016-03-17 96
fe896d18 Joonsoo Kim 2016-03-17 97 static inline void page_ref_sub(struct page *page, int nr)
fe896d18 Joonsoo Kim 2016-03-17 98 {
fe896d18 Joonsoo Kim 2016-03-17 99 atomic_sub(nr, &page->_count);
95813b8f Joonsoo Kim 2016-03-17 100 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod))
95813b8f Joonsoo Kim 2016-03-17 101 __page_ref_mod(page, -nr);
fe896d18 Joonsoo Kim 2016-03-17 102 }
fe896d18 Joonsoo Kim 2016-03-17 103
fe896d18 Joonsoo Kim 2016-03-17 104 static inline void page_ref_inc(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 105 {
fe896d18 Joonsoo Kim 2016-03-17 106 atomic_inc(&page->_count);
95813b8f Joonsoo Kim 2016-03-17 107 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod))
95813b8f Joonsoo Kim 2016-03-17 108 __page_ref_mod(page, 1);
fe896d18 Joonsoo Kim 2016-03-17 109 }
fe896d18 Joonsoo Kim 2016-03-17 110
fe896d18 Joonsoo Kim 2016-03-17 111 static inline void page_ref_dec(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 112 {
fe896d18 Joonsoo Kim 2016-03-17 113 atomic_dec(&page->_count);
95813b8f Joonsoo Kim 2016-03-17 114 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod))
95813b8f Joonsoo Kim 2016-03-17 115 __page_ref_mod(page, -1);
fe896d18 Joonsoo Kim 2016-03-17 116 }
fe896d18 Joonsoo Kim 2016-03-17 117
fe896d18 Joonsoo Kim 2016-03-17 118 static inline int page_ref_sub_and_test(struct page *page, int nr)
fe896d18 Joonsoo Kim 2016-03-17 119 {
95813b8f Joonsoo Kim 2016-03-17 120 int ret = atomic_sub_and_test(nr, &page->_count);
95813b8f Joonsoo Kim 2016-03-17 121
95813b8f Joonsoo Kim 2016-03-17 122 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod_and_test))
95813b8f Joonsoo Kim 2016-03-17 123 __page_ref_mod_and_test(page, -nr, ret);
95813b8f Joonsoo Kim 2016-03-17 124 return ret;
fe896d18 Joonsoo Kim 2016-03-17 125 }
fe896d18 Joonsoo Kim 2016-03-17 126
fe896d18 Joonsoo Kim 2016-03-17 127 static inline int page_ref_dec_and_test(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 128 {
95813b8f Joonsoo Kim 2016-03-17 129 int ret = atomic_dec_and_test(&page->_count);
95813b8f Joonsoo Kim 2016-03-17 130
95813b8f Joonsoo Kim 2016-03-17 131 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod_and_test))
95813b8f Joonsoo Kim 2016-03-17 132 __page_ref_mod_and_test(page, -1, ret);
95813b8f Joonsoo Kim 2016-03-17 133 return ret;
fe896d18 Joonsoo Kim 2016-03-17 134 }
fe896d18 Joonsoo Kim 2016-03-17 135
fe896d18 Joonsoo Kim 2016-03-17 136 static inline int page_ref_dec_return(struct page *page)
fe896d18 Joonsoo Kim 2016-03-17 137 {
95813b8f Joonsoo Kim 2016-03-17 138 int ret = atomic_dec_return(&page->_count);
95813b8f Joonsoo Kim 2016-03-17 139
95813b8f Joonsoo Kim 2016-03-17 140 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod_and_return))
95813b8f Joonsoo Kim 2016-03-17 141 __page_ref_mod_and_return(page, -1, ret);
95813b8f Joonsoo Kim 2016-03-17 142 return ret;
fe896d18 Joonsoo Kim 2016-03-17 143 }
fe896d18 Joonsoo Kim 2016-03-17 144
fe896d18 Joonsoo Kim 2016-03-17 145 static inline int page_ref_add_unless(struct page *page, int nr, int u)
fe896d18 Joonsoo Kim 2016-03-17 146 {
95813b8f Joonsoo Kim 2016-03-17 147 int ret = atomic_add_unless(&page->_count, nr, u);
95813b8f Joonsoo Kim 2016-03-17 148
95813b8f Joonsoo Kim 2016-03-17 149 if (page_ref_tracepoint_active(__tracepoint_page_ref_mod_unless))
95813b8f Joonsoo Kim 2016-03-17 150 __page_ref_mod_unless(page, nr, ret);
95813b8f Joonsoo Kim 2016-03-17 151 return ret;
fe896d18 Joonsoo Kim 2016-03-17 152 }
fe896d18 Joonsoo Kim 2016-03-17 153
fe896d18 Joonsoo Kim 2016-03-17 154 static inline int page_ref_freeze(struct page *page, int count)
fe896d18 Joonsoo Kim 2016-03-17 155 {
95813b8f Joonsoo Kim 2016-03-17 @156 int ret = likely(atomic_cmpxchg(&page->_count, count, 0) == count);
95813b8f Joonsoo Kim 2016-03-17 157
95813b8f Joonsoo Kim 2016-03-17 158 if (page_ref_tracepoint_active(__tracepoint_page_ref_freeze))
95813b8f Joonsoo Kim 2016-03-17 159 __page_ref_freeze(page, count, ret);

:::::: The code at line 66 was first introduced by commit
:::::: fe896d1878949ea92ba547587bc3075cc688fb8f mm: introduce page reference manipulation functions

:::::: TO: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>

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

Attachment: .config.gz
Description: Binary data