Dear list, I'm running custom Fedora 17 Kernel 3.3.0-0.rc5.git3.1.yfkm2.fc17.x86_64, and the warning was shown on dmesg: [ 858.634304] [ 858.634324] =============================== [ 858.634350] [ INFO: suspicious RCU usage. ] [ 858.634375] 3.3.0-0.rc5.git3.1.yfkm2.fc17.x86_64 #1 Not tainted [ 858.634409] ------------------------------- [ 858.634435] kernel/pid.c:425 find_task_by_pid_ns() needs rcu_read_lock() protection! [ 858.634478] [ 858.634479] other info that might help us debug this: [ 858.634480] [ 858.634528] [ 858.634529] rcu_scheduler_active = 1, debug_locks = 0 [ 858.634567] no locks held by monitor/10550. [ 858.634591] [ 858.634592] stack backtrace: [ 858.634620] Pid: 10550, comm: monitor Not tainted 3.3.0-0.rc5.git3.1.yfkm2.fc17.x86_64 #1 [ 858.634666] Call Trace: [ 858.634688] [<ffffffff810c8c55>] lockdep_rcu_suspicious+0xe5/0x100 [ 858.634727] [<ffffffff81086921>] find_task_by_pid_ns+0x81/0xa0 [ 858.634762] [<ffffffff81086962>] find_task_by_vpid+0x22/0x30 [ 858.634798] [<ffffffff8131ccd5>] yfkm2_is_pid_running+0x15/0x40 [ 858.634835] [<ffffffff8131ce54>] sys_yfkm2_monitor+0x14/0x80 [ 858.634870] [<ffffffff816a6ba9>] system_call_fastpath+0x16/0x1b monitor is user application that call sys_yfkm2_monitor syscall passing a pid to it. The custom code worked as expected but I'm curious with the warning message shown on dmesg. What am I doing wrong? The user application monitor.c: ... #define SYS_yfkm2_monitor __NR_yfkm2_monitor ... ret = syscall(SYS_yfkm2_monitor, pid); ... The Kernel code yfkm2.c: ... struct yfkm2 { pid_t monitor; /* PID to monitor */ pid_t notifyme; /* PID to notify */ struct list_head list; /* Linked List struct */ }; ... /* Define and initialize yfkm2_(linked)list */ LIST_HEAD(yfkm2_list); ... /* Define and initialize yfkm2_(read&write)lock */ DEFINE_RWLOCK(yfkm2_lock); ... /* * asmlinkage long sys_yfkm2_monitor(pid_t monitor) * * The system call that check if monitor correspond to a running pid and stores * monitor at yfkm2_list->monitor * * return 0 if pid is running * return 1 if pid is not running */ asmlinkage long sys_yfkm2_monitor(pid_t monitor) { struct yfkm2 *yfkm2_tmp; if (yfkm2_is_pid_running(monitor) == 0) { yfkm2_tmp = kmalloc(sizeof(*yfkm2_tmp), GFP_KERNEL); yfkm2_tmp->monitor = monitor; yfkm2_tmp->notifyme = 0; write_lock(&yfkm2_lock); list_add(&yfkm2_tmp->list, &yfkm2_list); write_unlock(&yfkm2_lock); return 0; } return 1; } ... /* * yfkm2_is_pid_running(pid_t pid) * * Check if pid is running * * return 0 if pid is running * return 1 if pid is not running */ int yfkm2_is_pid_running(pid_t pid) { struct task_struct *q; q = find_task_by_vpid(pid); if (q != NULL && q->pid == pid) return 0; return 1; } Thank you! Peter -- Peter Senna Tschudin peter.senna@xxxxxxxxx gpg id: 48274C36 _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies