From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F13C4C19F2C for ; Tue, 2 Aug 2022 13:48:27 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 820AC8E0003; Tue, 2 Aug 2022 09:48:27 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D0198E0001; Tue, 2 Aug 2022 09:48:27 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 697E58E0003; Tue, 2 Aug 2022 09:48:27 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 5A8C28E0001 for ; Tue, 2 Aug 2022 09:48:27 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 044E514132D for ; Tue, 2 Aug 2022 13:48:26 +0000 (UTC) X-FDA: 79754782254.28.5EE8694 Received: from mail-vk1-f180.google.com (mail-vk1-f180.google.com [209.85.221.180]) by imf05.hostedemail.com (Postfix) with ESMTP id AC54110010F for ; Tue, 2 Aug 2022 13:48:26 +0000 (UTC) Received: by mail-vk1-f180.google.com with SMTP id q14so5624151vke.9 for ; Tue, 02 Aug 2022 06:48:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=ZmKXp3nhgE2D+UfRssUidLCX82AvB1pkKLvE94m52nM=; b=cFsGXeAX6OZ3JXUeob1jnuC8D2bYX4LOXjGowJF5YwKCoyyXJmUX1ifBcMK6T/xI6J +aNKNnkHgfHQ6t75vA+8IUhBErwm4Yf0CWulN0jYQVbh/KgEvWgCglL6FjykcoriTSpS cCbuVaJ8IaCV5B9B8ZlbFL1FZI8/rEkoMF+J9ZxBSbPcdG2zl+B+kISHDeKQFm3quCV1 1SE7sGK4NMjMYVDm350LTOdP4QphlDu9wexlVL9t06POGnzB3Rr+dtSdSnFz2upPOa0c /WUAOerxTUMY2YvYZFtUf3vYXxu98PwhBeH8JBAeF85mEH1VJk+jO2TBqrtOMsYjLaW+ RseA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=ZmKXp3nhgE2D+UfRssUidLCX82AvB1pkKLvE94m52nM=; b=O2zAerxQx2v/jJE+d1JjFj03DbfG2R7wER80/0fnX1vuWKbo1cCOJPlF4hwCmktl87 ppxdJ79hFf3OpntR2N698BlWvEZYg9mp7zmemK9CGYNr6xhipqVfFj+Hi98EiYTTFK54 LMm1VKmDtsAVynAszPpPeo8WiZXs2dyaY32QliftYMZaujPVQz9fp9OmA04+d33ADGhP +0/kS6rfekriFV2TOOR2vtIM3x03kI5P0T2PXvSekSkpoZuy9SfFkekBs3qgJnU3SlGQ Cct6TcsQt2hneaZWiASiMPdBDtkIxfciXIY3tbjjMpnKlVPfLZrjWe8oo6YhKpNpm5AX 9pMg== X-Gm-Message-State: AJIora94c3f0asOf8YpcOvUPGMKZg1UTtm/1ExiFIGGRreIFhOWJFHUj z9Kvmonv91EuTFhHjFdjF04BLQabstj+jjky2WI= X-Google-Smtp-Source: AGRyM1sEjg9PPG0Wpx+xs70HALb6GM+jC2dSrBAQbYJrVMYEdFRTjtQkdXLqc47ixYmHVQyeWFnOLLyyzjf0SgmUeu0= X-Received: by 2002:ac5:cd92:0:b0:376:429d:fdcc with SMTP id i18-20020ac5cd92000000b00376429dfdccmr7706890vka.41.1659448105829; Tue, 02 Aug 2022 06:48:25 -0700 (PDT) MIME-Version: 1.0 References: <20220729152316.58205-1-laoar.shao@gmail.com> <20220729152316.58205-6-laoar.shao@gmail.com> <20220802045832.fcgzvkenet7cmvy7@macbook-pro-3.dhcp.thefacebook.com> In-Reply-To: <20220802045832.fcgzvkenet7cmvy7@macbook-pro-3.dhcp.thefacebook.com> From: Yafang Shao Date: Tue, 2 Aug 2022 21:47:49 +0800 Message-ID: Subject: Re: [RFC PATCH bpf-next 05/15] bpf: Introduce helpers for container of struct bpf_map To: Alexei Starovoitov Cc: Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Martin Lau , Song Liu , Yonghong Song , john fastabend , KP Singh , Stanislav Fomichev , Hao Luo , jolsa@kernel.org, Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Andrew Morton , netdev , bpf , Linux MM Content-Type: text/plain; charset="UTF-8" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1659448106; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZmKXp3nhgE2D+UfRssUidLCX82AvB1pkKLvE94m52nM=; b=ll8p5V81dCyixDL16dI7hLRX6Vu8UikmW7jIfZAOUUY8R4NyPtE40JfHk5AG97hSCPVR8q ahsjJ3vGOhWhcsCFrhsbL9ntQWZgQfrWQfYmuIs/25bfB0sayGaN+CPJZZDasFW6pZ7GSj YvzGpuMpv8AE9oK2lH2Z3JLapdML8lo= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=cFsGXeAX; spf=pass (imf05.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.221.180 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1659448106; a=rsa-sha256; cv=none; b=Svz5AMMcSBBLoVhufg1JrvLWfjgtVtM3SLQ0+T4eodVRsR3h40t/ps+SF5djwG+hU1eHba Z1v9mFX/vtQFSj4iavaMBEbj+PsIUS17fxlzedz2yu31iQnxJWVfOJKf+rHyUhJvwO8qBf Pu6fu5t65vz8ShoAiDrJIrvsV3zZUhQ= Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=cFsGXeAX; spf=pass (imf05.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.221.180 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com; dmarc=pass (policy=none) header.from=gmail.com X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: AC54110010F X-Stat-Signature: 1fbnfckr997gfkmt1fr9o3zf8qr3kjp3 X-HE-Tag: 1659448106-553826 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Tue, Aug 2, 2022 at 12:58 PM Alexei Starovoitov wrote: > > On Fri, Jul 29, 2022 at 03:23:06PM +0000, Yafang Shao wrote: > > Currently bpf_map_area_alloc() is used to allocate a container of struct > > bpf_map or members in this container. To distinguish the map creation > > and other members, let split it into two different helpers, > > - bpf_map_container_alloc() > > Used to allocate a container of struct bpf_map, the container is as > > follows, > > struct bpf_map_container { > > struct bpf_map map; // the map must be the first member > > .... > > }; > > Pls. note that the struct bpf_map_contianer is a abstract one, which > > can be struct bpf_array, struct bpf_bloom_filter and etc. > > > > In this helper, it will call bpf_map_save_memcg() to init memcg > > relevant data in the bpf map. And these data will be cleared in > > bpf_map_container_free(). > > > > - bpf_map_area_alloc() > > Now it is used to allocate the members in a contianer only. > > > > Signed-off-by: Yafang Shao > > --- > > include/linux/bpf.h | 4 ++++ > > kernel/bpf/syscall.c | 56 ++++++++++++++++++++++++++++++++++++++++++++ > > 2 files changed, 60 insertions(+) > > > > diff --git a/include/linux/bpf.h b/include/linux/bpf.h > > index 20c26aed7896..2d971b0eb24b 100644 > > --- a/include/linux/bpf.h > > +++ b/include/linux/bpf.h > > @@ -1634,9 +1634,13 @@ void bpf_map_inc_with_uref(struct bpf_map *map); > > struct bpf_map * __must_check bpf_map_inc_not_zero(struct bpf_map *map); > > void bpf_map_put_with_uref(struct bpf_map *map); > > void bpf_map_put(struct bpf_map *map); > > +void *bpf_map_container_alloc(u64 size, int numa_node); > > +void *bpf_map_container_mmapable_alloc(u64 size, int numa_node, > > + u32 align, u32 offset); > > void *bpf_map_area_alloc(u64 size, int numa_node); > > void *bpf_map_area_mmapable_alloc(u64 size, int numa_node); > > void bpf_map_area_free(void *base); > > +void bpf_map_container_free(void *base); > > bool bpf_map_write_active(const struct bpf_map *map); > > void bpf_map_init_from_attr(struct bpf_map *map, union bpf_attr *attr); > > int generic_map_lookup_batch(struct bpf_map *map, > > diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c > > index 83c7136c5788..1a1a81a11b37 100644 > > --- a/kernel/bpf/syscall.c > > +++ b/kernel/bpf/syscall.c > > @@ -495,6 +495,62 @@ static void bpf_map_release_memcg(struct bpf_map *map) > > } > > #endif > > > > +/* > > + * The return pointer is a bpf_map container, as follow, > > + * struct bpf_map_container { > > + * struct bpf_map map; > > + * ... > > + * }; > > + * > > + * It is used in map creation path. > > + */ > > +void *bpf_map_container_alloc(u64 size, int numa_node) > > +{ > > + struct bpf_map *map; > > + void *container; > > + > > + container = __bpf_map_area_alloc(size, numa_node, false); > > + if (!container) > > + return NULL; > > + > > + map = (struct bpf_map *)container; > > + bpf_map_save_memcg(map); > > + > > + return container; > > +} > > + > > +void *bpf_map_container_mmapable_alloc(u64 size, int numa_node, u32 align, > > + u32 offset) > > +{ > > + struct bpf_map *map; > > + void *container; > > + void *ptr; > > + > > + /* kmalloc'ed memory can't be mmap'ed, use explicit vmalloc */ > > + ptr = __bpf_map_area_alloc(size, numa_node, true); > > + if (!ptr) > > + return NULL; > > + > > + container = ptr + align - offset; > > + map = (struct bpf_map *)container; > > + bpf_map_save_memcg(map); > > This is very error prone. > I don't think the container concept is necessary. > bpf_map_area_alloc() can just take extra memcg_fd argument. > Got it. I will change it. -- Regards Yafang