[PATCH 7/9] Task Watchers v2: Register lockdep task watcher

Matt Helsley
2006-11-03T04:23:04Z

[-- Attachment #1: task-watchers-register-lockdep --]
[-- Type: text/plain, Size: 3682 bytes --]

Register a task watcher for lockdep instead of hooking into copy_process().

Signed-off-by: Matt Helsley <matthltc@us.ibm.com>
---
kernel/fork.c | 5 -----
kernel/lockdep.c | 9 +++++++++
2 files changed, 9 insertions(+), 5 deletions(-)

Benchmark results:
System: 4 1.7GHz ppc64 (Power 4+) processors, 30968600MB RAM, 2.6.19-rc2-mm2 kernel

Clone Number of Children Cloned
5000 7500 10000 12500 15000 17500
---------------------------------------------------------------------------------------
Mean 17808.2 18092.3 18215.5 18183.6 18310.8 18342.8
Dev 302.333 317.786 303.385 280.608 281.378 294.009
Err (%) 1.69772 1.75647 1.66553 1.5432 1.53668 1.60285

Fork Number of Children Forked
5000 7500 10000 12500 15000 17500
---------------------------------------------------------------------------------------
Mean 17821.8 18025.1 18112.5 18226 18217.4 18318
Dev 316.497 310.195 291.372 297.166 364.908 293.89
Err (%) 1.7759 1.7209 1.60868 1.63045 2.00307 1.60438

Kernbench:
Elapsed: 124.333s User: 439.787s System: 46.491s CPU: 390.7%
439.67user 46.42system 2:04.09elapsed 391%CPU (0avgtext+0avgdata 0maxresident)k
439.82user 46.46system 2:04.17elapsed 391%CPU (0avgtext+0avgdata 0maxresident)k
439.75user 46.65system 2:04.24elapsed 391%CPU (0avgtext+0avgdata 0maxresident)k
439.79user 46.43system 2:04.54elapsed 390%CPU (0avgtext+0avgdata 0maxresident)k
439.71user 46.43system 2:04.56elapsed 390%CPU (0avgtext+0avgdata 0maxresident)k
439.71user 46.51system 2:04.45elapsed 390%CPU (0avgtext+0avgdata 0maxresident)k
439.86user 46.64system 2:04.69elapsed 390%CPU (0avgtext+0avgdata 0maxresident)k
439.87user 46.44system 2:04.05elapsed 392%CPU (0avgtext+0avgdata 0maxresident)k
439.87user 46.48system 2:04.63elapsed 390%CPU (0avgtext+0avgdata 0maxresident)k
439.82user 46.45system 2:03.91elapsed 392%CPU (0avgtext+0avgdata 0maxresident)k

Index: linux-2.6.19-rc2-mm2/kernel/fork.c
===================================================================
--- linux-2.6.19-rc2-mm2.orig/kernel/fork.c
+++ linux-2.6.19-rc2-mm2/kernel/fork.c
@@ -1052,15 +1052,10 @@ static struct task_struct *copy_process(
p->tgid = current->tgid;

retval = notify_task_watchers(WATCH_TASK_INIT, clone_flags, p);
if (retval < 0)
goto bad_fork_cleanup_delays_binfmt;
-#ifdef CONFIG_LOCKDEP
- p->lockdep_depth = 0; /* no locks held yet */
- p->curr_chain_key = 0;
- p->lockdep_recursion = 0;
-#endif

#ifdef CONFIG_DEBUG_MUTEXES
p->blocked_on = NULL; /* not blocked yet */
#endif

Index: linux-2.6.19-rc2-mm2/kernel/lockdep.c
===================================================================
--- linux-2.6.19-rc2-mm2.orig/kernel/lockdep.c
+++ linux-2.6.19-rc2-mm2/kernel/lockdep.c
@@ -2556,10 +2556,19 @@ void __init lockdep_init(void)
INIT_LIST_HEAD(chainhash_table + i);

lockdep_initialized = 1;
}

+static int init_task_lockdep(unsigned long clone_flags, struct task_struct *p)
+{
+ p->lockdep_depth = 0; /* no locks held yet */
+ p->curr_chain_key = 0;
+ p->lockdep_recursion = 0;
+ return 0;
+}
+task_watcher_func(init, init_task_lockdep);
+
void __init lockdep_info(void)
{
printk("Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar\n");

printk("... MAX_LOCKDEP_SUBCLASSES: %lu\n", MAX_LOCKDEP_SUBCLASSES);