From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: kbuild test robot <fengguang.wu@intel.com>
Cc: kbuild-all@01.org, linux-kernel@vger.kernel.org
Subject: Re: [rcu:rcu/dev 48/48] kernel/rcu/tree_exp.h:407:3: note: in expansion of macro 'trace_printk'
Date: Thu, 1 Feb 2018 02:39:15 -0800 [thread overview]
Message-ID: <20180201103915.GN3741@linux.vnet.ibm.com> (raw)
In-Reply-To: <201802011554.rmzK3XXS%fengguang.wu@intel.com>
On Thu, Feb 01, 2018 at 03:43:58PM +0800, kbuild test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git rcu/dev
> head: 32860a6da7c75039afea229ba396aeac3b708d6b
> commit: 32860a6da7c75039afea229ba396aeac3b708d6b [48/48] EXP rcu: Add trace_printk()s to probe expedited CPU selection
> config: sparc64-allyesconfig (attached as .config)
> compiler: sparc64-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
> reproduce:
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> git checkout 32860a6da7c75039afea229ba396aeac3b708d6b
> # save the attached .config to linux build tree
> make.cross ARCH=sparc64
>
> All warnings (new ones prefixed by >>):
These should be fixed in later commits. Plus this is likely sacrificial
code anyway.
Thanx, Paul
> In file included from kernel/rcu/tree.c:31:0:
> kernel/rcu/tree_exp.h: In function 'sync_rcu_exp_select_cpus':
> kernel/rcu/tree_exp.h:407:16: warning: format '%ld' expects argument of type 'long int', but argument 6 has type 'int' [-Wformat=]
> trace_printk("%s rnp %d:%d first pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!rnp->exp_tasks);
> ^ ~~~~~~~~
> include/linux/kernel.h:634:33: note: in definition of macro '__trace_printk_check_format'
> ____trace_printk_check_format(fmt, ##args); \
> ^~~
> >> include/linux/kernel.h:671:3: note: in expansion of macro 'do_trace_printk'
> do_trace_printk(fmt, ##__VA_ARGS__); \
> ^~~~~~~~~~~~~~~
> >> kernel/rcu/tree_exp.h:407:3: note: in expansion of macro 'trace_printk'
> trace_printk("%s rnp %d:%d first pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!rnp->exp_tasks);
> ^~~~~~~~~~~~
> kernel/rcu/tree_exp.h:407:16: warning: format '%ld' expects argument of type 'long int', but argument 7 has type 'int' [-Wformat=]
> trace_printk("%s rnp %d:%d first pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!rnp->exp_tasks);
> ^ ~~~~~~~~
> include/linux/kernel.h:687:29: note: in definition of macro 'do_trace_printk'
> __trace_printk(_THIS_IP_, fmt, ##args); \
> ^~~
> >> kernel/rcu/tree_exp.h:407:3: note: in expansion of macro 'trace_printk'
> trace_printk("%s rnp %d:%d first pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!rnp->exp_tasks);
> ^~~~~~~~~~~~
> kernel/rcu/tree_exp.h:446:16: warning: format '%ld' expects argument of type 'long int', but argument 6 has type 'int' [-Wformat=]
> trace_printk("%s rnp %d:%d second pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!READ_ONCE(rnp->exp_tasks));
> ^
> include/linux/kernel.h:634:33: note: in definition of macro '__trace_printk_check_format'
> ____trace_printk_check_format(fmt, ##args); \
> ^~~
> >> include/linux/kernel.h:671:3: note: in expansion of macro 'do_trace_printk'
> do_trace_printk(fmt, ##__VA_ARGS__); \
> ^~~~~~~~~~~~~~~
> kernel/rcu/tree_exp.h:446:3: note: in expansion of macro 'trace_printk'
> trace_printk("%s rnp %d:%d second pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!READ_ONCE(rnp->exp_tasks));
> ^~~~~~~~~~~~
> kernel/rcu/tree_exp.h:446:16: warning: format '%ld' expects argument of type 'long int', but argument 7 has type 'int' [-Wformat=]
> trace_printk("%s rnp %d:%d second pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!READ_ONCE(rnp->exp_tasks));
> ^
> include/linux/kernel.h:687:29: note: in definition of macro 'do_trace_printk'
> __trace_printk(_THIS_IP_, fmt, ##args); \
> ^~~
> kernel/rcu/tree_exp.h:446:3: note: in expansion of macro 'trace_printk'
> trace_printk("%s rnp %d:%d second pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!READ_ONCE(rnp->exp_tasks));
> ^~~~~~~~~~~~
>
> vim +/trace_printk +407 kernel/rcu/tree_exp.h
>
> 363
> 364 /*
> 365 * Select the nodes that the upcoming expedited grace period needs
> 366 * to wait for.
> 367 */
> 368 static void sync_rcu_exp_select_cpus(struct rcu_state *rsp,
> 369 smp_call_func_t func)
> 370 {
> 371 int cpu;
> 372 unsigned long flags;
> 373 unsigned long mask_ofl_test;
> 374 unsigned long mask_ofl_ipi;
> 375 int ret;
> 376 struct rcu_node *rnp;
> 377
> 378 trace_rcu_exp_grace_period(rsp->name, rcu_exp_gp_seq_endval(rsp), TPS("reset"));
> 379 sync_exp_reset_tree(rsp);
> 380 trace_rcu_exp_grace_period(rsp->name, rcu_exp_gp_seq_endval(rsp), TPS("select"));
> 381 rcu_for_each_leaf_node(rsp, rnp) {
> 382 raw_spin_lock_irqsave_rcu_node(rnp, flags);
> 383
> 384 /* Each pass checks a CPU for identity, offline, and idle. */
> 385 mask_ofl_test = 0;
> 386 for_each_leaf_node_possible_cpu(rnp, cpu) {
> 387 struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
> 388
> 389 rdp->exp_dynticks_snap =
> 390 rcu_dynticks_snap(rdp->dynticks);
> 391 if (raw_smp_processor_id() == cpu ||
> 392 rcu_dynticks_in_eqs(rdp->exp_dynticks_snap) ||
> 393 !(rnp->qsmaskinitnext & rdp->grpmask))
> 394 mask_ofl_test |= rdp->grpmask;
> 395 trace_printk("%s rnp %d:%d first pass CPU %d\n", __func__, rnp->grplo, rnp->grphi, cpu);
> 396 }
> 397 mask_ofl_ipi = rnp->expmask & ~mask_ofl_test;
> 398
> 399 /*
> 400 * Need to wait for any blocked tasks as well. Note that
> 401 * additional blocking tasks will also block the expedited
> 402 * GP until such time as the ->expmask bits are cleared.
> 403 */
> 404 if (rcu_preempt_has_tasks(rnp))
> 405 rnp->exp_tasks = rnp->blkd_tasks.next;
> 406 raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
> > 407 trace_printk("%s rnp %d:%d first pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!rnp->exp_tasks);
> 408
> 409 /* IPI the remaining CPUs for expedited quiescent state. */
> 410 for_each_leaf_node_possible_cpu(rnp, cpu) {
> 411 unsigned long mask = leaf_node_cpu_bit(rnp, cpu);
> 412 struct rcu_data *rdp = per_cpu_ptr(rsp->rda, cpu);
> 413
> 414 if (!(mask_ofl_ipi & mask))
> 415 continue;
> 416 retry_ipi:
> 417 if (rcu_dynticks_in_eqs_since(rdp->dynticks,
> 418 rdp->exp_dynticks_snap)) {
> 419 mask_ofl_test |= mask;
> 420 continue;
> 421 }
> 422 ret = smp_call_function_single(cpu, func, rsp, 0);
> 423 if (!ret) {
> 424 mask_ofl_ipi &= ~mask;
> 425 continue;
> 426 }
> 427 /* Failed, raced with CPU hotplug operation. */
> 428 raw_spin_lock_irqsave_rcu_node(rnp, flags);
> 429 if ((rnp->qsmaskinitnext & mask) &&
> 430 (rnp->expmask & mask)) {
> 431 /* Online, so delay for a bit and try again. */
> 432 raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
> 433 trace_rcu_exp_grace_period(rsp->name, rcu_exp_gp_seq_endval(rsp), TPS("selectofl"));
> 434 schedule_timeout_uninterruptible(1);
> 435 goto retry_ipi;
> 436 }
> 437 /* CPU really is offline, so we can ignore it. */
> 438 if (!(rnp->expmask & mask))
> 439 mask_ofl_ipi &= ~mask;
> 440 raw_spin_unlock_irqrestore_rcu_node(rnp, flags);
> 441 }
> 442 /* Report quiescent states for those that went offline. */
> 443 mask_ofl_test |= mask_ofl_ipi;
> 444 if (mask_ofl_test)
> 445 rcu_report_exp_cpu_mult(rsp, rnp, mask_ofl_test, false);
> 446 trace_printk("%s rnp %d:%d second pass mask %#lx tasks %ld\n", __func__, rnp->grplo, rnp->grphi, mask_ofl_ipi, !!READ_ONCE(rnp->exp_tasks));
> 447 }
> 448 }
> 449
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
prev parent reply other threads:[~2018-02-01 10:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-01 7:43 [rcu:rcu/dev 48/48] kernel/rcu/tree_exp.h:407:3: note: in expansion of macro 'trace_printk' kbuild test robot
2018-02-01 10:39 ` Paul E. McKenney [this message]
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=20180201103915.GN3741@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=fengguang.wu@intel.com \
--cc=kbuild-all@01.org \
--cc=linux-kernel@vger.kernel.org \
/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.