From patchwork Wed Aug 10 15:18:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 12940667 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 1E116C00140 for ; Wed, 10 Aug 2022 15:19:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AA1F36B007B; Wed, 10 Aug 2022 11:18:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id A29D18E0001; Wed, 10 Aug 2022 11:18:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87CC66B007E; Wed, 10 Aug 2022 11:18:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 76A806B007B for ; Wed, 10 Aug 2022 11:18:59 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 55836413DF for ; Wed, 10 Aug 2022 15:18:59 +0000 (UTC) X-FDA: 79784040798.15.6082CE8 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) by imf24.hostedemail.com (Postfix) with ESMTP id C316E180085 for ; Wed, 10 Aug 2022 15:18:58 +0000 (UTC) Received: by mail-pg1-f180.google.com with SMTP id h132so14617828pgc.10 for ; Wed, 10 Aug 2022 08:18:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=ZuUr0Lmb/ZOxk9PY5AfEZVtv5LOeYubF7wGlzoETmHE=; b=OHEQuhGa2E+9meTBDvo4R2MaXiYLv46EQQrHAGQ3JbFSFXuMFRDQWOZD23mUAky4KU OdJtLuJZjuzRxOu088twYy4nJQYluaHRMZjvhG9loN/vIeefkKoHQU2tcLgaFdnStZzO R6v480SZuZVpcD9ZCiG9YqtXNbWy/GenPH0Ngh4lznaoOhClBYV13p7DV3XBf36nhrjx N4tXmzGujKFH87N9VHq7kDTXRcyBcicH1oNBbzayC8dGYYh5E2Ay8a9MmCxQJcwAA70S tpQosUDU+WzgHIpv/YGR4TygyIZnYDWpks/QOSEm5L3D8BKwmyqxQYdESo8Pq/KKJr7e qb9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=ZuUr0Lmb/ZOxk9PY5AfEZVtv5LOeYubF7wGlzoETmHE=; b=qkBujrpO/gX/u0VmmIcrBK/TjZAx2aCyWHPuCiVFr1xlHgoeEJWG1Dcb0OCZWkiKl6 +iD13ZKoirgRsXuiTzYlQ21Qi0mnoLViOaH4GdLbMLOH4GuFyg3j5yflMhUw6aViDmo3 3L8VM5GGEGjGftbRWaKWejF0UWW2z25zBrCINYQN6zq4J/z85i0TFQ0MibcsWNICqtQN xq0VvefhpfGCFJvgLI5P0NVJ9zZNu7SpSLCbXERdo2FjDIG19uHRvADvQrU936G9WUNr 5gFNv8AxOF9Wc6GTMVk1L1z/9ctQRNOWbpaR56Duc5JqwZ4b2Q2hW4VpRSDItf/c+5ct WZAA== X-Gm-Message-State: ACgBeo2UxswYOG2aKYCImaUIE80Q6S90HIizbDQjeuGeyAhdmvikjuEf B/38j1pyAVIPyPNx2gEf2n0= X-Google-Smtp-Source: AA6agR6ilBNkZuPCRzWfdrpskFMZWXABEGPKHGKS0BRmL0vru/PZc53aw592+RCpI5B3o2SiI/u8mA== X-Received: by 2002:a63:1624:0:b0:41a:9dea:1c80 with SMTP id w36-20020a631624000000b0041a9dea1c80mr23479619pgl.400.1660144737875; Wed, 10 Aug 2022 08:18:57 -0700 (PDT) Received: from vultr.guest ([2001:19f0:6001:5c3e:5400:4ff:fe19:c3bc]) by smtp.gmail.com with ESMTPSA id 85-20020a621558000000b0052b6ed5ca40sm2071935pfv.192.2022.08.10.08.18.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Aug 2022 08:18:57 -0700 (PDT) From: Yafang Shao To: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com, haoluo@google.com, jolsa@kernel.org, hannes@cmpxchg.org, mhocko@kernel.org, roman.gushchin@linux.dev, shakeelb@google.com, songmuchun@bytedance.com, akpm@linux-foundation.org Cc: netdev@vger.kernel.org, bpf@vger.kernel.org, linux-mm@kvack.org, Yafang Shao Subject: [PATCH bpf-next 07/15] bpf: Call bpf_map_init_from_attr() immediately after map creation Date: Wed, 10 Aug 2022 15:18:32 +0000 Message-Id: <20220810151840.16394-8-laoar.shao@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220810151840.16394-1-laoar.shao@gmail.com> References: <20220810151840.16394-1-laoar.shao@gmail.com> MIME-Version: 1.0 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1660144738; a=rsa-sha256; cv=none; b=BEc8j9wYI5uAP83P3nfVmkbWvYglRjPQ6VpbRqMYHiDnUivd1CoE8k0C1JziUzpKy4B6gs 0kF/3TQhavGwGRqXqwG2Cg/g+9w7hniRWNsTNRLVjU1rYQM1yJCzp7CTQnoUhpGYHV4LHD m2tMbsT+GWhaSAEOa/xLmJo5QAG0bqo= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=OHEQuhGa; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1660144738; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ZuUr0Lmb/ZOxk9PY5AfEZVtv5LOeYubF7wGlzoETmHE=; b=A6XPAU4TcoxopVPlu5x6x8uNAmkCfDATqzRVftMtOqVsbMKfWI3N5rr5bXxcf6kBIMZgdS sZeHQE/YrrBrFLPfisHB6YthHtCLGxH1AwkByITFoU1FN/1o7LFRrYm1xD/B8549juOHRS Wr1BmZAdItEF72i4M0DZycJVAtyNzfU= X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: C316E180085 X-Rspam-User: X-Stat-Signature: ba143aisjb6feewpwcuyasrhg19m7jju Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=OHEQuhGa; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.215.180 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com X-HE-Tag: 1660144738-211549 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: In order to make all other map related memory allocations been allocated after memcg is saved in the map, we should save the memcg immediately after map creation. But the map is created in bpf_map_area_alloc(), within which we can't get the related bpf_map (except with a pointer casting which may be error prone), so we can do it in bpf_map_init_from_attr(), which is used by all bpf maps. bpf_map_init_from_attr() is executed immediately after bpf_map_area_alloc() for almost all bpf maps except bpf_struct_ops, devmap and hashmap, so this patch changes these three maps. In the future we will change the return type of bpf_map_init_from_attr() from void to int for error cases, so put it immediately after bpf_map_area_alloc() will make it eary to handle the error case. Signed-off-by: Yafang Shao --- kernel/bpf/bpf_struct_ops.c | 2 +- kernel/bpf/devmap.c | 5 ++--- kernel/bpf/hashtab.c | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/kernel/bpf/bpf_struct_ops.c b/kernel/bpf/bpf_struct_ops.c index 84b2d9d..36f24f8 100644 --- a/kernel/bpf/bpf_struct_ops.c +++ b/kernel/bpf/bpf_struct_ops.c @@ -624,6 +624,7 @@ static struct bpf_map *bpf_struct_ops_map_alloc(union bpf_attr *attr) st_map->st_ops = st_ops; map = &st_map->map; + bpf_map_init_from_attr(map, attr); st_map->uvalue = bpf_map_area_alloc(vt->size, NUMA_NO_NODE); st_map->links = @@ -637,7 +638,6 @@ static struct bpf_map *bpf_struct_ops_map_alloc(union bpf_attr *attr) mutex_init(&st_map->lock); set_vm_flush_reset_perms(st_map->image); - bpf_map_init_from_attr(map, attr); return map; } diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c index f9a87dc..20decc7 100644 --- a/kernel/bpf/devmap.c +++ b/kernel/bpf/devmap.c @@ -127,9 +127,6 @@ static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr) */ attr->map_flags |= BPF_F_RDONLY_PROG; - - bpf_map_init_from_attr(&dtab->map, attr); - if (attr->map_type == BPF_MAP_TYPE_DEVMAP_HASH) { dtab->n_buckets = roundup_pow_of_two(dtab->map.max_entries); @@ -167,6 +164,8 @@ static struct bpf_map *dev_map_alloc(union bpf_attr *attr) if (!dtab) return ERR_PTR(-ENOMEM); + bpf_map_init_from_attr(&dtab->map, attr); + err = dev_map_init_map(dtab, attr); if (err) { bpf_map_area_free(dtab); diff --git a/kernel/bpf/hashtab.c b/kernel/bpf/hashtab.c index 8392f7f..48dc04c 100644 --- a/kernel/bpf/hashtab.c +++ b/kernel/bpf/hashtab.c @@ -499,10 +499,10 @@ static struct bpf_map *htab_map_alloc(union bpf_attr *attr) if (!htab) return ERR_PTR(-ENOMEM); - lockdep_register_key(&htab->lockdep_key); - bpf_map_init_from_attr(&htab->map, attr); + lockdep_register_key(&htab->lockdep_key); + if (percpu_lru) { /* ensure each CPU's lru list has >=1 elements. * since we are at it, make each lru list has the same