]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - kernel/trace/trace_uprobe.c
Merge branches 'pm-cpu', 'pm-cpuidle' and 'pm-domains'
[mirror_ubuntu-zesty-kernel.git] / kernel / trace / trace_uprobe.c
index aa1ea7b36fa889877bb790831a01a8d14b472221..d2f6d0be35034569ba2022f59dee5fb60e4d31d2 100644 (file)
@@ -601,7 +601,22 @@ static int probes_seq_show(struct seq_file *m, void *v)
 
        seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system,
                        trace_event_name(&tu->tp.call));
-       seq_printf(m, " %s:0x%p", tu->filename, (void *)tu->offset);
+       seq_printf(m, " %s:", tu->filename);
+
+       /* Don't print "0x  (null)" when offset is 0 */
+       if (tu->offset) {
+               seq_printf(m, "0x%p", (void *)tu->offset);
+       } else {
+               switch (sizeof(void *)) {
+               case 4:
+                       seq_printf(m, "0x00000000");
+                       break;
+               case 8:
+               default:
+                       seq_printf(m, "0x0000000000000000");
+                       break;
+               }
+       }
 
        for (i = 0; i < tu->tp.nr_args; i++)
                seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm);
@@ -1095,11 +1110,15 @@ static void __uprobe_perf_func(struct trace_uprobe *tu,
 {
        struct trace_event_call *call = &tu->tp.call;
        struct uprobe_trace_entry_head *entry;
+       struct bpf_prog *prog = call->prog;
        struct hlist_head *head;
        void *data;
        int size, esize;
        int rctx;
 
+       if (prog && !trace_call_bpf(prog, regs))
+               return;
+
        esize = SIZEOF_TRACE_ENTRY(is_ret_probe(tu));
 
        size = esize + tu->tp.size + dsize;
@@ -1289,6 +1308,7 @@ static int register_uprobe_event(struct trace_uprobe *tu)
                return -ENODEV;
        }
 
+       call->flags = TRACE_EVENT_FL_UPROBE;
        call->class->reg = trace_uprobe_register;
        call->data = tu;
        ret = trace_add_event_call(call);