]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - tools/perf/util/probe-event.c
Merge tag 'v4.11-rc6' into perf/core, to pick up fixes
[mirror_ubuntu-bionic-kernel.git] / tools / perf / util / probe-event.c
index 28fb62c32678483cd6d54a9c88e620022e1f9d08..e4b889444447d410687b7a5d640717da9a6c74e3 100644 (file)
@@ -47,7 +47,6 @@
 #include "probe-file.h"
 #include "session.h"
 
-#define MAX_CMDLEN 256
 #define PERFPROBE_GROUP "probe"
 
 bool probe_event_dry_run;      /* Dry run flag */
@@ -757,7 +756,9 @@ post_process_kernel_probe_trace_events(struct probe_trace_event *tevs,
        }
 
        for (i = 0; i < ntevs; i++) {
-               if (!tevs[i].point.address || tevs[i].point.retprobe)
+               if (!tevs[i].point.address)
+                       continue;
+               if (tevs[i].point.retprobe && !kretprobe_offset_is_supported())
                        continue;
                /* If we found a wrong one, mark it by NULL symbol */
                if (kprobe_warn_out_range(tevs[i].point.symbol,
@@ -1339,14 +1340,7 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
        if (!arg)
                return -EINVAL;
 
-       /*
-        * If the probe point starts with '%',
-        * or starts with "sdt_" and has a ':' but no '=',
-        * then it should be a SDT/cached probe point.
-        */
-       if (arg[0] == '%' ||
-           (!strncmp(arg, "sdt_", 4) &&
-            !!strchr(arg, ':') && !strchr(arg, '='))) {
+       if (is_sdt_event(arg)) {
                pev->sdt = true;
                if (arg[0] == '%')
                        arg++;
@@ -1528,11 +1522,6 @@ static int parse_perf_probe_point(char *arg, struct perf_probe_event *pev)
                return -EINVAL;
        }
 
-       if (pp->retprobe && !pp->function) {
-               semantic_error("Return probe requires an entry function.\n");
-               return -EINVAL;
-       }
-
        if ((pp->offset || pp->line || pp->lazy_line) && pp->retprobe) {
                semantic_error("Offset/Line/Lazy pattern can't be used with "
                               "return probe.\n");
@@ -2841,7 +2830,8 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
        }
 
        /* Note that the symbols in the kmodule are not relocated */
-       if (!pev->uprobes && !pp->retprobe && !pev->target) {
+       if (!pev->uprobes && !pev->target &&
+                       (!pp->retprobe || kretprobe_offset_is_supported())) {
                reloc_sym = kernel_get_ref_reloc_sym();
                if (!reloc_sym) {
                        pr_warning("Relocated base symbol is not found!\n");
@@ -3057,7 +3047,7 @@ concat_probe_trace_events(struct probe_trace_event **tevs, int *ntevs,
        struct probe_trace_event *new_tevs;
        int ret = 0;
 
-       if (ntevs == 0) {
+       if (*ntevs == 0) {
                *tevs = *tevs2;
                *ntevs = ntevs2;
                *tevs2 = NULL;