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 136BCC4828F for ; Thu, 8 Feb 2024 01:15:35 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 34F206B0071; Wed, 7 Feb 2024 20:15:35 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2FF7E6B0074; Wed, 7 Feb 2024 20:15:35 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1C6986B0075; Wed, 7 Feb 2024 20:15:35 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 0B01F6B0071 for ; Wed, 7 Feb 2024 20:15:35 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 5E4B540927 for ; Thu, 8 Feb 2024 01:15:34 +0000 (UTC) X-FDA: 81766868988.06.FEAE479 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by imf14.hostedemail.com (Postfix) with ESMTP id 9CC2E100016 for ; Thu, 8 Feb 2024 01:15:32 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=dzbr8cv0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.210.171 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707354932; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=8/0xSz4o4XgiNbMeGylPhLw595u0iFgNthUln2Acerg=; b=SBN3ArTbsqo9PAifC/Y7KRzahE4NdSM1Fx4cqYjZ+VTllV7fwOQ+XJXfsfQkPtcLlWYUu1 k+Py0upZaKitRijQg1Y+U9WaDoXoHxMGy4Q79wRNIeY76e+eDSZqvD/o2bKK/J1VDcE7// mEt8cXO8VKUOoIYkRYkxBsv9jDIzGQQ= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=dzbr8cv0; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf14.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.210.171 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707354932; a=rsa-sha256; cv=none; b=Ehp9gMgnzGcF06+xiSwm2UL2qRfguYchtNKblwULs73Z0LdVBSOQKTWoDBTNl7JyaxbI0D 90Fv9UIJ2xpaI+bgDrOaj6PwxQI5KezoUNHSxRZ5YcaMZjpmsF0kysiuXYCymBjrfCJY+5 5P4G5fK+uJxuQC50ITTD2a8rZtSP8W4= Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-6e0523fbc27so664686b3a.3 for ; Wed, 07 Feb 2024 17:15:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707354931; x=1707959731; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=8/0xSz4o4XgiNbMeGylPhLw595u0iFgNthUln2Acerg=; b=dzbr8cv0T1ewEZN10tDsO6tZCccp9gaE/zz59bFAjylUd7OYtK8ekzsWa8JTCPcwo8 SfQEcBP/efDVyNe+tB1auCiqOy+BSv1qqlyy0OVLT5lGjfI5d/pjxW8D0GY9xs0sfTBB gW8RUUcaBKT9NB4jzL1BSIt5/eP5awx0M2zSVQF+pfctwidnFq8b6cg6Y9Wfy60xDptA RQKLUfBC50j8EoCLUyawRFQF1EQ4Dh82wQUZcOHprj241RM1/93Hck5QHn40Cp8S8IIH bCWIEDkZuNS5pz/+5f+R9LUhdInJOgRmsamKwfGnLFdGb187GTJLL9blaOf/SQJf9LbJ /Ifg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707354931; x=1707959731; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8/0xSz4o4XgiNbMeGylPhLw595u0iFgNthUln2Acerg=; b=WYXzYv46+myHznaxco4/WG74CpnUGDW1IBuYlRXeTIf8TzOuqTLIdlaA9uwSarSQkr DMNGoo47oru++6yOjbeMyAPhZtXRuJeJgvRszVmhrEG7wXqeZnQ0vP4b2bKuTTGmXfTI c/LYqH92qDxWs2rahbtlh8y4RTvajbZzNKJ8KVueX4ilOi7Imd+YvjoIBi9+pMbC2c5a jUl4YcPUbksLR64Dpj2nL9kX/GEAkMWGfo69QrwMz5s8pq77AOz1eR0e92OZkcXSdVLp SEsUleN3Oohh31Ejyrxd+6fXUfM2K1Ize2yA+5eNWeeogwFPc6gu1c5AEOVacVu8UoR6 RIzQ== X-Gm-Message-State: AOJu0YylMKAgOzVSS9sVCUT8gmG80Yy+Y2gjHZ/UJGnGYQ7/P4FX/iXO 3qnhztGs6kPnpCIx/Ix0NCqC3KLgo6rvs58iJgpxaWe8h5680yEwA5Z6EBF8v/3DaaN/EqTIAnE mrX8+9+fLDREpU7BoZJTtTbEhmqI= X-Google-Smtp-Source: AGHT+IFzyZ8NFJs4eGPxgKKkKD9QnCxOgmKJ7a/dIjkOiYq+8+fjSj6QgSWdg4cYZdswpr9C7Nar1SHQw8DUWQka3Wg= X-Received: by 2002:a05:6a00:22c3:b0:6df:ef8f:4bdc with SMTP id f3-20020a056a0022c300b006dfef8f4bdcmr7278353pfj.21.1707354931359; Wed, 07 Feb 2024 17:15:31 -0800 (PST) MIME-Version: 1.0 References: <20240206220441.38311-1-alexei.starovoitov@gmail.com> <20240206220441.38311-12-alexei.starovoitov@gmail.com> In-Reply-To: <20240206220441.38311-12-alexei.starovoitov@gmail.com> From: Andrii Nakryiko Date: Wed, 7 Feb 2024 17:15:19 -0800 Message-ID: Subject: Re: [PATCH bpf-next 11/16] libbpf: Add support for bpf_arena. To: Alexei Starovoitov Cc: bpf@vger.kernel.org, daniel@iogearbox.net, andrii@kernel.org, martin.lau@kernel.org, memxor@gmail.com, eddyz87@gmail.com, tj@kernel.org, brho@google.com, hannes@cmpxchg.org, linux-mm@kvack.org, kernel-team@fb.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Stat-Signature: w3eaw3c9xixdofrocq87jn4tw3y6t31g X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 9CC2E100016 X-HE-Tag: 1707354932-796107 X-HE-Meta: U2FsdGVkX1+stkAFX5JMORVKJPJzcpfq6Rw2HOB6gww2/sGYYYM3UgzdtBQKMrjFboYxajMhiQD6HgOmqqBI5+zEFZWTtT1xjKqxbL/krw94NQ5lMr/oFwJg9Zv7YjrPXo6lO2Dwvp01V3lC3kJBft36WIjNHWgLwU8QZrkoJSISkwlgk7v1bNmyfUUkn7owZH4FS0pJudwy/MALbWXMvho3InALroNUcufL561Zlu0nYQtH94AIrkzrYXC81AuekrgVtc439pablhF2Rc2cRq9kzRHlGZjdjBUyeruz2DBVoQHeEsqWQs8sNRTSHXYJ+X5HaUlQK0ii+S9CJPVqJhoMVhY0ukoOVecq1SaMa45rtQQrL0bcDp8z+M91SiliSYXDwQAXcwBHMXrM7IwQttTmLXAb1wX13s3pkvPBiyxEKf2PwxUIU5xpKYVti3MxWJGU2zj2e9WSOpZT/VB5AyY8xt5DS7xK+KfgREFsftDofcggO3GjBgyW3OIZCH9peHuMmaRzW8Xd1tBgcMUHm8h1P79Tor3A6hP/8YeBspPUzMKs0knLwcuH5eMgCsu2/+xSZCbaC+vZ0u+wib3NGtr7JuC6UJWYe3WDV9PzzAbPdk4SmHn/pc8zMAhAijzgjR/hTsjNAmoDv6FfrXAfDvZtRdufV6gXCzyXqeX3UDovd/Eg+JfTekC7lX0lsmK8COBMPgbwVpQSS8MXUbyHIS1bc2B4l9jqyC5QxaU7Fj9B5Z9Y+tBRY4UjFipBpGlGDEJU4qm0HRoQlGhkFf/9nuOgx1gwTBS4v4e6Qp5Luv3S+OedwpVt4vyrK9Y7DTUlNZiTODW9q20MgZ6Vzr51VVTIQdjis7CjEB6UtuaqX9kV8itYobe2H/ZRfdCJuPTXft7nwkNYHzAc48CbsCR/djOMjUk9/m/CBsnjiNM+DOiXnAE8ORRxeWO2fa/Bc7OmJPX/EsQbeHFtLmswKR/ JUX6sDBR fq2sZH5OZapzp0/kRFrJ5rGu94QF+seskdZaAbCFqQWqyE9hPNvoSvxy6O2DDxucdpY+yHDOqj0uqyZFswDZPLzdb6QDqnRA/J9MS4FQTVwGGSlGmh/aAhAc2S1+PfRJCayUX+qfj3/gCA5eayY8R7ZSIkMtdVeEnuLHkPv6j+gWs7Jdhd9DSlgNYJju6YL6u6pUZVYrHNZTtn+B1+K9KY67nmZl2CJpMnGnDieWBA+1D4HzCv6GHAFPNyjYiPueVRBOLciLn4ByFBPi4A9FtkjA/pmGV/O+517XsjKbuO+EKRgf7vBzgslNTXDCcenN0Pr6ddDQCB+rLbHBOniFhjp8X/G22iRZ68KvxFHxKcf+KVoViuN1cK6TBpfS2d/bY3BFEVobdQzrSc2KB3Mw1QtFShtpFqHB50FjuxVr4F7n3KaJ8JUvlbKEFCMRNgHbCFWBTiB8LkVREGIOGPwrWLiy13+RRd8fw9Co/o82xaLkOjDdsh3ns9sG5/5xacvwfKppLYQtMEsN0JqQr+ew4YPE3Pao/V+IWd8iGOQvLBsTAtotk7BTkiYWkpba68Sg+m2t6pOa/UVyQTIc= 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: List-Subscribe: List-Unsubscribe: On Tue, Feb 6, 2024 at 2:05=E2=80=AFPM Alexei Starovoitov wrote: > > From: Alexei Starovoitov > > mmap() bpf_arena right after creation, since the kernel needs to > remember the address returned from mmap. This is user_vm_start. > LLVM will generate bpf_arena_cast_user() instructions where > necessary and JIT will add upper 32-bit of user_vm_start > to such pointers. > > Use traditional map->value_size * map->max_entries to calculate mmap sz, > though it's not the best fit. We should probably make bpf_map_mmap_sz() aware of specific map type and do different calculations based on that. It makes sense to have round_up(PAGE_SIZE) for BPF map arena, and use just just value_size or max_entries to specify the size (fixing the other to be zero). > > Also don't set BTF at bpf_arena creation time, since it doesn't support i= t. > > Signed-off-by: Alexei Starovoitov > --- > tools/lib/bpf/libbpf.c | 18 ++++++++++++++++++ > tools/lib/bpf/libbpf_probes.c | 6 ++++++ > 2 files changed, 24 insertions(+) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 01f407591a92..c5ce5946dc6d 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -185,6 +185,7 @@ static const char * const map_type_name[] =3D { > [BPF_MAP_TYPE_BLOOM_FILTER] =3D "bloom_filter", > [BPF_MAP_TYPE_USER_RINGBUF] =3D "user_ringbuf", > [BPF_MAP_TYPE_CGRP_STORAGE] =3D "cgrp_storage", > + [BPF_MAP_TYPE_ARENA] =3D "arena", > }; > > static const char * const prog_type_name[] =3D { > @@ -4852,6 +4853,7 @@ static int bpf_object__create_map(struct bpf_object= *obj, struct bpf_map *map, b > case BPF_MAP_TYPE_SOCKHASH: > case BPF_MAP_TYPE_QUEUE: > case BPF_MAP_TYPE_STACK: > + case BPF_MAP_TYPE_ARENA: > create_attr.btf_fd =3D 0; > create_attr.btf_key_type_id =3D 0; > create_attr.btf_value_type_id =3D 0; > @@ -4908,6 +4910,22 @@ static int bpf_object__create_map(struct bpf_objec= t *obj, struct bpf_map *map, b > if (map->fd =3D=3D map_fd) > return 0; > > + if (def->type =3D=3D BPF_MAP_TYPE_ARENA) { > + size_t mmap_sz; > + > + mmap_sz =3D bpf_map_mmap_sz(def->value_size, def->max_ent= ries); > + map->mmaped =3D mmap((void *)map->map_extra, mmap_sz, PRO= T_READ | PROT_WRITE, > + map->map_extra ? MAP_SHARED | MAP_FIXE= D : MAP_SHARED, > + map_fd, 0); > + if (map->mmaped =3D=3D MAP_FAILED) { > + err =3D -errno; > + map->mmaped =3D NULL; > + pr_warn("map '%s': failed to mmap bpf_arena: %d\n= ", > + bpf_map__name(map), err); > + return err; leaking map_fd here, you need to close(map_fd) before erroring out > + } > + } > + > /* Keep placeholder FD value but now point it to the BPF map obje= ct. > * This way everything that relied on this map's FD (e.g., reloca= ted > * ldimm64 instructions) will stay valid and won't need adjustmen= ts. > diff --git a/tools/lib/bpf/libbpf_probes.c b/tools/lib/bpf/libbpf_probes.= c > index ee9b1dbea9eb..cbc7f4c09060 100644 > --- a/tools/lib/bpf/libbpf_probes.c > +++ b/tools/lib/bpf/libbpf_probes.c > @@ -338,6 +338,12 @@ static int probe_map_create(enum bpf_map_type map_ty= pe) > key_size =3D 0; > max_entries =3D 1; > break; > + case BPF_MAP_TYPE_ARENA: > + key_size =3D sizeof(__u64); > + value_size =3D sizeof(__u64); > + opts.map_extra =3D 0; /* can mmap() at any address */ > + opts.map_flags =3D BPF_F_MMAPABLE; > + break; > case BPF_MAP_TYPE_HASH: > case BPF_MAP_TYPE_ARRAY: > case BPF_MAP_TYPE_PROG_ARRAY: > -- > 2.34.1 >