Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1218465 > unrolled thread
| Started by | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| First post | 2015-09-03 19:40 +0200 |
| Last post | 2015-09-04 04:20 +0200 |
| Articles | 4 — 2 participants |
Back to article view | Back to linux.kernel
[RFC/PATCH 1/3] perf probe: Split add_perf_probe_events() Namhyung Kim <namhyung@kernel.org> - 2015-09-03 19:40 +0200
[RFC/PATCH 3/3] perf probe: Move print logic into cmd_probe() Namhyung Kim <namhyung@kernel.org> - 2015-09-03 19:40 +0200
RE: [RFC/PATCH 3/3] perf probe: Move print logic into cmd_probe() 平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com> - 2015-09-04 04:20 +0200
RE: [RFC/PATCH 1/3] perf probe: Split add_perf_probe_events() 平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com> - 2015-09-04 04:20 +0200
| From | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| Date | 2015-09-03 19:40 +0200 |
| Subject | [RFC/PATCH 1/3] perf probe: Split add_perf_probe_events() |
| Message-ID | <q4GEq-1WX-7@gated-at.bofh.it> |
The add_perf_probe_events() does 3 things:
1. convert all perf events to trace events
2. add all trace events to kernel
3. cleanup all trace events
But sometimes we need to do something with the trace events. So split
the funtion into two, so that it can access intermediate trace events
via struct __event_package if needed.
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/util/probe-event.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index eb5f18b75402..8eaa03428d72 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2765,9 +2765,10 @@ struct __event_package {
int ntevs;
};
-int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
+static int __add_perf_probe_events(struct perf_probe_event *pevs, int npevs,
+ struct __event_package **ppkgs)
{
- int i, j, ret;
+ int i, ret;
struct __event_package *pkgs;
ret = 0;
@@ -2792,7 +2793,7 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
ret = convert_to_probe_trace_events(pkgs[i].pev,
&pkgs[i].tevs);
if (ret < 0)
- goto end;
+ return ret;
pkgs[i].ntevs = ret;
}
/* This just release blacklist only if allocated */
@@ -2806,7 +2807,19 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
if (ret < 0)
break;
}
-end:
+
+ *ppkgs = pkgs;
+
+ return 0;
+}
+
+static void cleanup_perf_probe_events(struct __event_package *pkgs, int npevs)
+{
+ int i, j;
+
+ if (pkgs == NULL)
+ return;
+
/* Loop 3: cleanup and free trace events */
for (i = 0; i < npevs; i++) {
for (j = 0; j < pkgs[i].ntevs; j++)
@@ -2815,6 +2828,15 @@ end:
}
free(pkgs);
exit_symbol_maps();
+}
+
+int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
+{
+ int ret;
+ struct __event_package *pkgs = NULL;
+
+ ret = __add_perf_probe_events(pevs, npevs, &pkgs);
+ cleanup_perf_probe_events(pkgs, npevs);
return ret;
}
--
2.5.0
--
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/
[toc] | [next] | [standalone]
| From | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| Date | 2015-09-03 19:40 +0200 |
| Subject | [RFC/PATCH 3/3] perf probe: Move print logic into cmd_probe() |
| Message-ID | <q4GEr-1WX-31@gated-at.bofh.it> |
| In reply to | #1218465 |
Showing actual trace event when adding perf events is only needed in
perf probe command. But the add functionality itself can be used by
other places. So move the printing code into the cmd_probe().
Also it combines the output if more than one event is added.
Before:
$ sudo perf probe -a do_fork -a do_exit
Added new event:
probe:do_fork (on do_fork)
You can now use it in all perf tools, such as:
perf record -e probe:do_fork -aR sleep 1
Added new events:
probe:do_exit (on do_exit)
probe:do_exit_1 (on do_exit)
You can now use it in all perf tools, such as:
perf record -e probe:do_exit_1 -aR sleep 1
After:
$ sudo perf probe -a do_fork -a do_exit
Added new events:
probe:do_fork (on do_fork)
probe:do_exit (on do_exit)
probe:do_exit_1 (on do_exit)
You can now use it in all perf tools, such as:
perf record -e probe:do_exit_1 -aR sleep 1
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/builtin-probe.c | 39 ++++++++++++++++++++++++++++++++++++++-
tools/perf/util/probe-event.c | 22 +++-------------------
tools/perf/util/probe-event.h | 3 +++
3 files changed, 44 insertions(+), 20 deletions(-)
diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c
index b81cec33b4b2..827eb7ed92b2 100644
--- a/tools/perf/builtin-probe.c
+++ b/tools/perf/builtin-probe.c
@@ -403,6 +403,9 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
OPT_END()
};
int ret;
+ int i, k;
+ struct probe_event_package *pkgs = NULL;
+ const char *event = NULL, *group = NULL;
set_option_flag(options, 'a', "add", PARSE_OPT_EXCLUSIVE);
set_option_flag(options, 'd', "del", PARSE_OPT_EXCLUSIVE);
@@ -496,7 +499,41 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
usage_with_options(probe_usage, options);
}
- ret = add_perf_probe_events(params.events, params.nevents);
+ ret = __add_perf_probe_events(params.events, params.nevents,
+ &pkgs);
+ if (ret < 0)
+ goto out_cleanup;
+
+ for (i = k = 0; i < params.nevents; i++)
+ k += pkgs[i].ntevs;
+
+ pr_info("Added new event%s\n", (k > 1) ? "s:" : ":");
+ for (i = 0; i < params.nevents; i++) {
+ struct perf_probe_event *pev = pkgs[i].pev;
+
+ for (k = 0; k < pkgs[i].ntevs; k++) {
+ struct probe_trace_event *tev = &pkgs[i].tevs[k];
+
+ /* We use tev's name for showing new events */
+ show_perf_probe_event(tev->group, tev->event, pev,
+ tev->point.module, false);
+
+ /* Save the last valid name */
+ event = tev->event;
+ group = tev->group;
+ }
+ }
+
+ /* Note that it is possible to skip all events because of blacklist */
+ if (event) {
+ /* Show how to use the event. */
+ pr_info("\nYou can now use it in all perf tools, such as:\n\n");
+ pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event);
+ }
+
+out_cleanup:
+ cleanup_perf_probe_events(pkgs, params.nevents);
+
if (ret < 0) {
pr_err_with_code(" Error: Failed to add events.", ret);
return ret;
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index eef39338bb2a..9c68fc551f9e 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -2180,9 +2180,9 @@ out:
}
/* Show an event */
-static int show_perf_probe_event(const char *group, const char *event,
- struct perf_probe_event *pev,
- const char *module, bool use_stdout)
+int show_perf_probe_event(const char *group, const char *event,
+ struct perf_probe_event *pev,
+ const char *module, bool use_stdout)
{
struct strbuf buf = STRBUF_INIT;
int ret;
@@ -2399,7 +2399,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
{
int i, fd, ret;
struct probe_trace_event *tev = NULL;
- const char *event = NULL, *group = NULL;
struct strlist *namelist;
fd = probe_file__open(PF_FL_RW | (pev->uprobes ? PF_FL_UPROBE : 0));
@@ -2415,7 +2414,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
}
ret = 0;
- pr_info("Added new event%s\n", (ntevs > 1) ? "s:" : ":");
for (i = 0; i < ntevs; i++) {
tev = &tevs[i];
/* Skip if the symbol is out of .text or blacklisted */
@@ -2432,13 +2430,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
if (ret < 0)
break;
- /* We use tev's name for showing new events */
- show_perf_probe_event(tev->group, tev->event, pev,
- tev->point.module, false);
- /* Save the last valid name */
- event = tev->event;
- group = tev->group;
-
/*
* Probes after the first probe which comes from same
* user input are always allowed to add suffix, because
@@ -2450,13 +2441,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
if (ret == -EINVAL && pev->uprobes)
warn_uprobe_event_compat(tev);
- /* Note that it is possible to skip all events because of blacklist */
- if (ret >= 0 && event) {
- /* Show how to use the event. */
- pr_info("\nYou can now use it in all perf tools, such as:\n\n");
- pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event);
- }
-
strlist__delete(namelist);
close_out:
close(fd);
diff --git a/tools/perf/util/probe-event.h b/tools/perf/util/probe-event.h
index 73f922fa7cac..843d1feffc97 100644
--- a/tools/perf/util/probe-event.h
+++ b/tools/perf/util/probe-event.h
@@ -149,6 +149,9 @@ extern int __add_perf_probe_events(struct perf_probe_event *pevs, int npevs,
extern void cleanup_perf_probe_events(struct probe_event_package *pkgs,
int npevs);
extern int del_perf_probe_events(struct strfilter *filter);
+extern int show_perf_probe_event(const char *group, const char *event,
+ struct perf_probe_event *pev,
+ const char *module, bool use_stdout);
extern int show_perf_probe_events(struct strfilter *filter);
extern int show_line_range(struct line_range *lr, const char *module,
bool user);
--
2.5.0
--
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/
[toc] | [prev] | [next] | [standalone]
| From | 平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com> |
|---|---|
| Date | 2015-09-04 04:20 +0200 |
| Subject | RE: [RFC/PATCH 3/3] perf probe: Move print logic into cmd_probe() |
| Message-ID | <q4OLE-5eV-7@gated-at.bofh.it> |
| In reply to | #1218466 |
PiBGcm9tOiBOYW1oeXVuZyBLaW0gW21haWx0bzpuYW1oeXVuZ0BnbWFpbC5jb21dIE9uIEJlaGFs ZiBPZiBOYW1oeXVuZyBLaW0NCj4gDQo+IFNob3dpbmcgYWN0dWFsIHRyYWNlIGV2ZW50IHdoZW4g YWRkaW5nIHBlcmYgZXZlbnRzIGlzIG9ubHkgbmVlZGVkIGluDQo+IHBlcmYgcHJvYmUgY29tbWFu ZC4gIEJ1dCB0aGUgYWRkIGZ1bmN0aW9uYWxpdHkgaXRzZWxmIGNhbiBiZSB1c2VkIGJ5DQo+IG90 aGVyIHBsYWNlcy4gIFNvIG1vdmUgdGhlIHByaW50aW5nIGNvZGUgaW50byB0aGUgY21kX3Byb2Jl KCkuDQo+IA0KPiBBbHNvIGl0IGNvbWJpbmVzIHRoZSBvdXRwdXQgaWYgbW9yZSB0aGFuIG9uZSBl dmVudCBpcyBhZGRlZC4NCj4gDQo+IEJlZm9yZToNCj4gICAkIHN1ZG8gcGVyZiBwcm9iZSAtYSBk b19mb3JrIC1hIGRvX2V4aXQNCj4gICBBZGRlZCBuZXcgZXZlbnQ6DQo+ICAgcHJvYmU6ZG9fZm9y ayAgICAgICAgKG9uIGRvX2ZvcmspDQo+IA0KPiAgIFlvdSBjYW4gbm93IHVzZSBpdCBpbiBhbGwg cGVyZiB0b29scywgc3VjaCBhczoNCj4gDQo+ICAgICAgIHBlcmYgcmVjb3JkIC1lIHByb2JlOmRv X2ZvcmsgLWFSIHNsZWVwIDENCj4gDQo+ICAgQWRkZWQgbmV3IGV2ZW50czoNCj4gICBwcm9iZTpk b19leGl0ICAgICAgICAob24gZG9fZXhpdCkNCj4gICBwcm9iZTpkb19leGl0XzEgICAgICAob24g ZG9fZXhpdCkNCj4gDQo+ICAgWW91IGNhbiBub3cgdXNlIGl0IGluIGFsbCBwZXJmIHRvb2xzLCBz dWNoIGFzOg0KPiANCj4gICAgICAgcGVyZiByZWNvcmQgLWUgcHJvYmU6ZG9fZXhpdF8xIC1hUiBz bGVlcCAxDQo+IA0KPiBBZnRlcjoNCj4gICAkIHN1ZG8gcGVyZiBwcm9iZSAtYSBkb19mb3JrIC1h IGRvX2V4aXQNCj4gICBBZGRlZCBuZXcgZXZlbnRzOg0KPiAgIHByb2JlOmRvX2ZvcmsgICAgICAg IChvbiBkb19mb3JrKQ0KPiAgIHByb2JlOmRvX2V4aXQgICAgICAgIChvbiBkb19leGl0KQ0KPiAg IHByb2JlOmRvX2V4aXRfMSAgICAgIChvbiBkb19leGl0KQ0KPiANCj4gICBZb3UgY2FuIG5vdyB1 c2UgaXQgaW4gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6DQo+IA0KPiAgICAgICBwZXJmIHJlY29y ZCAtZSBwcm9iZTpkb19leGl0XzEgLWFSIHNsZWVwIDENCj4gDQoNClRoaXMgY2hhbmdlIGlzIGdv b2QgZm9yIG1lIDopDQpBbmQgaGF2ZSBhIGNvbW1lbnQgYmVsb3csDQoNClsuLi5dDQo+IEBAIC00 OTYsNyArNDk5LDQxIEBAIF9fY21kX3Byb2JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwg Y29uc3QgY2hhciAqcHJlZml4IF9fbWF5YmVfdW51c2VkKQ0KPiAgCQkJdXNhZ2Vfd2l0aF9vcHRp b25zKHByb2JlX3VzYWdlLCBvcHRpb25zKTsNCj4gIAkJfQ0KPiANCj4gLQkJcmV0ID0gYWRkX3Bl cmZfcHJvYmVfZXZlbnRzKHBhcmFtcy5ldmVudHMsIHBhcmFtcy5uZXZlbnRzKTsNCj4gKwkJcmV0 ID0gX19hZGRfcGVyZl9wcm9iZV9ldmVudHMocGFyYW1zLmV2ZW50cywgcGFyYW1zLm5ldmVudHMs DQo+ICsJCQkJCSAgICAgICZwa2dzKTsNCj4gKwkJaWYgKHJldCA8IDApDQo+ICsJCQlnb3RvIG91 dF9jbGVhbnVwOw0KPiArDQo+ICsJCWZvciAoaSA9IGsgPSAwOyBpIDwgcGFyYW1zLm5ldmVudHM7 IGkrKykNCj4gKwkJCWsgKz0gcGtnc1tpXS5udGV2czsNCj4gKw0KPiArCQlwcl9pbmZvKCJBZGRl ZCBuZXcgZXZlbnQlc1xuIiwgKGsgPiAxKSA/ICJzOiIgOiAiOiIpOw0KPiArCQlmb3IgKGkgPSAw OyBpIDwgcGFyYW1zLm5ldmVudHM7IGkrKykgew0KPiArCQkJc3RydWN0IHBlcmZfcHJvYmVfZXZl bnQgKnBldiA9IHBrZ3NbaV0ucGV2Ow0KPiArDQo+ICsJCQlmb3IgKGsgPSAwOyBrIDwgcGtnc1tp XS5udGV2czsgaysrKSB7DQo+ICsJCQkJc3RydWN0IHByb2JlX3RyYWNlX2V2ZW50ICp0ZXYgPSAm cGtnc1tpXS50ZXZzW2tdOw0KPiArDQo+ICsJCQkJLyogV2UgdXNlIHRldidzIG5hbWUgZm9yIHNo b3dpbmcgbmV3IGV2ZW50cyAqLw0KPiArCQkJCXNob3dfcGVyZl9wcm9iZV9ldmVudCh0ZXYtPmdy b3VwLCB0ZXYtPmV2ZW50LCBwZXYsDQo+ICsJCQkJCQkgICAgICB0ZXYtPnBvaW50Lm1vZHVsZSwg ZmFsc2UpOw0KPiArDQo+ICsJCQkJLyogU2F2ZSB0aGUgbGFzdCB2YWxpZCBuYW1lICovDQo+ICsJ CQkJZXZlbnQgPSB0ZXYtPmV2ZW50Ow0KPiArCQkJCWdyb3VwID0gdGV2LT5ncm91cDsNCj4gKwkJ CX0NCj4gKwkJfQ0KPiArDQo+ICsJCS8qIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBza2lw IGFsbCBldmVudHMgYmVjYXVzZSBvZiBibGFja2xpc3QgKi8NCj4gKwkJaWYgKGV2ZW50KSB7DQo+ ICsJCQkvKiBTaG93IGhvdyB0byB1c2UgdGhlIGV2ZW50LiAqLw0KPiArCQkJcHJfaW5mbygiXG5Z b3UgY2FuIG5vdyB1c2UgaXQgaW4gYWxsIHBlcmYgdG9vbHMsIHN1Y2ggYXM6XG5cbiIpOw0KPiAr CQkJcHJfaW5mbygiXHRwZXJmIHJlY29yZCAtZSAlczolcyAtYVIgc2xlZXAgMVxuXG4iLCBncm91 cCwgZXZlbnQpOw0KPiArCQl9DQo+ICsNCj4gK291dF9jbGVhbnVwOg0KPiArCQljbGVhbnVwX3Bl cmZfcHJvYmVfZXZlbnRzKHBrZ3MsIHBhcmFtcy5uZXZlbnRzKTsNCg0KSSB0aGluayB0aGlzIHNo b3VsZCBiZSBhIHNlcGFyYXRlZCBmdW5jdGlvbiB0byBhdm9pZCBpbmNyZWFzaW5nIHRoZSBzaXpl IG9mIF9fY21kX3Byb2JlKCkNCg0KVGhhbmtzLA0KDQo= -- 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/
[toc] | [prev] | [next] | [standalone]
| From | 平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com> |
|---|---|
| Date | 2015-09-04 04:20 +0200 |
| Message-ID | <q4OLD-5eV-1@gated-at.bofh.it> |
| In reply to | #1218465 |
PiBGcm9tOiBOYW1oeXVuZyBLaW0gW21haWx0bzpuYW1oeXVuZ0BnbWFpbC5jb21dIE9uIEJlaGFs ZiBPZiBOYW1oeXVuZyBLaW0NCj4gDQo+IFRoZSBhZGRfcGVyZl9wcm9iZV9ldmVudHMoKSBkb2Vz IDMgdGhpbmdzOg0KPiANCj4gIDEuIGNvbnZlcnQgYWxsIHBlcmYgZXZlbnRzIHRvIHRyYWNlIGV2 ZW50cw0KPiAgMi4gYWRkIGFsbCB0cmFjZSBldmVudHMgdG8ga2VybmVsDQo+ICAzLiBjbGVhbnVw IGFsbCB0cmFjZSBldmVudHMNCj4gDQo+IEJ1dCBzb21ldGltZXMgd2UgbmVlZCB0byBkbyBzb21l dGhpbmcgd2l0aCB0aGUgdHJhY2UgZXZlbnRzLiAgU28gc3BsaXQNCj4gdGhlIGZ1bnRpb24gaW50 byB0d28sIHNvIHRoYXQgaXQgY2FuIGFjY2VzcyBpbnRlcm1lZGlhdGUgdHJhY2UgZXZlbnRzDQo+ IHZpYSBzdHJ1Y3QgX19ldmVudF9wYWNrYWdlIGlmIG5lZWRlZC4NCg0KWWVhaCwgdGhpcyBpcyBn b29kIHRvIG1lLg0KDQpBY2tlZC1ieTogTWFzYW1pIEhpcmFtYXRzdSA8bWFzYW1pLmhpcmFtYXRz dS5wdEBoaXRhY2hpLmNvbT4NCg0KVGhhbmtzIE5hbWh5dW5nIQ0KDQo+IA0KPiBDYzogTWFzYW1p IEhpcmFtYXRzdSA8bWFzYW1pLmhpcmFtYXRzdS5wdEBoaXRhY2hpLmNvbT4NCj4gU2lnbmVkLW9m Zi1ieTogTmFtaHl1bmcgS2ltIDxuYW1oeXVuZ0BrZXJuZWwub3JnPg0KPiAtLS0NCj4gIHRvb2xz L3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tDQo+ICAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkN Cj4gDQo+IGRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xz L3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jDQo+IGluZGV4IGViNWYxOGI3NTQwMi4uOGVhYTAzNDI4 ZDcyIDEwMDY0NA0KPiAtLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYw0KPiArKysg Yi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYw0KPiBAQCAtMjc2NSw5ICsyNzY1LDEwIEBA IHN0cnVjdCBfX2V2ZW50X3BhY2thZ2Ugew0KPiAgCWludAkJCQludGV2czsNCj4gIH07DQo+IA0K PiAtaW50IGFkZF9wZXJmX3Byb2JlX2V2ZW50cyhzdHJ1Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2 cywgaW50IG5wZXZzKQ0KPiArc3RhdGljIGludCBfX2FkZF9wZXJmX3Byb2JlX2V2ZW50cyhzdHJ1 Y3QgcGVyZl9wcm9iZV9ldmVudCAqcGV2cywgaW50IG5wZXZzLA0KPiArCQkJCSAgIHN0cnVjdCBf X2V2ZW50X3BhY2thZ2UgKipwcGtncykNCj4gIHsNCj4gLQlpbnQgaSwgaiwgcmV0Ow0KPiArCWlu dCBpLCByZXQ7DQo+ICAJc3RydWN0IF9fZXZlbnRfcGFja2FnZSAqcGtnczsNCj4gDQo+ICAJcmV0 ID0gMDsNCj4gQEAgLTI3OTIsNyArMjc5Myw3IEBAIGludCBhZGRfcGVyZl9wcm9iZV9ldmVudHMo c3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldnMsIGludCBucGV2cykNCj4gIAkJcmV0ICA9IGNv bnZlcnRfdG9fcHJvYmVfdHJhY2VfZXZlbnRzKHBrZ3NbaV0ucGV2LA0KPiAgCQkJCQkJICAgICAm cGtnc1tpXS50ZXZzKTsNCj4gIAkJaWYgKHJldCA8IDApDQo+IC0JCQlnb3RvIGVuZDsNCj4gKwkJ CXJldHVybiByZXQ7DQo+ICAJCXBrZ3NbaV0ubnRldnMgPSByZXQ7DQo+ICAJfQ0KPiAgCS8qIFRo aXMganVzdCByZWxlYXNlIGJsYWNrbGlzdCBvbmx5IGlmIGFsbG9jYXRlZCAqLw0KPiBAQCAtMjgw Niw3ICsyODA3LDE5IEBAIGludCBhZGRfcGVyZl9wcm9iZV9ldmVudHMoc3RydWN0IHBlcmZfcHJv YmVfZXZlbnQgKnBldnMsIGludCBucGV2cykNCj4gIAkJaWYgKHJldCA8IDApDQo+ICAJCQlicmVh azsNCj4gIAl9DQo+IC1lbmQ6DQo+ICsNCj4gKwkqcHBrZ3MgPSBwa2dzOw0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGNsZWFudXBfcGVyZl9wcm9iZV9ldmVu dHMoc3RydWN0IF9fZXZlbnRfcGFja2FnZSAqcGtncywgaW50IG5wZXZzKQ0KPiArew0KPiArCWlu dCBpLCBqOw0KPiArDQo+ICsJaWYgKHBrZ3MgPT0gTlVMTCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ ICAJLyogTG9vcCAzOiBjbGVhbnVwIGFuZCBmcmVlIHRyYWNlIGV2ZW50cyAgKi8NCj4gIAlmb3Ig KGkgPSAwOyBpIDwgbnBldnM7IGkrKykgew0KPiAgCQlmb3IgKGogPSAwOyBqIDwgcGtnc1tpXS5u dGV2czsgaisrKQ0KPiBAQCAtMjgxNSw2ICsyODI4LDE1IEBAIGVuZDoNCj4gIAl9DQo+ICAJZnJl ZShwa2dzKTsNCj4gIAlleGl0X3N5bWJvbF9tYXBzKCk7DQo+ICt9DQo+ICsNCj4gK2ludCBhZGRf cGVyZl9wcm9iZV9ldmVudHMoc3RydWN0IHBlcmZfcHJvYmVfZXZlbnQgKnBldnMsIGludCBucGV2 cykNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArCXN0cnVjdCBfX2V2ZW50X3BhY2thZ2UgKnBrZ3Mg PSBOVUxMOw0KPiArDQo+ICsJcmV0ID0gX19hZGRfcGVyZl9wcm9iZV9ldmVudHMocGV2cywgbnBl dnMsICZwa2dzKTsNCj4gKwljbGVhbnVwX3BlcmZfcHJvYmVfZXZlbnRzKHBrZ3MsIG5wZXZzKTsN Cj4gDQo+ICAJcmV0dXJuIHJldDsNCj4gIH0NCj4gLS0NCj4gMi41LjANCg0K -- 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/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web