* [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer
@ 2009-07-22 3:21 Xiao Guangrong
2009-07-22 3:23 ` [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter Xiao Guangrong
` (2 more replies)
0 siblings, 3 replies; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-22 3:21 UTC (permalink / raw)
To: Ingo Molnar
Cc: K.Prasad, Alan Stern, Frederic Weisbecker, Steven Rostedt, LKML
Fix the output format of ksym tracer, make it properly aligned
Befor patch:
# tracer: ksym_tracer
#
# TASK-PID CPU# Symbol Type Function
# | | | | |
bash 1378 1 ksym_tracer_mutex W mutex_lock+0x11/0x27
bash 1378 1 ksym_filter_head W process_new_ksym_entry+0xd2/0x10c
bash 1378 1 ksym_tracer_mutex W mutex_unlock+0x12/0x1b
cat 1429 0 ksym_tracer_mutex W mutex_lock+0x11/0x27
After patch:
# tracer: ksym_tracer
#
# TASK-PID CPU# Symbol Type Function
# | | | | |
cat-1423 [000] ksym_tracer_mutex RW mutex_lock+0x11/0x27
cat-1423 [000] ksym_filter_head RW ksym_trace_filter_read+0x6e/0x10d
cat-1423 [000] ksym_tracer_mutex RW mutex_unlock+0x12/0x1b
cat-1423 [000] ksym_tracer_mutex RW mutex_lock+0x11/0x27
cat-1423 [000] ksym_filter_head RW ksym_trace_filter_read+0x6e/0x10d
cat-1423 [000] ksym_tracer_mutex RW mutex_unlock+0x12/0x1b
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
---
kernel/trace/trace_ksym.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index 1256a6e..fbf3a8e 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -370,13 +370,12 @@ static int ksym_trace_init(struct trace_array *tr)
static void ksym_trace_print_header(struct seq_file *m)
{
-
seq_puts(m,
- "# TASK-PID CPU# Symbol Type "
- "Function \n");
+ "# TASK-PID CPU# Symbol "
+ "Type Function\n");
seq_puts(m,
- "# | | | | "
- "| \n");
+ "# | | | "
+ " | |\n");
}
static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
@@ -392,7 +391,7 @@ static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
trace_assign_type(field, entry);
- ret = trace_seq_printf(s, "%-15s %-5d %-3d %-20s ", field->cmd,
+ ret = trace_seq_printf(s, "%11s-%-5d [%03d] %-30s ", field->cmd,
entry->pid, iter->cpu, field->ksym_name);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -412,7 +411,7 @@ static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
return TRACE_TYPE_PARTIAL_LINE;
sprint_symbol(str, field->ip);
- ret = trace_seq_printf(s, "%-20s\n", str);
+ ret = trace_seq_printf(s, "%s\n", str);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
--
1.6.1.2
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter
2009-07-22 3:21 [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer Xiao Guangrong
@ 2009-07-22 3:23 ` Xiao Guangrong
2009-11-21 13:35 ` [tip:perf/core] " tip-bot for Xiao Guangrong
2009-07-22 3:25 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter Xiao Guangrong
2009-11-21 13:35 ` [tip:perf/core] tracing/ksym_tracer: fix the output of ksym tracer tip-bot for Xiao Guangrong
2 siblings, 1 reply; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-22 3:23 UTC (permalink / raw)
To: Ingo Molnar
Cc: K.Prasad, Alan Stern, Frederic Weisbecker, Steven Rostedt, LKML
This patch fix 2 bugs:
- fix the return value of ksym_trace_filter_write() when we want to
clear symbol in ksym_trace_filter file
for example:
# echo global_trace:rw- > /debug/tracing/ksym_trace_filter
# echo global_trace:--- > /debug/tracing/ksym_trace_filter
-bash: echo: write error: Invalid argument
# cat /debug/tracing/ksym_trace_filter
#
We want to clear 'global_trace' in ksym_trace_filter, it complain
with "Invalid argument", but the operation is successful
- the "r--" access types is not allowed, but ksym_trace_filter file think
it OK
for example:
# echo ksym_tracer_mutex:r-- > ksym_trace_filter
-bash: echo: write error: Resource temporarily unavailable
# dmesg
ksym_tracer request failed. Try again later!!
The error occur at register_kernel_hw_breakpoint(), but It's should
at access types parser
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
---
kernel/trace/trace_ksym.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index fbf3a8e..cd5cb65 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -135,6 +135,9 @@ static int ksym_trace_get_access_type(char *str)
case 6:
access = HW_BREAKPOINT_RW;
break;
+ case 4:
+ access = -EINVAL;
+ break;
case 2:
access = HW_BREAKPOINT_WRITE;
break;
@@ -312,6 +315,7 @@ static ssize_t ksym_trace_filter_write(struct file *file,
kfree(entry->ksym_hbp->info.name);
kfree(entry->ksym_hbp);
kfree(entry);
+ ret = 0;
goto out;
} else {
/* Check for malformed request: (4) */
--
1.6.1.2
^ permalink raw reply related [flat|nested] 15+ messages in thread* [tip:perf/core] tracing/ksym_tracer: fix write operation of ksym_trace_filter
2009-07-22 3:23 ` [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter Xiao Guangrong
@ 2009-11-21 13:35 ` tip-bot for Xiao Guangrong
0 siblings, 0 replies; 15+ messages in thread
From: tip-bot for Xiao Guangrong @ 2009-11-21 13:35 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, xiaoguangrong, tglx
Commit-ID: 8e068542a8d9efec55126284d2f5cb32f003d507
Gitweb: http://git.kernel.org/tip/8e068542a8d9efec55126284d2f5cb32f003d507
Author: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
AuthorDate: Wed, 22 Jul 2009 11:23:41 +0800
Committer: Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 20:52:05 -0400
tracing/ksym_tracer: fix write operation of ksym_trace_filter
This patch fix 2 bugs:
- fix the return value of ksym_trace_filter_write() when we want to
clear symbol in ksym_trace_filter file
for example:
# echo global_trace:rw- > /debug/tracing/ksym_trace_filter
# echo global_trace:--- > /debug/tracing/ksym_trace_filter
-bash: echo: write error: Invalid argument
# cat /debug/tracing/ksym_trace_filter
#
We want to clear 'global_trace' in ksym_trace_filter, it complain
with "Invalid argument", but the operation is successful
- the "r--" access types is not allowed, but ksym_trace_filter file think
it OK
for example:
# echo ksym_tracer_mutex:r-- > ksym_trace_filter
-bash: echo: write error: Resource temporarily unavailable
# dmesg
ksym_tracer request failed. Try again later!!
The error occur at register_kernel_hw_breakpoint(), but It's should
at access types parser
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
LKML-Reference: <4A66863D.5090802@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace_ksym.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index fbf3a8e..cd5cb65 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -135,6 +135,9 @@ static int ksym_trace_get_access_type(char *str)
case 6:
access = HW_BREAKPOINT_RW;
break;
+ case 4:
+ access = -EINVAL;
+ break;
case 2:
access = HW_BREAKPOINT_WRITE;
break;
@@ -312,6 +315,7 @@ static ssize_t ksym_trace_filter_write(struct file *file,
kfree(entry->ksym_hbp->info.name);
kfree(entry->ksym_hbp);
kfree(entry);
+ ret = 0;
goto out;
} else {
/* Check for malformed request: (4) */
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter
2009-07-22 3:21 [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer Xiao Guangrong
2009-07-22 3:23 ` [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter Xiao Guangrong
@ 2009-07-22 3:25 ` Xiao Guangrong
2009-07-22 5:06 ` K.Prasad
2009-07-23 4:01 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2 Xiao Guangrong
2009-11-21 13:35 ` [tip:perf/core] tracing/ksym_tracer: fix the output of ksym tracer tip-bot for Xiao Guangrong
2 siblings, 2 replies; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-22 3:25 UTC (permalink / raw)
To: Ingo Molnar
Cc: K.Prasad, Alan Stern, Frederic Weisbecker, Steven Rostedt, LKML
It's rather bored to clear symbol one by one in ksym_trace_filter
file, so, this patch can let ksym_trace_filter file support quick
clear, we can write "0" to this file, it can clear all symbols
for example:
# cat ksym_trace_filter
ksym_filter_head:rw-
global_trace:rw-
# echo 0 > ksym_trace_filter
# cat ksym_trace_filter
#
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
---
kernel/trace/trace_ksym.c | 45 +++++++++++++++++++++++++++------------------
1 files changed, 27 insertions(+), 18 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index cd5cb65..96b9e19 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -163,8 +163,6 @@ static int parse_ksym_trace_str(char *input_string, char **ksymname,
{
int ret;
- strstrip(input_string);
-
*ksymname = strsep(&input_string, ":");
*addr = kallsyms_lookup_name(*ksymname);
@@ -262,6 +260,25 @@ static ssize_t ksym_trace_filter_read(struct file *filp, char __user *ubuf,
return cnt;
}
+static void __ksym_trace_reset(void)
+{
+ struct trace_ksym *entry;
+ struct hlist_node *node, *node1;
+
+ mutex_lock(&ksym_tracer_mutex);
+ hlist_for_each_entry_safe(entry, node, node1, &ksym_filter_head,
+ ksym_hlist) {
+ unregister_kernel_hw_breakpoint(entry->ksym_hbp);
+ ksym_filter_entry_count--;
+ hlist_del_rcu(&(entry->ksym_hlist));
+ synchronize_rcu();
+ kfree(entry->ksym_hbp->info.name);
+ kfree(entry->ksym_hbp);
+ kfree(entry);
+ }
+ mutex_unlock(&ksym_tracer_mutex);
+}
+
static ssize_t ksym_trace_filter_write(struct file *file,
const char __user *buffer,
size_t count, loff_t *ppos)
@@ -282,6 +299,13 @@ static ssize_t ksym_trace_filter_write(struct file *file,
}
input_string[count] = '\0';
+ strstrip(input_string);
+ if (!strcmp(input_string, "0")) {
+ __ksym_trace_reset();
+ kfree(input_string);
+ return count;
+ }
+
ret = op = parse_ksym_trace_str(input_string, &ksymname, &ksym_addr);
if (ret < 0) {
kfree(input_string);
@@ -341,23 +365,8 @@ static const struct file_operations ksym_tracing_fops = {
static void ksym_trace_reset(struct trace_array *tr)
{
- struct trace_ksym *entry;
- struct hlist_node *node, *node1;
-
ksym_tracing_enabled = 0;
-
- mutex_lock(&ksym_tracer_mutex);
- hlist_for_each_entry_safe(entry, node, node1, &ksym_filter_head,
- ksym_hlist) {
- unregister_kernel_hw_breakpoint(entry->ksym_hbp);
- ksym_filter_entry_count--;
- hlist_del_rcu(&(entry->ksym_hlist));
- synchronize_rcu();
- kfree(entry->ksym_hbp->info.name);
- kfree(entry->ksym_hbp);
- kfree(entry);
- }
- mutex_unlock(&ksym_tracer_mutex);
+ __ksym_trace_reset();
}
static int ksym_trace_init(struct trace_array *tr)
--
1.6.1.2
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter
2009-07-22 3:25 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter Xiao Guangrong
@ 2009-07-22 5:06 ` K.Prasad
2009-07-22 9:56 ` Xiao Guangrong
2009-07-23 4:01 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2 Xiao Guangrong
1 sibling, 1 reply; 15+ messages in thread
From: K.Prasad @ 2009-07-22 5:06 UTC (permalink / raw)
To: Xiao Guangrong
Cc: Ingo Molnar, Alan Stern, Frederic Weisbecker, Steven Rostedt,
LKML
On Wed, Jul 22, 2009 at 11:25:14AM +0800, Xiao Guangrong wrote:
> It's rather bored to clear symbol one by one in ksym_trace_filter
> file, so, this patch can let ksym_trace_filter file support quick
> clear, we can write "0" to this file, it can clear all symbols
>
> for example:
> # cat ksym_trace_filter
> ksym_filter_head:rw-
> global_trace:rw-
> # echo 0 > ksym_trace_filter
> # cat ksym_trace_filter
> #
>
It's nice to have this feature added and the other patches fix issues in
ksym tracer. Can you have this patch add the capability to clear all
breakpoints in one-shot through wild-cards?
Ingo wanted something like "echo "*:---" > ksym_trace_filter". The patch
I sent here: http://lkml.org/lkml/2009/6/20/73 implements the same. You
may want to implement something on those lines.
Thanks,
K.Prasad
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter
2009-07-22 5:06 ` K.Prasad
@ 2009-07-22 9:56 ` Xiao Guangrong
2009-07-22 15:17 ` K.Prasad
0 siblings, 1 reply; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-22 9:56 UTC (permalink / raw)
To: prasad; +Cc: Ingo Molnar, Alan Stern, Frederic Weisbecker, Steven Rostedt,
LKML
K.Prasad wrote:
> On Wed, Jul 22, 2009 at 11:25:14AM +0800, Xiao Guangrong wrote:
>> It's rather bored to clear symbol one by one in ksym_trace_filter
>> file, so, this patch can let ksym_trace_filter file support quick
>> clear, we can write "0" to this file, it can clear all symbols
>>
>> for example:
>> # cat ksym_trace_filter
>> ksym_filter_head:rw-
>> global_trace:rw-
>> # echo 0 > ksym_trace_filter
>> # cat ksym_trace_filter
>> #
>>
>
> It's nice to have this feature added and the other patches fix issues in
> ksym tracer. Can you have this patch add the capability to clear all
> breakpoints in one-shot through wild-cards?
>
It already can clear all breakpoints in one-shot by write "0" to
ksym_trace_filter file, do you means that we need to support other
way for it? like:
echo > ksym_trace_filter
echo "*:---" > ksym_trace_filter
IMHO, one way to clear all breakpoints is enough, no need to add
more code for the same function, for example, in trace events filter,
only echo 0 > filter can properly clear all filters.
Are you sure other way is necessary?
Thanks,
Xiao
> Ingo wanted something like "echo "*:---" > ksym_trace_filter". The patch
> I sent here: http://lkml.org/lkml/2009/6/20/73 implements the same. You
> may want to implement something on those lines.
>
> Thanks,
> K.Prasad
>
>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter
2009-07-22 9:56 ` Xiao Guangrong
@ 2009-07-22 15:17 ` K.Prasad
2009-07-23 0:50 ` Xiao Guangrong
0 siblings, 1 reply; 15+ messages in thread
From: K.Prasad @ 2009-07-22 15:17 UTC (permalink / raw)
To: Xiao Guangrong, Ingo Molnar
Cc: Alan Stern, Frederic Weisbecker, Steven Rostedt, LKML
On Wed, Jul 22, 2009 at 05:56:49PM +0800, Xiao Guangrong wrote:
>
>
> K.Prasad wrote:
> > On Wed, Jul 22, 2009 at 11:25:14AM +0800, Xiao Guangrong wrote:
> >> It's rather bored to clear symbol one by one in ksym_trace_filter
> >> file, so, this patch can let ksym_trace_filter file support quick
> >> clear, we can write "0" to this file, it can clear all symbols
> >>
> >> for example:
> >> # cat ksym_trace_filter
> >> ksym_filter_head:rw-
> >> global_trace:rw-
> >> # echo 0 > ksym_trace_filter
> >> # cat ksym_trace_filter
> >> #
> >>
> >
> > It's nice to have this feature added and the other patches fix issues in
> > ksym tracer. Can you have this patch add the capability to clear all
> > breakpoints in one-shot through wild-cards?
> >
>
> It already can clear all breakpoints in one-shot by write "0" to
> ksym_trace_filter file, do you means that we need to support other
> way for it? like:
>
> echo > ksym_trace_filter
> echo "*:---" > ksym_trace_filter
>
> IMHO, one way to clear all breakpoints is enough, no need to add
> more code for the same function, for example, in trace events filter,
> only echo 0 > filter can properly clear all filters.
>
> Are you sure other way is necessary?
>
> Thanks,
> Xiao
>
As I stated before, the ability to support
echo "*:---" > ksym_trace_filter was Ingo Molnar's suggestion, so if
he's not particular about having it now we may skip it.
However, given that it requires just a few lines of code in addition,
say
+ /* Clear all breakpoints if echo "*:---" > ksym_trace_filter */
+ if ((strncmp(ksymname, "*", strlen("*")) == 0) && (op == 0)) {
+ ksym_trace_reset(NULL);
+ kfree(input_string);
+ return count;
+ }
in ksym_trace_filter_write(), and that the patch is already present it
shouldn't be bothersome to add it.
Thanks,
K.Prasad
^ permalink raw reply [flat|nested] 15+ messages in thread* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter
2009-07-22 15:17 ` K.Prasad
@ 2009-07-23 0:50 ` Xiao Guangrong
0 siblings, 0 replies; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-23 0:50 UTC (permalink / raw)
To: prasad; +Cc: Ingo Molnar, Alan Stern, Frederic Weisbecker, Steven Rostedt,
LKML
K.Prasad wrote:
> As I stated before, the ability to support
> echo "*:---" > ksym_trace_filter was Ingo Molnar's suggestion, so if
> he's not particular about having it now we may skip it.
>
OK, I'll fix it.
> However, given that it requires just a few lines of code in addition,
> say
>
> + /* Clear all breakpoints if echo "*:---" > ksym_trace_filter */
> + if ((strncmp(ksymname, "*", strlen("*")) == 0) && (op == 0)) {
> + ksym_trace_reset(NULL);
> + kfree(input_string);
> + return count;
> + }
>
I think below way is simpler:
+ /*
+ /* Clear all breakpoints if:
+ /* 1: echo > ksym_trace_filter
+ /* 2: echo 0 > ksym_trace_filter
+ /* 3: echo "*:---" > ksym_trace_filter
+ */
+ strstrip(input_string);
+ if (!input_string[0] || !strcmp(input_string, "0") ||
+ (!strcmp(input, "*:---")) {
+ __ksym_trace_reset();
+ kfree(input_string);
+ return count;
+ }
+
I'll sent a new patch after do some test for it.
Thanks,
Xiao
> in ksym_trace_filter_write(), and that the patch is already present it
> shouldn't be bothersome to add it.
>
> Thanks,
> K.Prasad
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
2009-07-22 3:25 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter Xiao Guangrong
2009-07-22 5:06 ` K.Prasad
@ 2009-07-23 4:01 ` Xiao Guangrong
2009-07-24 0:46 ` Steven Rostedt
2009-11-21 13:35 ` [tip:perf/core] " tip-bot for Xiao Guangrong
1 sibling, 2 replies; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-23 4:01 UTC (permalink / raw)
To: Ingo Molnar
Cc: K.Prasad, Alan Stern, Frederic Weisbecker, Steven Rostedt, LKML
It's rather bored to clear symbol one by one in ksym_trace_filter
file, so, this patch can let ksym_trace_filter file support quick
clear, we can write "0" to this file, it can clear all symbols
for example:
# cat ksym_trace_filter
ksym_filter_head:rw-
global_trace:rw-
# echo 0 > ksym_trace_filter
# cat ksym_trace_filter
#
Changelog v1->v2:
Add other way to clear all breakpoints by writing NULL or "*:---"
to ksym_trace_filter file base on K.Prasad's suggestion
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
---
kernel/trace/trace_ksym.c | 53 +++++++++++++++++++++++++++++---------------
1 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index cd5cb65..2fde875 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -163,8 +163,6 @@ static int parse_ksym_trace_str(char *input_string, char **ksymname,
{
int ret;
- strstrip(input_string);
-
*ksymname = strsep(&input_string, ":");
*addr = kallsyms_lookup_name(*ksymname);
@@ -262,6 +260,25 @@ static ssize_t ksym_trace_filter_read(struct file *filp, char __user *ubuf,
return cnt;
}
+static void __ksym_trace_reset(void)
+{
+ struct trace_ksym *entry;
+ struct hlist_node *node, *node1;
+
+ mutex_lock(&ksym_tracer_mutex);
+ hlist_for_each_entry_safe(entry, node, node1, &ksym_filter_head,
+ ksym_hlist) {
+ unregister_kernel_hw_breakpoint(entry->ksym_hbp);
+ ksym_filter_entry_count--;
+ hlist_del_rcu(&(entry->ksym_hlist));
+ synchronize_rcu();
+ kfree(entry->ksym_hbp->info.name);
+ kfree(entry->ksym_hbp);
+ kfree(entry);
+ }
+ mutex_unlock(&ksym_tracer_mutex);
+}
+
static ssize_t ksym_trace_filter_write(struct file *file,
const char __user *buffer,
size_t count, loff_t *ppos)
@@ -282,6 +299,21 @@ static ssize_t ksym_trace_filter_write(struct file *file,
}
input_string[count] = '\0';
+ strstrip(input_string);
+
+ /*
+ * Clear all breakpoints if:
+ * 1: echo > ksym_trace_filter
+ * 2: echo 0 > ksym_trace_filter
+ * 3: echo "*:---" > ksym_trace_filter
+ */
+ if (!input_string[0] || !strcmp(input_string, "0") ||
+ !strcmp(input_string, "*:---")) {
+ __ksym_trace_reset();
+ kfree(input_string);
+ return count;
+ }
+
ret = op = parse_ksym_trace_str(input_string, &ksymname, &ksym_addr);
if (ret < 0) {
kfree(input_string);
@@ -341,23 +373,8 @@ static const struct file_operations ksym_tracing_fops = {
static void ksym_trace_reset(struct trace_array *tr)
{
- struct trace_ksym *entry;
- struct hlist_node *node, *node1;
-
ksym_tracing_enabled = 0;
-
- mutex_lock(&ksym_tracer_mutex);
- hlist_for_each_entry_safe(entry, node, node1, &ksym_filter_head,
- ksym_hlist) {
- unregister_kernel_hw_breakpoint(entry->ksym_hbp);
- ksym_filter_entry_count--;
- hlist_del_rcu(&(entry->ksym_hlist));
- synchronize_rcu();
- kfree(entry->ksym_hbp->info.name);
- kfree(entry->ksym_hbp);
- kfree(entry);
- }
- mutex_unlock(&ksym_tracer_mutex);
+ __ksym_trace_reset();
}
static int ksym_trace_init(struct trace_array *tr)
--
1.6.1.2
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
2009-07-23 4:01 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2 Xiao Guangrong
@ 2009-07-24 0:46 ` Steven Rostedt
2009-07-24 2:06 ` Xiao Guangrong
2009-11-21 13:35 ` [tip:perf/core] " tip-bot for Xiao Guangrong
1 sibling, 1 reply; 15+ messages in thread
From: Steven Rostedt @ 2009-07-24 0:46 UTC (permalink / raw)
To: Xiao Guangrong
Cc: Ingo Molnar, K.Prasad, Alan Stern, Frederic Weisbecker, LKML
On Thu, 23 Jul 2009, Xiao Guangrong wrote:
> It's rather bored to clear symbol one by one in ksym_trace_filter
> file, so, this patch can let ksym_trace_filter file support quick
> clear, we can write "0" to this file, it can clear all symbols
>
> for example:
> # cat ksym_trace_filter
> ksym_filter_head:rw-
> global_trace:rw-
> # echo 0 > ksym_trace_filter
> # cat ksym_trace_filter
> #
>
> Changelog v1->v2:
> Add other way to clear all breakpoints by writing NULL or "*:---"
> to ksym_trace_filter file base on K.Prasad's suggestion
Thanks guys, I'll go ahead and queue this up for 32.
-- Steve
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
2009-07-24 0:46 ` Steven Rostedt
@ 2009-07-24 2:06 ` Xiao Guangrong
2009-07-24 2:11 ` Steven Rostedt
0 siblings, 1 reply; 15+ messages in thread
From: Xiao Guangrong @ 2009-07-24 2:06 UTC (permalink / raw)
To: Steven Rostedt
Cc: Ingo Molnar, K.Prasad, Alan Stern, Frederic Weisbecker, LKML
Steven Rostedt wrote:
>
> On Thu, 23 Jul 2009, Xiao Guangrong wrote:
>
>> It's rather bored to clear symbol one by one in ksym_trace_filter
>> file, so, this patch can let ksym_trace_filter file support quick
>> clear, we can write "0" to this file, it can clear all symbols
>>
>> for example:
>> # cat ksym_trace_filter
>> ksym_filter_head:rw-
>> global_trace:rw-
>> # echo 0 > ksym_trace_filter
>> # cat ksym_trace_filter
>> #
>>
>> Changelog v1->v2:
>> Add other way to clear all breakpoints by writing NULL or "*:---"
>> to ksym_trace_filter file base on K.Prasad's suggestion
>
> Thanks guys, I'll go ahead and queue this up for 32.
>
Hi Steven,
Could you have a look at other 2 patches in this series:
[PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer
[PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter
I think those fix is valuable, and K.Prasad has no objection.
Thanks,
Xiao
> -- Steve
>
>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
2009-07-24 2:06 ` Xiao Guangrong
@ 2009-07-24 2:11 ` Steven Rostedt
0 siblings, 0 replies; 15+ messages in thread
From: Steven Rostedt @ 2009-07-24 2:11 UTC (permalink / raw)
To: Xiao Guangrong
Cc: Ingo Molnar, K.Prasad, Alan Stern, Frederic Weisbecker, LKML
On Fri, 24 Jul 2009, Xiao Guangrong wrote:
> Steven Rostedt wrote:
> >
> > On Thu, 23 Jul 2009, Xiao Guangrong wrote:
> >
> >> It's rather bored to clear symbol one by one in ksym_trace_filter
> >> file, so, this patch can let ksym_trace_filter file support quick
> >> clear, we can write "0" to this file, it can clear all symbols
> >>
> >> for example:
> >> # cat ksym_trace_filter
> >> ksym_filter_head:rw-
> >> global_trace:rw-
> >> # echo 0 > ksym_trace_filter
> >> # cat ksym_trace_filter
> >> #
> >>
> >> Changelog v1->v2:
> >> Add other way to clear all breakpoints by writing NULL or "*:---"
> >> to ksym_trace_filter file base on K.Prasad's suggestion
> >
> > Thanks guys, I'll go ahead and queue this up for 32.
> >
>
> Hi Steven,
>
> Could you have a look at other 2 patches in this series:
>
> [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer
> [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter
>
> I think those fix is valuable, and K.Prasad has no objection.
Ah, sorry for the confusion. I've queued up the entire series. I'm just
playing with it now, and will post a pull request shortly.
-- Steve
^ permalink raw reply [flat|nested] 15+ messages in thread
* [tip:perf/core] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
2009-07-23 4:01 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2 Xiao Guangrong
2009-07-24 0:46 ` Steven Rostedt
@ 2009-11-21 13:35 ` tip-bot for Xiao Guangrong
1 sibling, 0 replies; 15+ messages in thread
From: tip-bot for Xiao Guangrong @ 2009-11-21 13:35 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, xiaoguangrong, tglx
Commit-ID: 75e33751ca8bbb72dd6f1a74d2810ddc8cbe4bdf
Gitweb: http://git.kernel.org/tip/75e33751ca8bbb72dd6f1a74d2810ddc8cbe4bdf
Author: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
AuthorDate: Thu, 23 Jul 2009 12:01:22 +0800
Committer: Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 20:54:40 -0400
tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
It's rather boring to clear symbol one by one in ksym_trace_filter
file, so, this patch will let ksym_trace_filter file support quickly
clear all break points. We can write "0" to this file and it will clear
all symbols
for example:
# cat ksym_trace_filter
ksym_filter_head:rw-
global_trace:rw-
# echo 0 > ksym_trace_filter
# cat ksym_trace_filter
#
Changelog v1->v2:
Add other ways to clear all breakpoints by writing NULL or "*:---"
to ksym_trace_filter file base on K.Prasad's suggestion
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
LKML-Reference: <4A67E092.3080202@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace_ksym.c | 53 +++++++++++++++++++++++++++++---------------
1 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index cd5cb65..2fde875 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -163,8 +163,6 @@ static int parse_ksym_trace_str(char *input_string, char **ksymname,
{
int ret;
- strstrip(input_string);
-
*ksymname = strsep(&input_string, ":");
*addr = kallsyms_lookup_name(*ksymname);
@@ -262,6 +260,25 @@ static ssize_t ksym_trace_filter_read(struct file *filp, char __user *ubuf,
return cnt;
}
+static void __ksym_trace_reset(void)
+{
+ struct trace_ksym *entry;
+ struct hlist_node *node, *node1;
+
+ mutex_lock(&ksym_tracer_mutex);
+ hlist_for_each_entry_safe(entry, node, node1, &ksym_filter_head,
+ ksym_hlist) {
+ unregister_kernel_hw_breakpoint(entry->ksym_hbp);
+ ksym_filter_entry_count--;
+ hlist_del_rcu(&(entry->ksym_hlist));
+ synchronize_rcu();
+ kfree(entry->ksym_hbp->info.name);
+ kfree(entry->ksym_hbp);
+ kfree(entry);
+ }
+ mutex_unlock(&ksym_tracer_mutex);
+}
+
static ssize_t ksym_trace_filter_write(struct file *file,
const char __user *buffer,
size_t count, loff_t *ppos)
@@ -282,6 +299,21 @@ static ssize_t ksym_trace_filter_write(struct file *file,
}
input_string[count] = '\0';
+ strstrip(input_string);
+
+ /*
+ * Clear all breakpoints if:
+ * 1: echo > ksym_trace_filter
+ * 2: echo 0 > ksym_trace_filter
+ * 3: echo "*:---" > ksym_trace_filter
+ */
+ if (!input_string[0] || !strcmp(input_string, "0") ||
+ !strcmp(input_string, "*:---")) {
+ __ksym_trace_reset();
+ kfree(input_string);
+ return count;
+ }
+
ret = op = parse_ksym_trace_str(input_string, &ksymname, &ksym_addr);
if (ret < 0) {
kfree(input_string);
@@ -341,23 +373,8 @@ static const struct file_operations ksym_tracing_fops = {
static void ksym_trace_reset(struct trace_array *tr)
{
- struct trace_ksym *entry;
- struct hlist_node *node, *node1;
-
ksym_tracing_enabled = 0;
-
- mutex_lock(&ksym_tracer_mutex);
- hlist_for_each_entry_safe(entry, node, node1, &ksym_filter_head,
- ksym_hlist) {
- unregister_kernel_hw_breakpoint(entry->ksym_hbp);
- ksym_filter_entry_count--;
- hlist_del_rcu(&(entry->ksym_hlist));
- synchronize_rcu();
- kfree(entry->ksym_hbp->info.name);
- kfree(entry->ksym_hbp);
- kfree(entry);
- }
- mutex_unlock(&ksym_tracer_mutex);
+ __ksym_trace_reset();
}
static int ksym_trace_init(struct trace_array *tr)
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [tip:perf/core] tracing/ksym_tracer: fix the output of ksym tracer
2009-07-22 3:21 [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer Xiao Guangrong
2009-07-22 3:23 ` [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter Xiao Guangrong
2009-07-22 3:25 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter Xiao Guangrong
@ 2009-11-21 13:35 ` tip-bot for Xiao Guangrong
2 siblings, 0 replies; 15+ messages in thread
From: tip-bot for Xiao Guangrong @ 2009-11-21 13:35 UTC (permalink / raw)
To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, rostedt, xiaoguangrong, tglx
Commit-ID: d857ace143df3884954887e1899a65831ca72ece
Gitweb: http://git.kernel.org/tip/d857ace143df3884954887e1899a65831ca72ece
Author: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
AuthorDate: Wed, 22 Jul 2009 11:21:31 +0800
Committer: Steven Rostedt <rostedt@goodmis.org>
CommitDate: Thu, 23 Jul 2009 20:51:35 -0400
tracing/ksym_tracer: fix the output of ksym tracer
Fix the output format of ksym tracer, make it properly aligned
Befor patch:
# tracer: ksym_tracer
#
# TASK-PID CPU# Symbol Type Function
# | | | | |
bash 1378 1 ksym_tracer_mutex W mutex_lock+0x11/0x27
bash 1378 1 ksym_filter_head W process_new_ksym_entry+0xd2/0x10c
bash 1378 1 ksym_tracer_mutex W mutex_unlock+0x12/0x1b
cat 1429 0 ksym_tracer_mutex W mutex_lock+0x11/0x27
After patch:
# tracer: ksym_tracer
#
# TASK-PID CPU# Symbol Type Function
# | | | | |
cat-1423 [000] ksym_tracer_mutex RW mutex_lock+0x11/0x27
cat-1423 [000] ksym_filter_head RW ksym_trace_filter_read+0x6e/0x10d
cat-1423 [000] ksym_tracer_mutex RW mutex_unlock+0x12/0x1b
cat-1423 [000] ksym_tracer_mutex RW mutex_lock+0x11/0x27
cat-1423 [000] ksym_filter_head RW ksym_trace_filter_read+0x6e/0x10d
cat-1423 [000] ksym_tracer_mutex RW mutex_unlock+0x12/0x1b
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
LKML-Reference: <4A6685BB.2090809@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace_ksym.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index 1256a6e..fbf3a8e 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -370,13 +370,12 @@ static int ksym_trace_init(struct trace_array *tr)
static void ksym_trace_print_header(struct seq_file *m)
{
-
seq_puts(m,
- "# TASK-PID CPU# Symbol Type "
- "Function \n");
+ "# TASK-PID CPU# Symbol "
+ "Type Function\n");
seq_puts(m,
- "# | | | | "
- "| \n");
+ "# | | | "
+ " | |\n");
}
static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
@@ -392,7 +391,7 @@ static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
trace_assign_type(field, entry);
- ret = trace_seq_printf(s, "%-15s %-5d %-3d %-20s ", field->cmd,
+ ret = trace_seq_printf(s, "%11s-%-5d [%03d] %-30s ", field->cmd,
entry->pid, iter->cpu, field->ksym_name);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -412,7 +411,7 @@ static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
return TRACE_TYPE_PARTIAL_LINE;
sprint_symbol(str, field->ip);
- ret = trace_seq_printf(s, "%-20s\n", str);
+ ret = trace_seq_printf(s, "%s\n", str);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 0/3] [GIT PULL] tracing/ksys_tracer: misc fixes
@ 2009-07-24 2:14 Steven Rostedt
2009-07-24 2:14 ` [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer Steven Rostedt
0 siblings, 1 reply; 15+ messages in thread
From: Steven Rostedt @ 2009-07-24 2:14 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Frederic Weisbecker, Thomas Gleixner,
K.Prasad, Xiao Guangrong, Alan Stern
Ingo,
Please pull the latest tip/tracing/hw-breakpoints tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
tip/tracing/hw-breakpoints
Xiao Guangrong (3):
tracing/ksym_tracer: fix the output of ksym tracer
tracing/ksym_tracer: fix write operation of ksym_trace_filter
tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2
----
kernel/trace/trace_ksym.c | 70 +++++++++++++++++++++++++++++----------------
1 files changed, 45 insertions(+), 25 deletions(-)
--
^ permalink raw reply [flat|nested] 15+ messages in thread* [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer
2009-07-24 2:14 [PATCH 0/3] [GIT PULL] tracing/ksys_tracer: misc fixes Steven Rostedt
@ 2009-07-24 2:14 ` Steven Rostedt
0 siblings, 0 replies; 15+ messages in thread
From: Steven Rostedt @ 2009-07-24 2:14 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Frederic Weisbecker, Thomas Gleixner,
K.Prasad, Xiao Guangrong, Alan Stern
[-- Attachment #1: 0001-tracing-ksym_tracer-fix-the-output-of-ksym-tracer.patch --]
[-- Type: text/plain, Size: 2968 bytes --]
From: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Fix the output format of ksym tracer, make it properly aligned
Befor patch:
# tracer: ksym_tracer
#
# TASK-PID CPU# Symbol Type Function
# | | | | |
bash 1378 1 ksym_tracer_mutex W mutex_lock+0x11/0x27
bash 1378 1 ksym_filter_head W process_new_ksym_entry+0xd2/0x10c
bash 1378 1 ksym_tracer_mutex W mutex_unlock+0x12/0x1b
cat 1429 0 ksym_tracer_mutex W mutex_lock+0x11/0x27
After patch:
# tracer: ksym_tracer
#
# TASK-PID CPU# Symbol Type Function
# | | | | |
cat-1423 [000] ksym_tracer_mutex RW mutex_lock+0x11/0x27
cat-1423 [000] ksym_filter_head RW ksym_trace_filter_read+0x6e/0x10d
cat-1423 [000] ksym_tracer_mutex RW mutex_unlock+0x12/0x1b
cat-1423 [000] ksym_tracer_mutex RW mutex_lock+0x11/0x27
cat-1423 [000] ksym_filter_head RW ksym_trace_filter_read+0x6e/0x10d
cat-1423 [000] ksym_tracer_mutex RW mutex_unlock+0x12/0x1b
Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
LKML-Reference: <4A6685BB.2090809@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
kernel/trace/trace_ksym.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/kernel/trace/trace_ksym.c b/kernel/trace/trace_ksym.c
index 1256a6e..fbf3a8e 100644
--- a/kernel/trace/trace_ksym.c
+++ b/kernel/trace/trace_ksym.c
@@ -370,13 +370,12 @@ static int ksym_trace_init(struct trace_array *tr)
static void ksym_trace_print_header(struct seq_file *m)
{
-
seq_puts(m,
- "# TASK-PID CPU# Symbol Type "
- "Function \n");
+ "# TASK-PID CPU# Symbol "
+ "Type Function\n");
seq_puts(m,
- "# | | | | "
- "| \n");
+ "# | | | "
+ " | |\n");
}
static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
@@ -392,7 +391,7 @@ static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
trace_assign_type(field, entry);
- ret = trace_seq_printf(s, "%-15s %-5d %-3d %-20s ", field->cmd,
+ ret = trace_seq_printf(s, "%11s-%-5d [%03d] %-30s ", field->cmd,
entry->pid, iter->cpu, field->ksym_name);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
@@ -412,7 +411,7 @@ static enum print_line_t ksym_trace_output(struct trace_iterator *iter)
return TRACE_TYPE_PARTIAL_LINE;
sprint_symbol(str, field->ip);
- ret = trace_seq_printf(s, "%-20s\n", str);
+ ret = trace_seq_printf(s, "%s\n", str);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;
--
1.6.3.3
--
^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2009-11-21 13:36 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-22 3:21 [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer Xiao Guangrong
2009-07-22 3:23 ` [PATCH 2/3] tracing/ksym_tracer: fix write operation of ksym_trace_filter Xiao Guangrong
2009-11-21 13:35 ` [tip:perf/core] " tip-bot for Xiao Guangrong
2009-07-22 3:25 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter Xiao Guangrong
2009-07-22 5:06 ` K.Prasad
2009-07-22 9:56 ` Xiao Guangrong
2009-07-22 15:17 ` K.Prasad
2009-07-23 0:50 ` Xiao Guangrong
2009-07-23 4:01 ` [PATCH 3/3] tracing/ksym_tracer: support quick clear for ksym_trace_filter -- v2 Xiao Guangrong
2009-07-24 0:46 ` Steven Rostedt
2009-07-24 2:06 ` Xiao Guangrong
2009-07-24 2:11 ` Steven Rostedt
2009-11-21 13:35 ` [tip:perf/core] " tip-bot for Xiao Guangrong
2009-11-21 13:35 ` [tip:perf/core] tracing/ksym_tracer: fix the output of ksym tracer tip-bot for Xiao Guangrong
-- strict thread matches above, loose matches on Subject: below --
2009-07-24 2:14 [PATCH 0/3] [GIT PULL] tracing/ksys_tracer: misc fixes Steven Rostedt
2009-07-24 2:14 ` [PATCH 1/3] tracing/ksym_tracer: fix the output of ksym tracer Steven Rostedt
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.