aboutsummaryrefslogtreecommitdiffstats
path: root/lib/test_static_keys.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2016-02-08 09:36:52 -0500
committerIngo Molnar <mingo@kernel.org>2016-02-09 04:27:29 -0500
commit975db45e9cc561bf8a7eddfa0705d3a078ec184f (patch)
treeaa9cb3419b3e5eb1ff312a90a32c1fbe3474ea21 /lib/test_static_keys.c
parent2a96fd7417a0eb501edfde9713555bd7c2eda302 (diff)
locking/static_keys: Avoid nested functions
clang does not support nested functions inside of an array definition: lib/test_static_keys.c:105:16: error: function definition is not allowed here .test_key = test_key_func(&old_true_key, static_key_true), lib/test_static_keys.c:50:20: note: expanded from macro 'test_key_func' ({bool func(void) { return branch(key); } func; }) That code appears to be a little too clever, so this simplifies it a bit by defining functions outside of the array. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Jason Baron <jbaron@akamai.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-arm-kernel@lists.infradead.org Link: http://lkml.kernel.org/r/1454942223-2781480-1-git-send-email-arnd@arndb.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib/test_static_keys.c')
-rw-r--r--lib/test_static_keys.c62
1 files changed, 42 insertions, 20 deletions
diff --git a/lib/test_static_keys.c b/lib/test_static_keys.c
index c61b299e367f..915d75df2086 100644
--- a/lib/test_static_keys.c
+++ b/lib/test_static_keys.c
@@ -46,8 +46,11 @@ struct test_key {
46 bool (*test_key)(void); 46 bool (*test_key)(void);
47}; 47};
48 48
49#define test_key_func(key, branch) \ 49#define test_key_func(key, branch) \
50 ({bool func(void) { return branch(key); } func; }) 50static bool key ## _ ## branch(void) \
51{ \
52 return branch(&key); \
53}
51 54
52static void invert_key(struct static_key *key) 55static void invert_key(struct static_key *key)
53{ 56{
@@ -92,6 +95,25 @@ static int verify_keys(struct test_key *keys, int size, bool invert)
92 return 0; 95 return 0;
93} 96}
94 97
98test_key_func(old_true_key, static_key_true)
99test_key_func(old_false_key, static_key_false)
100test_key_func(true_key, static_branch_likely)
101test_key_func(true_key, static_branch_unlikely)
102test_key_func(false_key, static_branch_likely)
103test_key_func(false_key, static_branch_unlikely)
104test_key_func(base_old_true_key, static_key_true)
105test_key_func(base_inv_old_true_key, static_key_true)
106test_key_func(base_old_false_key, static_key_false)
107test_key_func(base_inv_old_false_key, static_key_false)
108test_key_func(base_true_key, static_branch_likely)
109test_key_func(base_true_key, static_branch_unlikely)
110test_key_func(base_inv_true_key, static_branch_likely)
111test_key_func(base_inv_true_key, static_branch_unlikely)
112test_key_func(base_false_key, static_branch_likely)
113test_key_func(base_false_key, static_branch_unlikely)
114test_key_func(base_inv_false_key, static_branch_likely)
115test_key_func(base_inv_false_key, static_branch_unlikely)
116
95static int __init test_static_key_init(void) 117static int __init test_static_key_init(void)
96{ 118{
97 int ret; 119 int ret;
@@ -102,95 +124,95 @@ static int __init test_static_key_init(void)
102 { 124 {
103 .init_state = true, 125 .init_state = true,
104 .key = &old_true_key, 126 .key = &old_true_key,
105 .test_key = test_key_func(&old_true_key, static_key_true), 127 .test_key = &old_true_key_static_key_true,
106 }, 128 },
107 { 129 {
108 .init_state = false, 130 .init_state = false,
109 .key = &old_false_key, 131 .key = &old_false_key,
110 .test_key = test_key_func(&old_false_key, static_key_false), 132 .test_key = &old_false_key_static_key_false,
111 }, 133 },
112 /* internal keys - new keys */ 134 /* internal keys - new keys */
113 { 135 {
114 .init_state = true, 136 .init_state = true,
115 .key = &true_key.key, 137 .key = &true_key.key,
116 .test_key = test_key_func(&true_key, static_branch_likely), 138 .test_key = &true_key_static_branch_likely,
117 }, 139 },
118 { 140 {
119 .init_state = true, 141 .init_state = true,
120 .key = &true_key.key, 142 .key = &true_key.key,
121 .test_key = test_key_func(&true_key, static_branch_unlikely), 143 .test_key = &true_key_static_branch_unlikely,
122 }, 144 },
123 { 145 {
124 .init_state = false, 146 .init_state = false,
125 .key = &false_key.key, 147 .key = &false_key.key,
126 .test_key = test_key_func(&false_key, static_branch_likely), 148 .test_key = &false_key_static_branch_likely,
127 }, 149 },
128 { 150 {
129 .init_state = false, 151 .init_state = false,
130 .key = &false_key.key, 152 .key = &false_key.key,
131 .test_key = test_key_func(&false_key, static_branch_unlikely), 153 .test_key = &false_key_static_branch_unlikely,
132 }, 154 },
133 /* external keys - old keys */ 155 /* external keys - old keys */
134 { 156 {
135 .init_state = true, 157 .init_state = true,
136 .key = &base_old_true_key, 158 .key = &base_old_true_key,
137 .test_key = test_key_func(&base_old_true_key, static_key_true), 159 .test_key = &base_old_true_key_static_key_true,
138 }, 160 },
139 { 161 {
140 .init_state = false, 162 .init_state = false,
141 .key = &base_inv_old_true_key, 163 .key = &base_inv_old_true_key,
142 .test_key = test_key_func(&base_inv_old_true_key, static_key_true), 164 .test_key = &base_inv_old_true_key_static_key_true,
143 }, 165 },
144 { 166 {
145 .init_state = false, 167 .init_state = false,
146 .key = &base_old_false_key, 168 .key = &base_old_false_key,
147 .test_key = test_key_func(&base_old_false_key, static_key_false), 169 .test_key = &base_old_false_key_static_key_false,
148 }, 170 },
149 { 171 {
150 .init_state = true, 172 .init_state = true,
151 .key = &base_inv_old_false_key, 173 .key = &base_inv_old_false_key,
152 .test_key = test_key_func(&base_inv_old_false_key, static_key_false), 174 .test_key = &base_inv_old_false_key_static_key_false,
153 }, 175 },
154 /* external keys - new keys */ 176 /* external keys - new keys */
155 { 177 {
156 .init_state = true, 178 .init_state = true,
157 .key = &base_true_key.key, 179 .key = &base_true_key.key,
158 .test_key = test_key_func(&base_true_key, static_branch_likely), 180 .test_key = &base_true_key_static_branch_likely,
159 }, 181 },
160 { 182 {
161 .init_state = true, 183 .init_state = true,
162 .key = &base_true_key.key, 184 .key = &base_true_key.key,
163 .test_key = test_key_func(&base_true_key, static_branch_unlikely), 185 .test_key = &base_true_key_static_branch_unlikely,
164 }, 186 },
165 { 187 {
166 .init_state = false, 188 .init_state = false,
167 .key = &base_inv_true_key.key, 189 .key = &base_inv_true_key.key,
168 .test_key = test_key_func(&base_inv_true_key, static_branch_likely), 190 .test_key = &base_inv_true_key_static_branch_likely,
169 }, 191 },
170 { 192 {
171 .init_state = false, 193 .init_state = false,
172 .key = &base_inv_true_key.key, 194 .key = &base_inv_true_key.key,
173 .test_key = test_key_func(&base_inv_true_key, static_branch_unlikely), 195 .test_key = &base_inv_true_key_static_branch_unlikely,
174 }, 196 },
175 { 197 {
176 .init_state = false, 198 .init_state = false,
177 .key = &base_false_key.key, 199 .key = &base_false_key.key,
178 .test_key = test_key_func(&base_false_key, static_branch_likely), 200 .test_key = &base_false_key_static_branch_likely,
179 }, 201 },
180 { 202 {
181 .init_state = false, 203 .init_state = false,
182 .key = &base_false_key.key, 204 .key = &base_false_key.key,
183 .test_key = test_key_func(&base_false_key, static_branch_unlikely), 205 .test_key = &base_false_key_static_branch_unlikely,
184 }, 206 },
185 { 207 {
186 .init_state = true, 208 .init_state = true,
187 .key = &base_inv_false_key.key, 209 .key = &base_inv_false_key.key,
188 .test_key = test_key_func(&base_inv_false_key, static_branch_likely), 210 .test_key = &base_inv_false_key_static_branch_likely,
189 }, 211 },
190 { 212 {
191 .init_state = true, 213 .init_state = true,
192 .key = &base_inv_false_key.key, 214 .key = &base_inv_false_key.key,
193 .test_key = test_key_func(&base_inv_false_key, static_branch_unlikely), 215 .test_key = &base_inv_false_key_static_branch_unlikely,
194 }, 216 },
195 }; 217 };
196 218