lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <201708180914.KFAeAYJJ%fengguang.wu@intel.com>
Date:   Fri, 18 Aug 2017 09:14:17 +0800
From:   kbuild test robot <fengguang.wu@...el.com>
To:     "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>
Cc:     kbuild-all@...org, linux-kernel@...r.kernel.org
Subject: [rcu:rcu/next 18/18] kernel/rcu/tree.c:1347:4: error: implicit
 declaration of function 'irq_work_queue_on'

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git rcu/next
head:   2679cfaafa4cf7cb7aad3de8ec5d54fb295c1c5e
commit: 2679cfaafa4cf7cb7aad3de8ec5d54fb295c1c5e [18/18] rcu: Make RCU CPU stall warnings check for irq-disabled CPUs
config: x86_64-randconfig-x000-201733 (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        git checkout 2679cfaafa4cf7cb7aad3de8ec5d54fb295c1c5e
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   kernel/rcu/tree.c: In function 'rcu_implicit_dynticks_qs':
>> kernel/rcu/tree.c:1347:4: error: implicit declaration of function 'irq_work_queue_on' [-Werror=implicit-function-declaration]
       irq_work_queue_on(&rdp->rcu_iw, rdp->cpu);
       ^~~~~~~~~~~~~~~~~
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from kernel/rcu/tree.c:30:
   kernel/rcu/tree.c: At top level:
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'strcpy' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:390:2: note: in expansion of macro 'if'
     if (p_size == (size_t)-1 && q_size == (size_t)-1)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'kmemdup' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:380:2: note: in expansion of macro 'if'
     if (p_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'kmemdup' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:378:2: note: in expansion of macro 'if'
     if (__builtin_constant_p(size) && p_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr_inv' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:369:2: note: in expansion of macro 'if'
     if (p_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr_inv' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:367:2: note: in expansion of macro 'if'
     if (__builtin_constant_p(size) && p_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:358:2: note: in expansion of macro 'if'
     if (p_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memchr' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:356:2: note: in expansion of macro 'if'
     if (__builtin_constant_p(size) && p_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:348:2: note: in expansion of macro 'if'
     if (p_size < size || q_size < size)
     ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:345:3: note: in expansion of macro 'if'
      if (q_size < size)
      ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static
       ______f = {     \
       ^
   include/linux/compiler.h:154:23: note: in expansion of macro '__trace_if'
    #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
                          ^~~~~~~~~~
   include/linux/string.h:343:3: note: in expansion of macro 'if'
      if (p_size < size)
      ^~
   include/linux/compiler.h:162:4: warning: '______f' is static but declared in inline function 'memcmp' which is not static

vim +/irq_work_queue_on +1347 kernel/rcu/tree.c

  1251	
  1252	/*
  1253	 * Return true if the specified CPU has passed through a quiescent
  1254	 * state by virtue of being in or having passed through an dynticks
  1255	 * idle state since the last call to dyntick_save_progress_counter()
  1256	 * for this same CPU, or by virtue of having been offline.
  1257	 */
  1258	static int rcu_implicit_dynticks_qs(struct rcu_data *rdp)
  1259	{
  1260		unsigned long jtsq;
  1261		bool *rnhqp;
  1262		bool *ruqp;
  1263		struct rcu_node *rnp = rdp->mynode;
  1264	
  1265		/*
  1266		 * If the CPU passed through or entered a dynticks idle phase with
  1267		 * no active irq/NMI handlers, then we can safely pretend that the CPU
  1268		 * already acknowledged the request to pass through a quiescent
  1269		 * state.  Either way, that CPU cannot possibly be in an RCU
  1270		 * read-side critical section that started before the beginning
  1271		 * of the current RCU grace period.
  1272		 */
  1273		if (rcu_dynticks_in_eqs_since(rdp->dynticks, rdp->dynticks_snap)) {
  1274			trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti"));
  1275			rdp->dynticks_fqs++;
  1276			rcu_gpnum_ovf(rnp, rdp);
  1277			return 1;
  1278		}
  1279	
  1280		/*
  1281		 * Has this CPU encountered a cond_resched_rcu_qs() since the
  1282		 * beginning of the grace period?  For this to be the case,
  1283		 * the CPU has to have noticed the current grace period.  This
  1284		 * might not be the case for nohz_full CPUs looping in the kernel.
  1285		 */
  1286		jtsq = jiffies_till_sched_qs;
  1287		ruqp = per_cpu_ptr(&rcu_dynticks.rcu_urgent_qs, rdp->cpu);
  1288		if (time_after(jiffies, rdp->rsp->gp_start + jtsq) &&
  1289		    READ_ONCE(rdp->rcu_qs_ctr_snap) != per_cpu(rcu_dynticks.rcu_qs_ctr, rdp->cpu) &&
  1290		    READ_ONCE(rdp->gpnum) == rnp->gpnum && !rdp->gpwrap) {
  1291			trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("rqc"));
  1292			rcu_gpnum_ovf(rnp, rdp);
  1293			return 1;
  1294		} else if (time_after(jiffies, rdp->rsp->gp_start + jtsq)) {
  1295			/* Load rcu_qs_ctr before store to rcu_urgent_qs. */
  1296			smp_store_release(ruqp, true);
  1297		}
  1298	
  1299		/* Check for the CPU being offline. */
  1300		if (!(rdp->grpmask & rcu_rnp_online_cpus(rnp))) {
  1301			trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("ofl"));
  1302			rdp->offline_fqs++;
  1303			rcu_gpnum_ovf(rnp, rdp);
  1304			return 1;
  1305		}
  1306	
  1307		/*
  1308		 * A CPU running for an extended time within the kernel can
  1309		 * delay RCU grace periods.  When the CPU is in NO_HZ_FULL mode,
  1310		 * even context-switching back and forth between a pair of
  1311		 * in-kernel CPU-bound tasks cannot advance grace periods.
  1312		 * So if the grace period is old enough, make the CPU pay attention.
  1313		 * Note that the unsynchronized assignments to the per-CPU
  1314		 * rcu_need_heavy_qs variable are safe.  Yes, setting of
  1315		 * bits can be lost, but they will be set again on the next
  1316		 * force-quiescent-state pass.  So lost bit sets do not result
  1317		 * in incorrect behavior, merely in a grace period lasting
  1318		 * a few jiffies longer than it might otherwise.  Because
  1319		 * there are at most four threads involved, and because the
  1320		 * updates are only once every few jiffies, the probability of
  1321		 * lossage (and thus of slight grace-period extension) is
  1322		 * quite low.
  1323		 */
  1324		rnhqp = &per_cpu(rcu_dynticks.rcu_need_heavy_qs, rdp->cpu);
  1325		if (!READ_ONCE(*rnhqp) &&
  1326		    (time_after(jiffies, rdp->rsp->gp_start + jtsq) ||
  1327		     time_after(jiffies, rdp->rsp->jiffies_resched))) {
  1328			WRITE_ONCE(*rnhqp, true);
  1329			/* Store rcu_need_heavy_qs before rcu_urgent_qs. */
  1330			smp_store_release(ruqp, true);
  1331			rdp->rsp->jiffies_resched += jtsq; /* Re-enable beating. */
  1332		}
  1333	
  1334		/*
  1335		 * If more than halfway to RCU CPU stall-warning time, do a
  1336		 * resched_cpu() to try to loosen things up a bit.  Also check to
  1337		 * see if the CPU is getting hammered with interrupts, but only
  1338		 * once per grace period, just to keep the IPIs down to a dull roar.
  1339		 */
  1340		if (jiffies - rdp->rsp->gp_start > rcu_jiffies_till_stall_check() / 2) {
  1341			resched_cpu(rdp->cpu);
  1342			if (!rdp->rcu_iw_pending && rdp->rcu_iw_gpnum != rnp->gpnum &&
  1343			    cpu_online(rdp->cpu)) {
  1344				init_irq_work(&rdp->rcu_iw, rcu_iw_handler);
  1345				rdp->rcu_iw_pending = true;
  1346				rdp->rcu_iw_gpnum = rnp->gpnum;
> 1347				irq_work_queue_on(&rdp->rcu_iw, rdp->cpu);
  1348			}
  1349		}
  1350	
  1351		return 0;
  1352	}
  1353	

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

Download attachment ".config.gz" of type "application/gzip" (24658 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ