On Wed, Oct 02, 2013 at 11:11:07AM -0500, suravee.suthikulpa...@amd.com wrote: > From: Jacob Shin <jacob.w.s...@gmail.com> > > Currently bp_len is given a default value of 4. Allow user to override it: > > $ perf stat -e mem:0x1000/8 > ^ > bp_len > > If no value is given, it will default to 4 as it did before. > > Signed-off-by: Jacob Shin <jacob.w.s...@gmail.com> > Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpa...@amd.com> > --- > tools/perf/Documentation/perf-record.txt | 7 +++++-- > tools/perf/util/parse-events.c | 17 +++++++---------- > tools/perf/util/parse-events.h | 2 +- > tools/perf/util/parse-events.l | 1 + > tools/perf/util/parse-events.y | 26 ++++++++++++++++++++++++-- > 5 files changed, 38 insertions(+), 15 deletions(-) > > diff --git a/tools/perf/Documentation/perf-record.txt > b/tools/perf/Documentation/perf-record.txt > index e297b74..e07491f 100644 > --- a/tools/perf/Documentation/perf-record.txt > +++ b/tools/perf/Documentation/perf-record.txt > @@ -33,12 +33,15 @@ OPTIONS > - a raw PMU event (eventsel+umask) in the form of rNNN where NNN is a > hexadecimal event descriptor. > > - - a hardware breakpoint event in the form of '\mem:addr[:access]' > + - a hardware breakpoint event in the form of > '\mem:addr[/len][:access]' > where addr is the address in memory you want to break in. > Access is the memory access type (read, write, execute) it can > - be passed as follows: '\mem:addr[:[r][w][x]]'. > + be passed as follows: '\mem:addr[:[r][w][x]]'. len is the range, > + number of bytes from specified addr, which the breakpoint will > cover. > If you want to profile read-write accesses in 0x1000, just set > 'mem:0x1000:rw'. > + If you want to profile write accesses in [0x1000~1008), just set > + 'mem:0x1000/8:w'. > > --filter=<filter>:: > Event filter. > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c > index 9812531..65d81ae 100644 > --- a/tools/perf/util/parse-events.c > +++ b/tools/perf/util/parse-events.c > @@ -515,7 +515,7 @@ do { \ > } > > int parse_events_add_breakpoint(struct list_head *list, int *idx, > - void *ptr, char *type) > + void *ptr, char *type, u64 len) > { > struct perf_event_attr attr; > > @@ -525,14 +525,11 @@ int parse_events_add_breakpoint(struct list_head *list, > int *idx, > if (parse_breakpoint_type(type, &attr)) > return -EINVAL; > > - /* > - * We should find a nice way to override the access length > - * Provide some defaults for now > - */ > - if (attr.bp_type == HW_BREAKPOINT_X) > - attr.bp_len = sizeof(long); > - else > - attr.bp_len = HW_BREAKPOINT_LEN_4; > + /* Provide some defaults if len is not specified */ > + if (!len) > + len = attr.bp_type == HW_BREAKPOINT_X ? sizeof(long) : > + HW_BREAKPOINT_LEN_4;
Why is LEN_4 affected in the type? > + attr.bp_len = len; Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/