* [PATCH] Create a function that indents without the tid()
@ 2009-09-30 18:11 Breno Leitao
2009-09-30 19:15 ` Frank Ch. Eigler
0 siblings, 1 reply; 7+ messages in thread
From: Breno Leitao @ 2009-09-30 18:11 UTC (permalink / raw)
To: systemtap
Actually indent_thread() is a very useful function, but
sometimes you're probing something that is not related to
thread, as an interrupt function, and if the application
changes during the interrupt, the indentation gets confused.
For example:
0 swapper(0): -> neo_copy_data_from_queue_to_uart
69 a.out(7659): -> neo_parse_modem
74 a.out(7659): -> neo_param
14 swapper(0): <- neo_copy_data_from_queue_to_uart
83 a.out(7659): -> jsm_carrier
86 a.out(7659): <- jsm_carrier
0 swapper(0): -> neo_parse_modem
94 a.out(7659): <- jsm_tty_set_termios
8 swapper(0): <- neo_parse_modem
So, I decided to create a simpler function that doesn't
consider the thread.
---
diff --git a/tapset/indent.stp b/tapset/indent.stp
index dface78..ee4e7b5 100644
--- a/tapset/indent.stp
+++ b/tapset/indent.stp
@@ -20,3 +20,11 @@ function thread_indent (delta)
{
return _generic_indent (tid(), delta)
}
+
+function indent(delta){
+ _indent += delta
+
+ for (i=1; i<_indent; i++) r .= " "
+
+ return r
+}
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Create a function that indents without the tid()
2009-09-30 18:11 [PATCH] Create a function that indents without the tid() Breno Leitao
@ 2009-09-30 19:15 ` Frank Ch. Eigler
2009-09-30 19:57 ` Breno Leitao
0 siblings, 1 reply; 7+ messages in thread
From: Frank Ch. Eigler @ 2009-09-30 19:15 UTC (permalink / raw)
To: Breno Leitao; +Cc: systemtap
Breno Leitao <leitao@linux.vnet.ibm.com> writes:
> Actually indent_thread() is a very useful function, but
> sometimes you're probing something that is not related to
> thread, as an interrupt function, and if the application
> changes during the interrupt, the indentation gets confused.
> [...]
It gets a bit confusing to read, but it is correct in several senses.
(I wonder what ftrace pretty-printed function traces with SMP look
like.)
> [...]
> So, I decided to create a simpler function that doesn't
> consider the thread.
> +function indent(delta){
> + _indent += delta
> + for (i=1; i<_indent; i++) r .= " "
> + return r
> +}
Perhaps, but why not just
function indent(delta) { return _generic_indent(0, delta) }
?
- FChE
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Create a function that indents without the tid()
2009-09-30 19:15 ` Frank Ch. Eigler
@ 2009-09-30 19:57 ` Breno Leitao
2009-09-30 20:25 ` Frank Ch. Eigler
0 siblings, 1 reply; 7+ messages in thread
From: Breno Leitao @ 2009-09-30 19:57 UTC (permalink / raw)
To: Frank Ch. Eigler; +Cc: systemtap
Hi Frank.
Frank Ch. Eigler wrote:
>> So, I decided to create a simpler function that doesn't
>> consider the thread.
>
>> +function indent(delta){
>> + _indent += delta
>> + for (i=1; i<_indent; i++) r .= " "
>> + return r
>> +}
>
> Perhaps, but why not just
>
> function indent(delta) { return _generic_indent(0, delta) }
Well, it makes sense, and it was my first implementation, but later I found that
tid() can be 0, and then the space counter (_indent_counters[idx]) will be
corrupted when running indent() and thread_indent() together.
So, that is why in my example I put the example that contains the first line as:
0 swapper(0): -> neo_copy_data_from_queue_to_uart
So, we can assume the risk and implement as you proposed, assuming that no one will
use both function together.
Thanks for you review.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Create a function that indents without the tid()
2009-09-30 19:57 ` Breno Leitao
@ 2009-09-30 20:25 ` Frank Ch. Eigler
2009-09-30 20:55 ` Breno Leitao
0 siblings, 1 reply; 7+ messages in thread
From: Frank Ch. Eigler @ 2009-09-30 20:25 UTC (permalink / raw)
To: Breno Leitao; +Cc: systemtap
Breno Leitao <leitao@linux.vnet.ibm.com> writes:
> [...]
>> function indent(delta) { return _generic_indent(0, delta) }
> Well, it makes sense, and it was my first implementation, but later I found that
> tid() can be 0, and then the space counter (_indent_counters[idx]) will be
> corrupted when running indent() and thread_indent() together. [...]
Well, ok, how about { return _generic_indent(-1, delta) } ?
- FChE
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Create a function that indents without the tid()
2009-09-30 20:25 ` Frank Ch. Eigler
@ 2009-09-30 20:55 ` Breno Leitao
2009-09-30 21:00 ` Frank Ch. Eigler
0 siblings, 1 reply; 7+ messages in thread
From: Breno Leitao @ 2009-09-30 20:55 UTC (permalink / raw)
To: Frank Ch. Eigler; +Cc: systemtap
Frank Ch. Eigler wrote:
> Breno Leitao <leitao@linux.vnet.ibm.com> writes:
>
>> [...]
>>> function indent(delta) { return _generic_indent(0, delta) }
>
>> Well, it makes sense, and it was my first implementation, but later I found that
>> tid() can be 0, and then the space counter (_indent_counters[idx]) will be
>> corrupted when running indent() and thread_indent() together. [...]
>
> Well, ok, how about { return _generic_indent(-1, delta) } ?
Nice. It works. Silly me, I didn't think about negative indexes.
The only problem I see now, is that it will display the scheduled process, and
since the process names have different lengths, the alignment will be lost and
sometimes it's difficult to follow/read, as an example I just got.
534776 a.out(6928): -> neo_set_no_input_flow_control
535094 swapper(0): <- neo_parse_modem
535357 a.out(6928): <- neo_set_no_input_flow_control
So, if this is not important, I can submit a new patch with the implementation as
you just described.
Thanks
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Create a function that indents without the tid()
2009-09-30 20:55 ` Breno Leitao
@ 2009-09-30 21:00 ` Frank Ch. Eigler
2009-10-01 1:26 ` Breno Leitao
0 siblings, 1 reply; 7+ messages in thread
From: Frank Ch. Eigler @ 2009-09-30 21:00 UTC (permalink / raw)
To: Breno Leitao; +Cc: systemtap
Hi -
On Wed, Sep 30, 2009 at 05:55:01PM -0300, Breno Leitao wrote:
> [...] The only problem I see now, is that it will display the
> scheduled process [...]
How about generalizing _generic_indent to also take the
execname()/tid() as incoming parameters:
function _generic_indent (idx, desc, delta) {
...
r = sprintf("%6d %s:", (ts - _indent_timestamps[idx]), desc)
...
}
function thread_indent (delta)
{
return _generic_indent (tid(), sprintf("%s(%d)", execname(), tid()), delta)
}
function indent (delta)
{
return _generic_indent (-1, "", delta)
}
- FChE
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Create a function that indents without the tid()
2009-09-30 21:00 ` Frank Ch. Eigler
@ 2009-10-01 1:26 ` Breno Leitao
0 siblings, 0 replies; 7+ messages in thread
From: Breno Leitao @ 2009-10-01 1:26 UTC (permalink / raw)
To: Frank Ch. Eigler; +Cc: systemtap
Frank,
Frank Ch. Eigler wrote:
> How about generalizing _generic_indent to also take the
> execname()/tid() as incoming parameters:
Yes. It works perfectly as you told.
Here is the patch, with some basic documentation:
---
diff --git a/tapset/indent.stp b/tapset/indent.stp
index dface78..1dbbebd 100644
--- a/tapset/indent.stp
+++ b/tapset/indent.stp
@@ -1,6 +1,6 @@
global _indent_counters, _indent_timestamps
-function _generic_indent (idx, delta)
+function _generic_indent (idx, desc, delta)
{
ts = __indent_timestamp ()
if (! _indent_counters[idx]) _indent_timestamps[idx] = ts
@@ -9,14 +9,26 @@ function _generic_indent (idx, delta)
x = _indent_counters[idx] + (delta > 0 ? delta : 0)
_indent_counters[idx] += delta
- r = sprintf("%6d %s(%d):", (ts - _indent_timestamps[idx]),
- execname(), tid())
+ r = sprintf("%6d %s:", (ts - _indent_timestamps[idx]), desc)
+
for (i=1; i<x; i++) r .= " "
return r
}
+/**
+ * sfunction thread_indent - returns an amount of space with the current task information
+ * @delta: the amount of space added/removed for each call
+ */
function thread_indent (delta)
{
- return _generic_indent (tid(), delta)
+ return _generic_indent (tid(), sprintf("%s(%d)", execname(), tid()), delta)
+}
+
+/**
+ * sfunction indent - returns an amount of space to indent
+ * @delta: the amount of space added/removed for each call
+ */
+function indent(delta){
+ return _generic_indent(-1, "", delta)
}
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-10-01 1:26 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-30 18:11 [PATCH] Create a function that indents without the tid() Breno Leitao
2009-09-30 19:15 ` Frank Ch. Eigler
2009-09-30 19:57 ` Breno Leitao
2009-09-30 20:25 ` Frank Ch. Eigler
2009-09-30 20:55 ` Breno Leitao
2009-09-30 21:00 ` Frank Ch. Eigler
2009-10-01 1:26 ` Breno Leitao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).