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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88506C433EF for ; Tue, 26 Oct 2021 22:36:26 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 232A16109E for ; Tue, 26 Oct 2021 22:36:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 232A16109E Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 61ADC940007; Tue, 26 Oct 2021 18:36:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5CB186B0074; Tue, 26 Oct 2021 18:36:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4BAFF940007; Tue, 26 Oct 2021 18:36:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0184.hostedemail.com [216.40.44.184]) by kanga.kvack.org (Postfix) with ESMTP id 3D3806B0073 for ; Tue, 26 Oct 2021 18:36:25 -0400 (EDT) Received: from smtpin02.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 0086118466560 for ; Tue, 26 Oct 2021 22:36:24 +0000 (UTC) X-FDA: 78740048730.02.72D1DA4 Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by imf10.hostedemail.com (Postfix) with ESMTP id 9867260019BA for ; Tue, 26 Oct 2021 22:36:17 +0000 (UTC) Received: by mail-pf1-f171.google.com with SMTP id m26so853155pff.3 for ; Tue, 26 Oct 2021 15:36:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zi+Ls5+JAndy1ZPzSuOjFuN6VdKyUSUs7sXCMvCwlGg=; b=LJEq0GmSDjII5qoqNXb8I5W6PisdeBh1LIyMwhPfeH8jzXHP4ZrLifdIwzNQXW8ND+ 56t95Ea/Oqnfk5EEZkWGv95L5UKMfXuEpMIbUg4d2KfjhFvvEHFYMDk4APFQZNapynog DhJ2UCdsyAqV8hPYK36maA4WMOe5o0Op6Zh9He6znf/VlsRMkJ+NiMj4film9/LelDPm XiDOAiK8cMpHJgCHZtb8Uv/+Ko0zhFnqv0fpM4uhiaCjkNvDeNL9YbnC9FFAVxCI0KYT ORxkP+gOODKPJ+VnagaB/IDqovDoYYUu3bs0HutZs8cfVbm9psDQk/fzFx4QVipzGMiL qv6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zi+Ls5+JAndy1ZPzSuOjFuN6VdKyUSUs7sXCMvCwlGg=; b=q+OGU74DrWACBcb5J4YtxYv+a+D4qY76ZRp19PqzAlnxcdm3dfubm+DTWgZ3eiDxKE MLZUKVvzrLptvsqTdKW6b+jADQD9lWEaoSCeCeOO1RHgooJUXrTvJZbt1F9tv3M40Uvf lioSQtYcm8hqQksYoT9AfEOUyUrKmXLT0zPC05VadLOMSlYb1Sq7gA5mjaJMT3L8jfKM TDdgUx8qbroULIopvLpkGNOzZGQvBKqWIwyMszNNnzDVK5W5JTivW48amSuGLmHLTI6I ruPu0XDhCbwUz2Ks2nsMeuLzajMd23kU1Cr5ZXVkbZZ2aIuW03VAt3Ao21r9GAo+l3h0 3iCQ== X-Gm-Message-State: AOAM531poVJbh9mPE5snGwu82KN4XZ5o2jorN5dZnEk41nhAGJEBvu7X sfFxQD3PoiTej8mHIlhP2LVIkryJpiTTcaV+NlNq79XnzcT+bA== X-Google-Smtp-Source: ABdhPJwjCAAGi9tkRXoXDwC14P/IcuyIu3pM5/sbKwp6NDekn9JY6rjbRwLYhExz4gA1yDh9lLUVLL2tGJ/b0/YF4ko= X-Received: by 2002:a65:6215:: with SMTP id d21mr21410794pgv.62.1635287783574; Tue, 26 Oct 2021 15:36:23 -0700 (PDT) MIME-Version: 1.0 References: <20211026222746.403866-1-jevburton.kernel@gmail.com> In-Reply-To: <20211026222746.403866-1-jevburton.kernel@gmail.com> From: Joe Burton Date: Tue, 26 Oct 2021 15:36:12 -0700 Message-ID: Subject: Re: [PATCH] libbpf: Deprecate bpf_objects_list To: Joe Burton Cc: Andrii Nakryiko , linux-mm@kvack.org, linux-kernel@vger.kernel.org, trivial@kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 9867260019BA X-Stat-Signature: 9t373y7tm847hhr3sw51p8hix1e4wnj3 Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=LJEq0GmS; spf=pass (imf10.hostedemail.com: domain of jevburton@google.com designates 209.85.210.171 as permitted sender) smtp.mailfrom=jevburton@google.com; dmarc=pass (policy=reject) header.from=google.com X-HE-Tag: 1635287777-438566 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: I messed up the mailing lists and will be resending this patch series in a moment. Apologies for the noise. Best, Joe Burton On Tue, Oct 26, 2021 at 3:27 PM Joe Burton wrote: > > From: Joe Burton > > Add a flag to `enum libbpf_strict_mode' to disable the global > `bpf_objects_list', preventing race conditions when concurrent threads > call bpf_object__open() or bpf_object__close(). > > bpf_object__next() will return NULL if this option is set. > > Callers may achieve the same workflow by tracking bpf_objects in > application code. > > [0] Closes: https://github.com/libbpf/libbpf/issues/293 > > Signed-off-by: Joe Burton > --- > tools/lib/bpf/libbpf.c | 8 +++++++- > tools/lib/bpf/libbpf.h | 3 ++- > tools/lib/bpf/libbpf_legacy.h | 6 ++++++ > 3 files changed, 15 insertions(+), 2 deletions(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 2fbed2d4a645..59d39ce9f375 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -1148,6 +1148,7 @@ static struct bpf_object *bpf_object__new(const char *path, > size_t obj_buf_sz, > const char *obj_name) > { > + bool strict = (libbpf_mode & LIBBPF_STRICT_NO_OBJECT_LIST); > struct bpf_object *obj; > char *end; > > @@ -1188,7 +1189,8 @@ static struct bpf_object *bpf_object__new(const char *path, > obj->loaded = false; > > INIT_LIST_HEAD(&obj->list); > - list_add(&obj->list, &bpf_objects_list); > + if (!strict) > + list_add(&obj->list, &bpf_objects_list); > return obj; > } > > @@ -7935,6 +7937,10 @@ struct bpf_object * > bpf_object__next(struct bpf_object *prev) > { > struct bpf_object *next; > + bool strict = (libbpf_mode & LIBBPF_STRICT_NO_OBJECT_LIST); > + > + if (strict) > + return NULL; > > if (!prev) > next = list_first_entry(&bpf_objects_list, > diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h > index e1900819bfab..defabdbe7760 100644 > --- a/tools/lib/bpf/libbpf.h > +++ b/tools/lib/bpf/libbpf.h > @@ -168,7 +168,8 @@ LIBBPF_API struct bpf_program * > bpf_object__find_program_by_name(const struct bpf_object *obj, > const char *name); > > -LIBBPF_API struct bpf_object *bpf_object__next(struct bpf_object *prev); > +LIBBPF_API LIBBPF_DEPRECATED_SINCE(0, 7, "track bpf_objects in application code instead") > +struct bpf_object *bpf_object__next(struct bpf_object *prev); > #define bpf_object__for_each_safe(pos, tmp) \ > for ((pos) = bpf_object__next(NULL), \ > (tmp) = bpf_object__next(pos); \ > diff --git a/tools/lib/bpf/libbpf_legacy.h b/tools/lib/bpf/libbpf_legacy.h > index 29ccafab11a8..5ba5c9beccfa 100644 > --- a/tools/lib/bpf/libbpf_legacy.h > +++ b/tools/lib/bpf/libbpf_legacy.h > @@ -57,6 +57,12 @@ enum libbpf_strict_mode { > * function name instead of section name. > */ > LIBBPF_STRICT_SEC_NAME = 0x04, > + /* > + * Disable the global 'bpf_objects_list'. Maintaining this list adds > + * a race condition to bpf_object__open() and bpf_object__close(). > + * Clients can maintain it on their own if it is valuable for them. > + */ > + LIBBPF_STRICT_NO_OBJECT_LIST = 0x08, > > __LIBBPF_STRICT_LAST, > }; > -- > 2.33.0.1079.g6e70778dc9-goog >