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 X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5FC19C43387 for ; Wed, 16 Jan 2019 22:03:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 252CA20651 for ; Wed, 16 Jan 2019 22:03:29 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="c3z1m49R" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732370AbfAPWD2 (ORCPT ); Wed, 16 Jan 2019 17:03:28 -0500 Received: from mail-ot1-f74.google.com ([209.85.210.74]:53341 "EHLO mail-ot1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731870AbfAPWD1 (ORCPT ); Wed, 16 Jan 2019 17:03:27 -0500 Received: by mail-ot1-f74.google.com with SMTP id o13so4161212otl.20 for ; Wed, 16 Jan 2019 14:03:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=7sLD5IUJWFHstVNzxcjhu83Ky/ZUexGIo+WV+/zouck=; b=c3z1m49RWwF+00C0dZOJp6fD1POQhZkTXQD6csmrifQV39BTxA30BZaivm1rn1VpzX uYL1qnb3Yne53XHrTNxGjQd387RNw00JzzIPBhJR0ZwpZ6lHzcKmMttRhYM/QX0YmqvY 21BEO1ED+AYTH5x3Ukgg6juJVStmDEostEYX7D1ZpCHtiNi61gdAprrNC+v4rJZs89nS 8+YedpUDlvHIfqUEDzqftOVqs5ZTcCnZBHrY1P8hiMLPgi9SjeJ8caZOhGWmvLD+L7+o A/+JbshiFYcP4dE62lRn5Eg+kw0LDpmH4xJbPblcQyDus5cVIq9BGzkGEuVEceW1I80E DGlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=7sLD5IUJWFHstVNzxcjhu83Ky/ZUexGIo+WV+/zouck=; b=q8gSqO6xexHNoYXBmhO+Lxx08vlCjmMW76RaB3aF9WjDfmlszORAV0agLwjfsmvYNq 0wmWt2Kel0tzvnn0AOn3A9J5ie/6EYe0wsNdlwwZLcft3pzoc8YeO+4GSghrj/Rz40IE 8ShisKWOLhIS0naFgFpwn5juaJvjEn4wUOZ7+yr0e/giaVoaYlErEDfdb2GqQuv+eKnT UpPQO5+62P70X4bK1LyUYhKPNbS5z8tE1e4ox1EPxlfbtkdgudkdGw4tZpfvQzWiAlNT v1OtJS8nEfDZGbTE8gNC88a6ZlUWbzy0TKVjh1zxwfWxknKsKtTZuy+Hv2JRDnTEz2Ep w9JA== X-Gm-Message-State: AJcUukfW8ttNvfY42DV5biwmmFX4pPFeG+UKJw8p3A4juHr+kFjkVcZm Aq4hgLElorn9JS9ZH3i7GsStye3uUVBVgqeKiS5VgBs3Kn1y9TlW6g5Ldmj6dnSE4S2DWOiEWAv z23ibbNIUB6GIKoX15UOtWTfp0AS/tE7Zfm38rb0myt213Pd7FUE6mg== X-Google-Smtp-Source: ALg8bN6nZQqXJknmV4Bpg5vBxsSaiwJ555jBrQHZ+9FGZxZJQQ0CffbZyZZJ1DPvYXUhz7yQHaAh5Y0= X-Received: by 2002:a9d:5d5:: with SMTP id 79mr6287375otd.4.1547676206371; Wed, 16 Jan 2019 14:03:26 -0800 (PST) Date: Wed, 16 Jan 2019 14:03:17 -0800 In-Reply-To: <20190116220317.30907-1-sdf@google.com> Message-Id: <20190116220317.30907-3-sdf@google.com> Mime-Version: 1.0 References: <20190116220317.30907-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.97.g81188d93c3-goog Subject: [PATCH bpf v2 3/3] selftests/bpf: retry tests that expect build-id From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, songliubraving@fb.com, Stanislav Fomichev Content-Type: text/plain; charset="UTF-8" Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org While running test_progs in a loop I found out that I'm sometimes hitting "Didn't find expected build ID from the map" error. Looking at stack_map_get_build_id_offset() it seems that it is racy (by design) and can sometimes return BPF_STACK_BUILD_ID_IP (i.e. can't trylock current->mm->mmap_sem). Let's retry this test a single time. Fixes: 13790d1cc72c ("bpf: add selftest for stackmap with build_id in NMI context") Acked-by: Song Liu Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_progs.c | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index 126fc624290d..25f0083a9b2e 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -1188,7 +1188,9 @@ static void test_stacktrace_build_id(void) int i, j; struct bpf_stack_build_id id_offs[PERF_MAX_STACK_DEPTH]; int build_id_matches = 0; + int retry = 1; +retry: err = bpf_prog_load(file, BPF_PROG_TYPE_TRACEPOINT, &obj, &prog_fd); if (CHECK(err, "prog_load", "err %d errno %d\n", err, errno)) goto out; @@ -1301,6 +1303,19 @@ static void test_stacktrace_build_id(void) previous_key = key; } while (bpf_map_get_next_key(stackmap_fd, &previous_key, &key) == 0); + /* stack_map_get_build_id_offset() is racy and sometimes can return + * BPF_STACK_BUILD_ID_IP instead of BPF_STACK_BUILD_ID_VALID; + * try it one more time. + */ + if (build_id_matches < 1 && retry--) { + ioctl(pmu_fd, PERF_EVENT_IOC_DISABLE); + close(pmu_fd); + bpf_object__close(obj); + printf("%s:WARN:Didn't find expected build ID from the map, retrying\n", + __func__); + goto retry; + } + if (CHECK(build_id_matches < 1, "build id match", "Didn't find expected build ID from the map\n")) goto disable_pmu; @@ -1341,7 +1356,9 @@ static void test_stacktrace_build_id_nmi(void) int i, j; struct bpf_stack_build_id id_offs[PERF_MAX_STACK_DEPTH]; int build_id_matches = 0; + int retry = 1; +retry: err = bpf_prog_load(file, BPF_PROG_TYPE_PERF_EVENT, &obj, &prog_fd); if (CHECK(err, "prog_load", "err %d errno %d\n", err, errno)) return; @@ -1436,6 +1453,19 @@ static void test_stacktrace_build_id_nmi(void) previous_key = key; } while (bpf_map_get_next_key(stackmap_fd, &previous_key, &key) == 0); + /* stack_map_get_build_id_offset() is racy and sometimes can return + * BPF_STACK_BUILD_ID_IP instead of BPF_STACK_BUILD_ID_VALID; + * try it one more time. + */ + if (build_id_matches < 1 && retry--) { + ioctl(pmu_fd, PERF_EVENT_IOC_DISABLE); + close(pmu_fd); + bpf_object__close(obj); + printf("%s:WARN:Didn't find expected build ID from the map, retrying\n", + __func__); + goto retry; + } + if (CHECK(build_id_matches < 1, "build id match", "Didn't find expected build ID from the map\n")) goto disable_pmu; -- 2.20.1.97.g81188d93c3-goog