Messages in this thread | | | Date | Fri, 18 Aug 2017 09:14:17 +0800 | From | kbuild test robot <> | 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 [unhandled content-type:application/gzip] | |