|
@@ -492,33 +492,31 @@ static int sys_tracepoint_refcount;
|
|
|
|
|
|
void syscall_regfunc(void)
|
|
|
{
|
|
|
- unsigned long flags;
|
|
|
- struct task_struct *g, *t;
|
|
|
+ struct task_struct *p, *t;
|
|
|
|
|
|
if (!sys_tracepoint_refcount) {
|
|
|
- read_lock_irqsave(&tasklist_lock, flags);
|
|
|
- do_each_thread(g, t) {
|
|
|
+ read_lock(&tasklist_lock);
|
|
|
+ for_each_process_thread(p, t) {
|
|
|
/* Skip kernel threads. */
|
|
|
- if (t->mm)
|
|
|
+ if (!(t->flags & PF_KTHREAD))
|
|
|
set_tsk_thread_flag(t, TIF_SYSCALL_TRACEPOINT);
|
|
|
- } while_each_thread(g, t);
|
|
|
- read_unlock_irqrestore(&tasklist_lock, flags);
|
|
|
+ }
|
|
|
+ read_unlock(&tasklist_lock);
|
|
|
}
|
|
|
sys_tracepoint_refcount++;
|
|
|
}
|
|
|
|
|
|
void syscall_unregfunc(void)
|
|
|
{
|
|
|
- unsigned long flags;
|
|
|
- struct task_struct *g, *t;
|
|
|
+ struct task_struct *p, *t;
|
|
|
|
|
|
sys_tracepoint_refcount--;
|
|
|
if (!sys_tracepoint_refcount) {
|
|
|
- read_lock_irqsave(&tasklist_lock, flags);
|
|
|
- do_each_thread(g, t) {
|
|
|
+ read_lock(&tasklist_lock);
|
|
|
+ for_each_process_thread(p, t) {
|
|
|
clear_tsk_thread_flag(t, TIF_SYSCALL_TRACEPOINT);
|
|
|
- } while_each_thread(g, t);
|
|
|
- read_unlock_irqrestore(&tasklist_lock, flags);
|
|
|
+ }
|
|
|
+ read_unlock(&tasklist_lock);
|
|
|
}
|
|
|
}
|
|
|
#endif
|