All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.