From: kernel test robot <lkp@intel.com>
To: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Cc: oe-kbuild-all@lists.linux.dev
Subject: Re: [RFC 2/6] percpu-refcount: Add torture test for percpu refcount
Date: Thu, 19 Sep 2024 08:47:24 +0800 [thread overview]
Message-ID: <202409190803.wpIBcLGg-lkp@intel.com> (raw)
In-Reply-To: <20240916050811.473556-3-Neeraj.Upadhyay@amd.com>
Hi Neeraj,
[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:
[auto build test ERROR on akpm-mm/mm-nonmm-unstable]
[also build test ERROR on linus/master dennis-percpu/for-next v6.11 next-20240918]
[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/Neeraj-Upadhyay/percpu-refcount-Add-managed-mode-for-RCU-released-objects/20240916-131210
base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-nonmm-unstable
patch link: https://lore.kernel.org/r/20240916050811.473556-3-Neeraj.Upadhyay%40amd.com
patch subject: [RFC 2/6] percpu-refcount: Add torture test for percpu refcount
config: i386-allyesconfig (https://download.01.org/0day-ci/archive/20240919/202409190803.wpIBcLGg-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240919/202409190803.wpIBcLGg-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409190803.wpIBcLGg-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
lib/percpu-refcount-torture.c: In function 'percpu_ref_test_cleanup':
>> lib/percpu-refcount-torture.c:187:17: error: implicit declaration of function 'kfree' [-Werror=implicit-function-declaration]
187 | kfree(busted_late_release_tasks);
| ^~~~~
lib/percpu-refcount-torture.c: In function 'percpu_ref_torture_init':
>> lib/percpu-refcount-torture.c:247:16: error: implicit declaration of function 'kcalloc' [-Werror=implicit-function-declaration]
247 | refs = kcalloc(nrefs, sizeof(refs[0]), GFP_KERNEL);
| ^~~~~~~
>> lib/percpu-refcount-torture.c:247:14: warning: assignment to 'struct percpu_ref *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
247 | refs = kcalloc(nrefs, sizeof(refs[0]), GFP_KERNEL);
| ^
>> lib/percpu-refcount-torture.c:263:27: warning: assignment to 'long int *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
263 | num_per_ref_users = kcalloc(nrefs, sizeof(num_per_ref_users[0]), GFP_KERNEL);
| ^
>> lib/percpu-refcount-torture.c:272:24: warning: assignment to 'struct task_struct **' from 'int' makes pointer from integer without a cast [-Wint-conversion]
272 | ref_user_tasks = kcalloc(nusers, sizeof(ref_user_tasks[0]), GFP_KERNEL);
| ^
>> lib/percpu-refcount-torture.c:279:21: warning: assignment to 'atomic_t *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
279 | ref_running = kcalloc(nrefs, sizeof(ref_running[0]), GFP_KERNEL);
| ^
lib/percpu-refcount-torture.c:309:44: warning: assignment to 'struct task_struct **' from 'int' makes pointer from integer without a cast [-Wint-conversion]
309 | busted_early_release_tasks = kcalloc(nrefs,
| ^
lib/percpu-refcount-torture.c:326:43: warning: assignment to 'struct task_struct **' from 'int' makes pointer from integer without a cast [-Wint-conversion]
326 | busted_late_release_tasks = kcalloc(nrefs, sizeof(busted_late_release_tasks[0]),
| ^
cc1: some warnings being treated as errors
vim +/kfree +187 lib/percpu-refcount-torture.c
176
177 static void percpu_ref_test_cleanup(void)
178 {
179 int i;
180
181 if (torture_cleanup_begin())
182 return;
183
184 if (busted_late_release_tasks) {
185 for (i = 0; i < nrefs; i++)
186 torture_stop_kthread(busted_late_task, busted_late_release_tasks[i]);
> 187 kfree(busted_late_release_tasks);
188 busted_late_release_tasks = NULL;
189 }
190
191 if (busted_early_release_tasks) {
192 for (i = 0; i < nrefs; i++)
193 torture_stop_kthread(busted_early_task, busted_early_release_tasks[i]);
194 kfree(busted_early_release_tasks);
195 busted_early_release_tasks = NULL;
196 }
197
198 if (ref_manager_task) {
199 torture_stop_kthread(ref_manager, ref_manager_task);
200 ref_manager_task = NULL;
201 }
202
203 if (ref_user_tasks) {
204 for (i = 0; i < nusers; i++)
205 torture_stop_kthread(ref_user, ref_user_tasks[i]);
206 kfree(ref_user_tasks);
207 ref_user_tasks = NULL;
208 }
209
210 kfree(ref_running);
211 ref_running = NULL;
212
213 kfree(num_per_ref_users);
214 num_per_ref_users = NULL;
215
216 if (refs) {
217 for (i = 0; i < nrefs; i++)
218 percpu_ref_exit(&refs[i]);
219 kfree(refs);
220 refs = NULL;
221 }
222
223 torture_cleanup_end();
224 }
225
226 static void percpu_ref_test_release(struct percpu_ref *ref)
227 {
228 WARN(!!atomic_add_return(0, &ref_running[ref-refs]), "!!! Premature ref release");
229 }
230
231 static int __init percpu_ref_torture_init(void)
232 {
233 DEFINE_TORTURE_RANDOM(rand);
234 struct torture_random_state *trsp = &rand;
235 int flags;
236 int err;
237 int ref_idx;
238 int i;
239
240 if (!torture_init_begin("percpu-refcount", verbose))
241 return -EBUSY;
242
243 atomic_set(&running, nusers);
244 /* Order @running with later increment and decrement operations */
245 smp_mb();
246
> 247 refs = kcalloc(nrefs, sizeof(refs[0]), GFP_KERNEL);
248 if (!refs) {
249 TOROUT_ERRSTRING("out of memory");
250 err = -ENOMEM;
251 goto init_err;
252 }
253 for (i = 0; i < nrefs; i++) {
254 flags = torture_random(trsp) & 1 ? PERCPU_REF_INIT_ATOMIC : PERCPU_REF_REL_MANAGED;
255 err = percpu_ref_init(&refs[i], percpu_ref_test_release,
256 flags, GFP_KERNEL);
257 if (err)
258 goto init_err;
259 if (!(flags & PERCPU_REF_REL_MANAGED))
260 percpu_ref_switch_to_managed(&refs[i]);
261 }
262
> 263 num_per_ref_users = kcalloc(nrefs, sizeof(num_per_ref_users[0]), GFP_KERNEL);
264 if (!num_per_ref_users) {
265 TOROUT_ERRSTRING("out of memory");
266 err = -ENOMEM;
267 goto init_err;
268 }
269 for (i = 0; i < nrefs; i++)
270 num_per_ref_users[i] = 0;
271
> 272 ref_user_tasks = kcalloc(nusers, sizeof(ref_user_tasks[0]), GFP_KERNEL);
273 if (!ref_user_tasks) {
274 TOROUT_ERRSTRING("out of memory");
275 err = -ENOMEM;
276 goto init_err;
277 }
278
> 279 ref_running = kcalloc(nrefs, sizeof(ref_running[0]), GFP_KERNEL);
280 if (!ref_running) {
281 TOROUT_ERRSTRING("out of memory");
282 err = -ENOMEM;
283 goto init_err;
284 }
285
286 for (i = 0; i < nusers; i++) {
287 ref_idx = torture_random(trsp) % nrefs;
288 atomic_inc(&ref_running[ref_idx]);
289 num_per_ref_users[ref_idx]++;
290 /* Order increments with subquent reads */
291 smp_mb();
292 err = torture_create_kthread(percpu_ref_test_thread,
293 &refs[ref_idx], ref_user_tasks[i]);
294 if (torture_init_error(err))
295 goto init_err;
296 }
297
298 err = torture_create_kthread(percpu_ref_manager_thread, NULL, ref_manager_task);
299 if (torture_init_error(err))
300 goto init_err;
301
302 /* Drop initial reference, after test threads have started running */
303 udelay(1);
304 for (i = 0; i < nrefs; i++)
305 percpu_ref_put(&refs[i]);
306
307
308 if (busted_early_ref_release) {
309 busted_early_release_tasks = kcalloc(nrefs,
310 sizeof(busted_early_release_tasks[0]),
311 GFP_KERNEL);
312 if (!busted_early_release_tasks) {
313 TOROUT_ERRSTRING("out of memory");
314 err = -ENOMEM;
315 goto init_err;
316 }
317 for (i = 0; i < nrefs; i++) {
318 err = torture_create_kthread(percpu_ref_busted_early_thread,
319 &refs[i], busted_early_release_tasks[i]);
320 if (torture_init_error(err))
321 goto init_err;
322 }
323 }
324
325 if (busted_late_ref_release) {
326 busted_late_release_tasks = kcalloc(nrefs, sizeof(busted_late_release_tasks[0]),
327 GFP_KERNEL);
328 if (!busted_late_release_tasks) {
329 TOROUT_ERRSTRING("out of memory");
330 err = -ENOMEM;
331 goto init_err;
332 }
333 for (i = 0; i < nrefs; i++) {
334 err = torture_create_kthread(percpu_ref_busted_late_thread,
335 &refs[i], busted_late_release_tasks[i]);
336 if (torture_init_error(err))
337 goto init_err;
338 }
339 }
340 if (stutter) {
341 err = torture_stutter_init(stutter, stutter);
342 if (torture_init_error(err))
343 goto init_err;
344 }
345
346 err = torture_onoff_init(onoff_holdoff * HZ, onoff_interval, NULL);
347 if (torture_init_error(err))
348 goto init_err;
349
350 torture_init_end();
351 return 0;
352 init_err:
353 torture_init_end();
354 percpu_ref_test_cleanup();
355 return err;
356 }
357
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2024-09-19 0:48 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-16 5:08 [RFC 0/6] Managed Percpu Refcount Neeraj Upadhyay
2024-09-16 5:08 ` [RFC 1/6] percpu-refcount: Add managed mode for RCU released objects Neeraj Upadhyay
2024-09-16 5:08 ` [RFC 2/6] percpu-refcount: Add torture test for percpu refcount Neeraj Upadhyay
2024-09-19 0:47 ` kernel test robot [this message]
2024-09-16 5:08 ` [RFC 3/6] percpu-refcount: Extend managed mode to allow runtime switching Neeraj Upadhyay
2024-09-16 12:04 ` kernel test robot
2024-09-16 19:07 ` kernel test robot
2024-09-16 5:08 ` [RFC 4/6] percpu-refcount-torture: Extend test with runtime mode switches Neeraj Upadhyay
2024-09-19 2:11 ` kernel test robot
2024-09-16 5:08 ` [RFC 5/6] apparmor: Switch labels to percpu refcount in atomic mode Neeraj Upadhyay
2024-09-16 5:08 ` [RFC 6/6] apparmor: Switch labels to percpu ref managed mode Neeraj Upadhyay
2024-09-18 5:44 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202409190803.wpIBcLGg-lkp@intel.com \
--to=lkp@intel.com \
--cc=Neeraj.Upadhyay@amd.com \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.