diff options
author | Maynard Johnson <mpj@vervainp3.rchland.ibm.com> | 2009-03-18 12:59:33 -0500 |
---|---|---|
committer | Maynard Johnson <mpj@vervainp3.rchland.ibm.com> | 2009-03-18 12:59:33 -0500 |
commit | c32faac1fd0249ddd6265cf80c07a24e06d9aa0f (patch) | |
tree | 41032bc5ac98f9741b13037ea3cf059f3e78dc02 /runtime/itrace.c | |
parent | bc1a99dfcf9cd081ddf37f362dc1af2158c016b8 (diff) | |
download | systemtap-steved-c32faac1fd0249ddd6265cf80c07a24e06d9aa0f.tar.gz systemtap-steved-c32faac1fd0249ddd6265cf80c07a24e06d9aa0f.tar.xz systemtap-steved-c32faac1fd0249ddd6265cf80c07a24e06d9aa0f.zip |
Fix for spinlock bad magic error with itrace probe point
Diffstat (limited to 'runtime/itrace.c')
-rw-r--r-- | runtime/itrace.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/runtime/itrace.c b/runtime/itrace.c index ed32b0bc..da874f63 100644 --- a/runtime/itrace.c +++ b/runtime/itrace.c @@ -275,6 +275,7 @@ static int usr_itrace_init(int single_step, pid_t tid, struct stap_itrace_probe struct itrace_info *ui; struct task_struct *tsk; + spin_lock_init(&itrace_lock); rcu_read_lock(); tsk = find_task_by_vpid(tid); if (!tsk) { @@ -293,11 +294,6 @@ static int usr_itrace_init(int single_step, pid_t tid, struct stap_itrace_probe put_task_struct(tsk); rcu_read_unlock(); - spin_lock_init(&itrace_lock); - - /* set initial state */ - spin_lock(&itrace_lock); - spin_unlock(&itrace_lock); printk(KERN_INFO "usr_itrace_init: completed for tid = %d\n", tid); return 0; @@ -314,7 +310,6 @@ void static remove_usr_itrace_info(struct itrace_info *ui) if (debug) printk(KERN_INFO "remove_usr_itrace_info: tid=%d\n", ui->tid); - spin_lock(&itrace_lock); if (ui->tsk && ui->engine) { status = utrace_control(ui->tsk, ui->engine, UTRACE_DETACH); if (status < 0 && status != -ESRCH && status != -EALREADY) @@ -322,6 +317,7 @@ void static remove_usr_itrace_info(struct itrace_info *ui) "utrace_control(UTRACE_DETACH) returns %d\n", status); } + spin_lock(&itrace_lock); list_del(&ui->link); spin_unlock(&itrace_lock); kfree(ui); |