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 8389CC4828F for ; Thu, 8 Feb 2024 01:17:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 155C66B0075; Wed, 7 Feb 2024 20:17:13 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 105E86B0078; Wed, 7 Feb 2024 20:17:13 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EE92B6B007D; Wed, 7 Feb 2024 20:17:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id DB14C6B0075 for ; Wed, 7 Feb 2024 20:17:12 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AA3FBA0196 for ; Thu, 8 Feb 2024 01:17:12 +0000 (UTC) X-FDA: 81766873104.19.26541E4 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by imf16.hostedemail.com (Postfix) with ESMTP id E511A18000A for ; Thu, 8 Feb 2024 01:17:10 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=YvbVnxIo; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.210.169 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=1707355031; 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=4021p6aWWpOkC2Rkmcf8GScpQhZDkM0AtFP8+zr1J5Y=; b=OE+LvGiiTBAJ5TFVDzT5GM98gaD1cyK1CrRjFScNpF+3+PEgbuqsjm6K8vJd7b84/8j48W 9XmUjZE05xxaiaB/EL0hKE7eowKq40NRUim6PbtKb2D6+EjVnlHe+AUOxsrEj/sRctOCUZ GAu2cxvl6pb8L1B+fETaCq1zAmZquEk= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=YvbVnxIo; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.210.169 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707355031; a=rsa-sha256; cv=none; b=P04S+5C+ZDapYnUhssKGbUoeNCvPVrWKL1dZoXiJKVFQGz7gMwfPoNULTjpDZf7EwoZt0Y ylFtEXHjdZl7pcc9J3PK5ou6Abydg5VnXxSsJolg+yGKnh4zVpHgQrXlideDbGMMx9N1jH mEGn6U5K1tClyGuranmBrj04c2cjDTA= Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-6daf694b439so1094767b3a.1 for ; Wed, 07 Feb 2024 17:17:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707355030; x=1707959830; 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=4021p6aWWpOkC2Rkmcf8GScpQhZDkM0AtFP8+zr1J5Y=; b=YvbVnxIoX6XoZF6ItXhLlkGcdD0VxDT8LHBOSqcBDaIFevdaHxyQcvupOvtf1+T1PU Pu4rltivyoSAWC4QJfO9Ad41tH63V1XA/SYHxzTAzHReicvjPMeBhRZMwD13au46IIe0 mJ3yQCaJf+BgBH2fD2uiBOHP8I3kcwfpFuprARd1T3E/bZig3/5mhikjhhgoMZmKBK9P qqxl7lXoDFFGgVtEyn3SWKPF0Sr7vDy+qDw+6nxOXcsAeHfljcHopLA/BksB23X5AJw2 nMZ/odsAB5qJLuoJhj4EOHpcZsM/hKsrViRzeSRgc0rKtt8vL4NDor1Ue7AeCDRspC25 frQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707355030; x=1707959830; 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=4021p6aWWpOkC2Rkmcf8GScpQhZDkM0AtFP8+zr1J5Y=; b=iDbsGH5IIq5iDNwNmrRsyPGzitopEQiUuwa+1wpLANpkeiVA3DSJOmQckGsKv+uc3F aYa9rTfD1yRlEEbgBdYh4IOczLrr+0VT2Xzx4tK8FlfpgQPXUIqWW6MgSiGwZkZ3ygZA F/VJ7srU6uUcOber4btFAy8NoKJpKoE2VYqiYxp3SbLQXbK8sxGcR7cWFRylV5V8SKzZ gAKGQNTAAwOWm6UE7OTtRoGcamVXZQxz5zZYd6IB/dDnQ6gH0sQXyfYWsjL8SvRLapGS NKt+tmULJVntXnRm+GtqjGQ9ZryWMY0lQc5h3CQ2WsJrhQNBSHMB6vDWKlieGZP35ctQ JX8Q== X-Gm-Message-State: AOJu0Yx4pEtDDXKwd4EshYRNDVIruxyS/GDD3HqnM3BR/JDOfm6A/YLW LCDqBvjEMOcDck9eMI2wigppcZUXgR7cr8rKbplWqNBzQ3zdG8PfClXhi6zLlK3bg6aLynqq68y zBZGXCbYlcW97nzDTZPlVgXK20JJBVDaT X-Google-Smtp-Source: AGHT+IFBUSu5OJb19ossIGo4OkyrBe3c+arF3/fXbLA52LN8nvrK//EHNkYWdFhhTjdO76Oof5fAUp4UUazsV9UW76Y= X-Received: by 2002:a05:6a00:b4e:b0:6e0:3f63:ed64 with SMTP id p14-20020a056a000b4e00b006e03f63ed64mr5967448pfo.34.1707355029732; Wed, 07 Feb 2024 17:17:09 -0800 (PST) MIME-Version: 1.0 References: <20240206220441.38311-1-alexei.starovoitov@gmail.com> <20240206220441.38311-13-alexei.starovoitov@gmail.com> In-Reply-To: <20240206220441.38311-13-alexei.starovoitov@gmail.com> From: Andrii Nakryiko Date: Wed, 7 Feb 2024 17:16:58 -0800 Message-ID: Subject: Re: [PATCH bpf-next 12/16] libbpf: Allow specifying 64-bit integers in map BTF. 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-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: E511A18000A X-Stat-Signature: cshfghcw18iz7ox58xuea6difj5arxk1 X-Rspam-User: X-HE-Tag: 1707355030-148906 X-HE-Meta: U2FsdGVkX18EJcfTmCp79Blj9mhGN38ggh93YvWvmsWEtPgpDg1RIetE70x1lePJseiBDN0fFESUsfVbfPU6kQomu9Mv2bet6n2BSGlsqkjr8IscQVl1ZsGRM21JOfxaiuWxbdtYabJj4N4tK/w8pk5P5HiDczXoMxaFoFq1Rld8h/tXgAD3oWmyQUz1p32fe9CXz3b81vVodr7PZFbB0O+rBkJO23ra9kdIyzv2XL8EvIpckwbtsXk+cKBWEQ+tNT/8N3Gj4zRmvtSyUhcDsXk5xBssGb3UsFd59i+3IEHweUpVRtBcy9LvQeqwUvSAq+AduVDMNnDYSer1PFOBkXYH6tXi+uoKWQdcoSIfo1MsgJrBIO0GusOcyYnQMWbh+WrCOpdDy+qIP/31SStYRz8fX+3o4DdkGfu9xq7zim7Goi6pwaS79uJyOYZuw44cUmLb+NQFI9vynQ8/NHLHm+6/u+3m7mnlBql+o32+YdRUzsZT8ulNdKrJk6G6h7hAtBTe5CkrYiuZ2+7bXhhbtXWF+wxMfqofqIESjlzTG9wIkKeE6X9wz/0EJ/RdSyO9ggP69Xr3pSpFlqobQBCEjGIXydBhSa5k0Bj/dZqAmD0636h+hikYdUuzneoSuba/TkIu7f5FbDdn/Go5h5iMi1xaXpom3krCaFprQOXDpwX/MQtF/GFVe9E0+7ef6lDm6OtyEa+QpZYVbEu+Y2OzqjA+CKaV75msd/2D/FgCWXQw60OR4EgUUgJ2TCT0cXD453w2r/fwSN0eZzQQP5iS4a4AuERoyYr8ABiAFmF07+gLO6rF+LWYgq0iWBeiaA7qYnau6E7Ffpo2HSa4bNU2PKPV7l8vO5lo4KROg1pRv5tLIbczv5NJtnfBPrXm5qKavl4zoPk9ZzWMvQlQfMeZH7tOwUcirdyQEzKRZKzMEA9vJ89+mGsTD2EfyO5E72HZcnYgIBtjt6n+3Mp3Qdw Oak6xE7I Bu+xQxK7DrTQNIUnxFvbeZg0Spk+hVT08OcUM2Msx9q7J8NkqE5dfr3aMWOO3yMwHCC3DCUiElPv5Jl0W5HZXAA9eATAWibUiSKs1CJItHFvV8zbEjtamkklSpVhKkplRdf66oqh+A2zeExbL/ZpuuzUsHe9nxDXeft5yDX3nJz/kvUDVL2uyMb9fEg8ngsDvO9lNCzwF2tw46MzvMOy/UAhRWOi2gMagHIYdW8xkjyZuBHaW9Bd3PNZR72CIIjdO6fp5QWNAB7H23LpsXzVozBn04H2sQBzM8Y3gwSjV/YowxCPHytuDsyiYi+mhjyuTnqWG7+wGXnq5fC/QMu82gLAZeCOAMGmT2V8haK4hKH7bnOSH48pfgzhv2Vk9BUPMDLfmZIqv5t4bynf8zlUuQ8DyYZdgt97PlKgFLOgMq2OYJoTEoc31FtZM8JWzlA0SCAXlKdcVg2F0dBAtXtqMizWZt9S7w0XFPERGeOO4Vt9O7RUkjVMZmKTS7Bneq0An6Q64uyjjJwozthAaF7E+u3kHGlSdj0DxyRhC 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 > > __uint() macro that is used to specify map attributes like: > __uint(type, BPF_MAP_TYPE_ARRAY); > __uint(map_flags, BPF_F_MMAPABLE); > is limited to 32-bit, since BTF_KIND_ARRAY has u32 "number of elements" f= ield. > > Introduce __ulong() macro that allows specifying values bigger than 32-bi= t. > In map definition "map_extra" is the only u64 field. > > Signed-off-by: Alexei Starovoitov > --- > tools/lib/bpf/bpf_helpers.h | 1 + > tools/lib/bpf/libbpf.c | 44 ++++++++++++++++++++++++++++++++++--- > 2 files changed, 42 insertions(+), 3 deletions(-) > > diff --git a/tools/lib/bpf/bpf_helpers.h b/tools/lib/bpf/bpf_helpers.h > index 9c777c21da28..fb909fc6866d 100644 > --- a/tools/lib/bpf/bpf_helpers.h > +++ b/tools/lib/bpf/bpf_helpers.h > @@ -13,6 +13,7 @@ > #define __uint(name, val) int (*name)[val] > #define __type(name, val) typeof(val) *name > #define __array(name, val) typeof(val) *name[] > +#define __ulong(name, val) enum name##__enum { name##__value =3D val } n= ame Can you try using __ulong() twice in the same file? enum type and value names have global visibility, so I suspect second use with the same field name would cause compilation error > > /* > * Helper macro to place programs, maps, license in > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index c5ce5946dc6d..a8c89b2315cd 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -2229,6 +2229,39 @@ static bool get_map_field_int(const char *map_name= , const struct btf *btf, > return true; > } > > +static bool get_map_field_long(const char *map_name, const struct btf *b= tf, > + const struct btf_member *m, __u64 *res) > +{ > + const struct btf_type *t =3D skip_mods_and_typedefs(btf, m->type,= NULL); > + const char *name =3D btf__name_by_offset(btf, m->name_off); > + > + if (btf_is_ptr(t)) > + return false; > + > + if (!btf_is_enum(t) && !btf_is_enum64(t)) { > + pr_warn("map '%s': attr '%s': expected enum or enum64, go= t %s.\n", > + map_name, name, btf_kind_str(t)); > + return false; > + } > + > + if (btf_vlen(t) !=3D 1) { > + pr_warn("map '%s': attr '%s': invalid __ulong\n", > + map_name, name); > + return false; > + } > + > + if (btf_is_enum(t)) { > + const struct btf_enum *e =3D btf_enum(t); > + > + *res =3D e->val; > + } else { > + const struct btf_enum64 *e =3D btf_enum64(t); > + > + *res =3D btf_enum64_value(e); > + } > + return true; > +} > + > static int pathname_concat(char *buf, size_t buf_sz, const char *path, c= onst char *name) > { > int len; > @@ -2462,10 +2495,15 @@ int parse_btf_map_def(const char *map_name, struc= t btf *btf, > map_def->pinning =3D val; > map_def->parts |=3D MAP_DEF_PINNING; > } else if (strcmp(name, "map_extra") =3D=3D 0) { > - __u32 map_extra; > + __u64 map_extra; > > - if (!get_map_field_int(map_name, btf, m, &map_ext= ra)) > - return -EINVAL; > + if (!get_map_field_long(map_name, btf, m, &map_ex= tra)) { > + __u32 map_extra_u32; > + > + if (!get_map_field_int(map_name, btf, m, = &map_extra_u32)) > + return -EINVAL; > + map_extra =3D map_extra_u32; > + } > map_def->map_extra =3D map_extra; > map_def->parts |=3D MAP_DEF_MAP_EXTRA; > } else { > -- > 2.34.1 >