Messages in this thread |  | | Date | Thu, 12 Jun 2014 23:13:31 -0400 | From | Steven Rostedt <> | Subject | Re: [PATCH 27/38] tools lib traceevent: Add mac80211 plugin |
| |
On Wed, 4 Dec 2013 17:06:51 -0300 Arnaldo Carvalho de Melo <acme@infradead.org> wrote:
> From: Jiri Olsa <jolsa@redhat.com> > > Backporting mac80211 plugin. > > Backported from Steven Rostedt's trace-cmd repo (HEAD 0f2c2fb): > git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git > > This plugin adds changed field resolving for > mac80211:drv_bss_info_changed tracepoint event. > > The diff of 'perf script' output generated by old and new code: > (data was generated by 'perf record -e 'mac80211:drv_bss_info_changed' -a') > > --- script.mac80211.old > +++ script.mac80211.new > - ifconfig 3711 [000] 1290.446492: mac80211:drv_bss_info_changed: phy0 vif:wlan0(2) changed:0x309f > + ifconfig 3711 [000] 1290.446492: mac80211:drv_bss_info_changed: phy0 vif:wlan0(2) > + assoc:0 aid:2 cts:0 shortpre:0 shortslot:0 dtimper:1 > + bcnint:102 assoc_cap:0x431 basic_rates:0xf enable_beacon:0 > + ht_operation_mode:0 > > Omitting the mac80211:drv_config tracepoint handling because the kernel > tracepoint changed its prototype and the plugin handler is no longer > working.
While doing my synchronization between trace-cmd and lib traceevent, I noticed that the mac80211 driver is quite different.
Johannes, Jiri states that this plugin no longer works with the latest kernels. Is that true?
-- Steve
> > Signed-off-by: Jiri Olsa <jolsa@redhat.com> > Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> > Cc: David Ahern <dsahern@gmail.com> > Cc: Frederic Weisbecker <fweisbec@gmail.com> > Cc: Ingo Molnar <mingo@elte.hu> > Cc: Namhyung Kim <namhyung@kernel.org> > Cc: Paul Mackerras <paulus@samba.org> > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> > Cc: Steven Rostedt <rostedt@goodmis.org> > Link: http://lkml.kernel.org/r/1386076182-14484-17-git-send-email-jolsa@redhat.com > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > --- > tools/lib/traceevent/Makefile | 1 + > tools/lib/traceevent/plugin_mac80211.c | 95 ++++++++++++++++++++++++++++++++++ > 2 files changed, 96 insertions(+) > create mode 100644 tools/lib/traceevent/plugin_mac80211.c > > diff --git a/tools/lib/traceevent/Makefile b/tools/lib/traceevent/Makefile > index 226a8f9fb177..d0e0ca12aa10 100644 > --- a/tools/lib/traceevent/Makefile > +++ b/tools/lib/traceevent/Makefile > @@ -216,6 +216,7 @@ PLUGIN_OBJS = plugin_jbd2.o > PLUGIN_OBJS += plugin_hrtimer.o > PLUGIN_OBJS += plugin_kmem.o > PLUGIN_OBJS += plugin_kvm.o > +PLUGIN_OBJS += plugin_mac80211.o > > PLUGINS := $(PLUGIN_OBJS:.o=.so) > > diff --git a/tools/lib/traceevent/plugin_mac80211.c b/tools/lib/traceevent/plugin_mac80211.c > new file mode 100644 > index 000000000000..558a3b91c046 > --- /dev/null > +++ b/tools/lib/traceevent/plugin_mac80211.c > @@ -0,0 +1,95 @@ > +/* > + * Copyright (C) 2009 Johannes Berg <johannes@sipsolutions.net> > + * > + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; > + * version 2.1 of the License (not later!) > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this program; if not, see <http://www.gnu.org/licenses> > + * > + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + */ > +#include <stdio.h> > +#include <stdlib.h> > +#include <string.h> > + > +#include "event-parse.h" > + > +#define INDENT 65 > + > +static void print_string(struct trace_seq *s, struct event_format *event, > + const char *name, const void *data) > +{ > + struct format_field *f = pevent_find_field(event, name); > + int offset; > + int length; > + > + if (!f) { > + trace_seq_printf(s, "NOTFOUND:%s", name); > + return; > + } > + > + offset = f->offset; > + length = f->size; > + > + if (!strncmp(f->type, "__data_loc", 10)) { > + unsigned long long v; > + if (pevent_read_number_field(f, data, &v)) { > + trace_seq_printf(s, "invalid_data_loc"); > + return; > + } > + offset = v & 0xffff; > + length = v >> 16; > + } > + > + trace_seq_printf(s, "%.*s", length, (char *)data + offset); > +} > + > +#define SF(fn) pevent_print_num_field(s, fn ":%d", event, fn, record, 0) > +#define SFX(fn) pevent_print_num_field(s, fn ":%#x", event, fn, record, 0) > +#define SP() trace_seq_putc(s, ' ') > + > +static int drv_bss_info_changed(struct trace_seq *s, > + struct pevent_record *record, > + struct event_format *event, void *context) > +{ > + void *data = record->data; > + > + print_string(s, event, "wiphy_name", data); > + trace_seq_printf(s, " vif:"); > + print_string(s, event, "vif_name", data); > + pevent_print_num_field(s, "(%d)", event, "vif_type", record, 1); > + > + trace_seq_printf(s, "\n%*s", INDENT, ""); > + SF("assoc"); SP(); > + SF("aid"); SP(); > + SF("cts"); SP(); > + SF("shortpre"); SP(); > + SF("shortslot"); SP(); > + SF("dtimper"); SP(); > + trace_seq_printf(s, "\n%*s", INDENT, ""); > + SF("bcnint"); SP(); > + SFX("assoc_cap"); SP(); > + SFX("basic_rates"); SP(); > + SF("enable_beacon"); > + trace_seq_printf(s, "\n%*s", INDENT, ""); > + SF("ht_operation_mode"); > + > + return 0; > +} > + > +int PEVENT_PLUGIN_LOADER(struct pevent *pevent) > +{ > + pevent_register_event_handler(pevent, -1, "mac80211", > + "drv_bss_info_changed", > + drv_bss_info_changed, NULL); > + return 0; > +}
|  |