On 2015/11/24 21:36, Wang Nan wrote:
This patch introduces basic facilities to support config different
slots in a BPF map one by one.

array.nr_ranges and array.ranges are introduced into 'struct
parse_events_term', where ranges is an array of indices range (start,
length) which will be configured by this config term. nr_ranges
is the size of the array. The array is passed to 'struct bpf_map_priv'.
To indicate the new type of configuration, BPF_MAP_KEY_RANGES is
added as a new key type. bpf_map_config_foreach_key() is extended to
iterate over those indices instead of all possible keys.

Code in this commit will be enabled by following commit which enables
the indices syntax for array configuration.

Signed-off-by: Wang Nan <wangn...@huawei.com>
Cc: Alexei Starovoitov <a...@kernel.org>
Cc: Arnaldo Carvalho de Melo <a...@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu...@hitachi.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Zefan Li <lize...@huawei.com>
Cc: pi3or...@163.com
---
  tools/perf/util/bpf-loader.c   | 133 ++++++++++++++++++++++++++++++++++++++---
  tools/perf/util/bpf-loader.h   |   1 +
  tools/perf/util/parse-events.c |  33 +++++++++-
  tools/perf/util/parse-events.h |  12 ++++
  4 files changed, 171 insertions(+), 8 deletions(-)

diff --git a/tools/perf/util/bpf-loader.c b/tools/perf/util/bpf-loader.c
index a6e4bde..185d2cf 100644
--- a/tools/perf/util/bpf-loader.c
+++ b/tools/perf/util/bpf-loader.c

[SNIP]

+static int
+bpf_map_op_setkey(struct bpf_map_op *op, struct parse_events_term *term,
+                 const char *map_name)
+{
+       op->key_type = BPF_MAP_KEY_ALL;
+
+       if (term->array.nr_ranges) {
+               size_t memsz = term->array.nr_ranges *
+                               sizeof(op->k.array.ranges[0]);
+
+               op->k.array.ranges = malloc(memsz);
+               if (!op->k.array.ranges) {
+                       pr_debug("No enough memory to alloc indices for %s\n",
+                                map_name);
+                       return -ENOMEM;
+               }
+               memcpy(op->k.array.ranges, term->array.ranges, memsz);

Here can use memdup.

+               op->key_type = BPF_MAP_KEY_RANGES;
+               op->k.array.nr_ranges = term->array.nr_ranges;
+       }
+       return 0;
+}
+


--
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/

Reply via email to