This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
[SYSTEMTAP/PATCH v2 6/6] stp: rt: replace __stp_tf_task_work_list_lock to stp raw
- From: Santosh Shukla <sshukla at mvista dot com>
- To: dsmith at redhat dot com, jistone at redhat dot com
- Cc: systemtap at sourceware dot org, Santosh Shukla <sshukla at mvista dot com>
- Date: Tue, 16 Sep 2014 18:19:55 +0530
- Subject: [SYSTEMTAP/PATCH v2 6/6] stp: rt: replace __stp_tf_task_work_list_lock to stp raw
- Authentication-results: sourceware.org; auth=none
- References: <1410871795-12539-1-git-send-email-sshukla at mvista dot com>
Fixes this bug_on for -rt case :
[ 2184.284672] [<ffffffff81602329>] dump_stack+0x4e/0x7a
[ 2184.284679] [<ffffffff815fcaed>] __schedule_bug+0x9f/0xad
[ 2184.284686] [<ffffffff816057f7>] __schedule+0x627/0x6a0
[ 2184.284694] [<ffffffff810be5fb>] ? task_blocks_on_rt_mutex+0x19b/0x220
[ 2184.284699] [<ffffffff816058a0>] schedule+0x30/0xa0
[ 2184.284707] [<ffffffff8160727d>] rt_spin_lock_slowlock+0xbd/0x1f0
[ 2184.284714] [<ffffffff81607e25>] rt_spin_lock+0x25/0x30
[ 2184.284727] [<ffffffffa08ae573>] __stp_tf_alloc_task_work+0x43/0x90 [stap_63e05c06fe2b0c2d17f8d8e096a4ee8a__1700]
[ 2184.284737] [<ffffffffa08aff8b>] __stp_utrace_task_finder_target_syscall_exit+0xdb/0x350 [stap_63e05c06fe2b0c2d17f8d8e096a4ee8a__1700]
[ 2184.284747] [<ffffffffa08a91d5>] utrace_report_syscall_exit+0xc5/0x110 [stap_63e05c06fe2b0c2d17f8d8e096a4ee8a__1700]
[ 2184.284753] [<ffffffff81023ce0>] syscall_trace_leave+0x100/0x130
[ 2184.284758] [<ffffffff8161090b>] int_check_syscall_exit_work+0x34/0x3d
Signed-off-by: Santosh Shukla <sshukla@mvista.com>
---
runtime/linux/task_finder2.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/runtime/linux/task_finder2.c b/runtime/linux/task_finder2.c
index 64f2633..6195c7c 100644
--- a/runtime/linux/task_finder2.c
+++ b/runtime/linux/task_finder2.c
@@ -95,7 +95,7 @@ struct stap_task_finder_target {
};
static LIST_HEAD(__stp_tf_task_work_list);
-static DEFINE_SPINLOCK(__stp_tf_task_work_list_lock);
+static STP_DEFINE_SPINLOCK(__stp_tf_task_work_list_lock);
struct __stp_tf_task_work {
struct list_head list;
struct task_struct *task;
@@ -132,9 +132,9 @@ __stp_tf_alloc_task_work(void *data)
// list for easier lookup, but as short as the list should be
// (and as short lived as these items are) the extra overhead
// probably isn't worth the effort.
- spin_lock_irqsave(&__stp_tf_task_work_list_lock, flags);
+ stp_spin_lock_irqsave(&__stp_tf_task_work_list_lock, flags);
list_add(&tf_work->list, &__stp_tf_task_work_list);
- spin_unlock_irqrestore(&__stp_tf_task_work_list_lock, flags);
+ stp_spin_unlock_irqrestore(&__stp_tf_task_work_list_lock, flags);
return &tf_work->work;
}
@@ -150,14 +150,14 @@ static void __stp_tf_free_task_work(struct task_work *work)
tf_work = container_of(work, struct __stp_tf_task_work, work);
// Remove the item from the list.
- spin_lock_irqsave(&__stp_tf_task_work_list_lock, flags);
+ stp_spin_lock_irqsave(&__stp_tf_task_work_list_lock, flags);
list_for_each_entry(node, &__stp_tf_task_work_list, list) {
if (tf_work == node) {
list_del(&tf_work->list);
break;
}
}
- spin_unlock_irqrestore(&__stp_tf_task_work_list_lock, flags);
+ stp_spin_unlock_irqrestore(&__stp_tf_task_work_list_lock, flags);
// Actually free the data.
_stp_kfree(tf_work);
@@ -173,14 +173,14 @@ static void __stp_tf_cancel_task_work(void)
unsigned long flags;
// Cancel all remaining requests.
- spin_lock_irqsave(&__stp_tf_task_work_list_lock, flags);
+ stp_spin_lock_irqsave(&__stp_tf_task_work_list_lock, flags);
list_for_each_entry_safe(node, tmp, &__stp_tf_task_work_list, list) {
// Remove the item from the list, cancel it, then free it.
list_del(&node->list);
stp_task_work_cancel(node->task, node->work.func);
_stp_kfree(node);
}
- spin_unlock_irqrestore(&__stp_tf_task_work_list_lock, flags);
+ stp_spin_unlock_irqrestore(&__stp_tf_task_work_list_lock, flags);
}
static u32
--
1.8.3.1