Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753813AbbGWAtA (ORCPT ); Wed, 22 Jul 2015 20:49:00 -0400 Received: from mail-pd0-f169.google.com ([209.85.192.169]:33979 "EHLO mail-pd0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753768AbbGWAs6 (ORCPT ); Wed, 22 Jul 2015 20:48:58 -0400 Subject: Re: [PATCH v2 1/5] bpf: Add new bpf map type to store the pointer to struct perf_event To: Kaixu Xia , davem@davemloft.net, acme@kernel.org, mingo@redhat.com, a.p.zijlstra@chello.nl, masami.hiramatsu.pt@hitachi.com, jolsa@kernel.org References: <1437552572-84748-1-git-send-email-xiakaixu@huawei.com> <1437552572-84748-2-git-send-email-xiakaixu@huawei.com> Cc: wangnan0@huawei.com, linux-kernel@vger.kernel.org, pi3orama@163.com, hekuang@huawei.com From: Alexei Starovoitov Message-ID: <55B039F7.8060706@plumgrid.com> Date: Wed, 22 Jul 2015 17:48:55 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Thunderbird/38.0.1 MIME-Version: 1.0 In-Reply-To: <1437552572-84748-2-git-send-email-xiakaixu@huawei.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2049 Lines: 57 On 7/22/15 1:09 AM, Kaixu Xia wrote: > Introduce a new bpf map type 'BPF_MAP_TYPE_PERF_EVENT_ARRAY'. > This map will only store the pointer to struct perf_event. > > Signed-off-by: Kaixu Xia > --- > include/linux/bpf.h | 2 ++ > include/uapi/linux/bpf.h | 1 + > kernel/bpf/arraymap.c | 40 ++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 43 insertions(+) > > diff --git a/include/linux/bpf.h b/include/linux/bpf.h > index 4383476..f6a2442 100644 > --- a/include/linux/bpf.h > +++ b/include/linux/bpf.h > @@ -11,6 +11,8 @@ > #include > #include > > +#define MAX_PERF_EVENT_ARRAY_ENTRY (2*NR_CPUS) why this artificial limit? Just drop it. > +static struct bpf_map *perf_event_array_map_alloc(union bpf_attr *attr) > +{ > + /* only the pointer to struct perf_event can be stored in > + * perf_event_array map > + */ > + if (attr->value_size != sizeof(void *)) > + return ERR_PTR(-EINVAL); hmm. that's odd. why reinvent things? please do the same as prog_array does. Namely below: > +static const struct bpf_map_ops perf_event_array_ops = { > + .map_alloc = perf_event_array_map_alloc, > + .map_free = array_map_free, > + .map_get_next_key = perf_event_array_map_get_next_key, > + .map_lookup_elem = array_map_lookup_elem, > + .map_delete_elem = array_map_delete_elem, this is broken. you don't want programs to manipulate 'struct perf_event *' pointers. lookup/update/delete helpers shouldn't be accessible from the programs then update/delete can be cleanly implemented and called via syscall. See how prog_array does it. Also please collapse patches 1-3 into one. Their logically one piece. I'll comment on them as well, but it would have been easier for me and you if their were part of one email thread. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/