]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf test: Move PERF_SAMPLE_WEIGHT_STRUCT parsing to common test
authorIan Rogers <irogers@google.com>
Thu, 24 Jul 2025 16:33:01 +0000 (09:33 -0700)
committerNamhyung Kim <namhyung@kernel.org>
Fri, 25 Jul 2025 17:37:58 +0000 (10:37 -0700)
test__x86_sample_parsing is identical to test__sample_parsing except
it explicitly tested PERF_SAMPLE_WEIGHT_STRUCT. Now the parsing code
is common move the PERF_SAMPLE_WEIGHT_STRUCT to the common sample
parsing test and remove the x86 version.

Signed-off-by: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250724163302.596743-22-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/arch/x86/include/arch-tests.h
tools/perf/arch/x86/tests/Build
tools/perf/arch/x86/tests/arch-tests.c
tools/perf/arch/x86/tests/sample-parsing.c [deleted file]
tools/perf/tests/sample-parsing.c

index 8713e9122d4c66c7c366be04153dba81b32c1837..7d65b9e518407d1f8cd7ee301f7e676fe68064a8 100644 (file)
@@ -14,7 +14,6 @@ int test__insn_x86(struct test_suite *test, int subtest);
 int test__intel_pt_pkt_decoder(struct test_suite *test, int subtest);
 int test__intel_pt_hybrid_compat(struct test_suite *test, int subtest);
 int test__bp_modify(struct test_suite *test, int subtest);
-int test__x86_sample_parsing(struct test_suite *test, int subtest);
 int test__amd_ibs_via_core_pmu(struct test_suite *test, int subtest);
 int test__amd_ibs_period(struct test_suite *test, int subtest);
 int test__hybrid(struct test_suite *test, int subtest);
index 311b6b53d3d84d8db98ed7d7056226ec8079e97a..7790b3e20f4e40a8a683b4fff3e3bea2f7de30b8 100644 (file)
@@ -2,7 +2,6 @@ perf-test-$(CONFIG_DWARF_UNWIND) += regs_load.o
 perf-test-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
 
 perf-test-y += arch-tests.o
-perf-test-y += sample-parsing.o
 perf-test-y += hybrid.o
 perf-test-$(CONFIG_AUXTRACE) += intel-pt-test.o
 ifeq ($(CONFIG_EXTRA_TESTS),y)
index 29ec1861ccefd3b9e8fb37a58efd8cc451a5e39c..8f9cfeaa170ff7f47c3a13c00ed3f856f02ce169 100644 (file)
@@ -23,7 +23,6 @@ struct test_suite suite__intel_pt = {
 #if defined(__x86_64__)
 DEFINE_SUITE("x86 bp modify", bp_modify);
 #endif
-DEFINE_SUITE("x86 Sample parsing", x86_sample_parsing);
 DEFINE_SUITE("AMD IBS via core pmu", amd_ibs_via_core_pmu);
 DEFINE_SUITE_EXCLUSIVE("AMD IBS sample period", amd_ibs_period);
 static struct test_case hybrid_tests[] = {
@@ -49,7 +48,6 @@ struct test_suite *arch_tests[] = {
 #if defined(__x86_64__)
        &suite__bp_modify,
 #endif
-       &suite__x86_sample_parsing,
        &suite__amd_ibs_via_core_pmu,
        &suite__amd_ibs_period,
        &suite__hybrid,
diff --git a/tools/perf/arch/x86/tests/sample-parsing.c b/tools/perf/arch/x86/tests/sample-parsing.c
deleted file mode 100644 (file)
index 22feec2..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-#include <stdbool.h>
-#include <inttypes.h>
-#include <stdlib.h>
-#include <string.h>
-#include <linux/bitops.h>
-#include <linux/kernel.h>
-#include <linux/types.h>
-
-#include "event.h"
-#include "evsel.h"
-#include "debug.h"
-#include "util/sample.h"
-#include "util/synthetic-events.h"
-
-#include "tests/tests.h"
-#include "arch-tests.h"
-
-#define COMP(m) do {                                   \
-       if (s1->m != s2->m) {                           \
-               pr_debug("Samples differ at '"#m"'\n"); \
-               return false;                           \
-       }                                               \
-} while (0)
-
-static bool samples_same(const struct perf_sample *s1,
-                        const struct perf_sample *s2,
-                        u64 type)
-{
-       if (type & PERF_SAMPLE_WEIGHT_STRUCT) {
-               COMP(ins_lat);
-               COMP(weight3);
-       }
-
-       return true;
-}
-
-static int do_test(u64 sample_type)
-{
-       struct evsel evsel = {
-               .needs_swap = false,
-               .core = {
-                       . attr = {
-                               .sample_type = sample_type,
-                               .read_format = 0,
-                       },
-               },
-       };
-       union perf_event *event;
-       struct perf_sample sample = {
-               .weight         = 101,
-               .ins_lat        = 102,
-               .weight3        = 103,
-       };
-       struct perf_sample sample_out;
-       size_t i, sz, bufsz;
-       int err, ret = -1;
-
-       sz = perf_event__sample_event_size(&sample, sample_type, 0);
-       bufsz = sz + 4096; /* Add a bit for overrun checking */
-       event = malloc(bufsz);
-       if (!event) {
-               pr_debug("malloc failed\n");
-               return -1;
-       }
-
-       memset(event, 0xff, bufsz);
-       event->header.type = PERF_RECORD_SAMPLE;
-       event->header.misc = 0;
-       event->header.size = sz;
-
-       err = perf_event__synthesize_sample(event, sample_type, 0, &sample);
-       if (err) {
-               pr_debug("%s failed for sample_type %#"PRIx64", error %d\n",
-                        "perf_event__synthesize_sample", sample_type, err);
-               goto out_free;
-       }
-
-       /* The data does not contain 0xff so we use that to check the size */
-       for (i = bufsz; i > 0; i--) {
-               if (*(i - 1 + (u8 *)event) != 0xff)
-                       break;
-       }
-       if (i != sz) {
-               pr_debug("Event size mismatch: actual %zu vs expected %zu\n",
-                        i, sz);
-               goto out_free;
-       }
-
-       evsel.sample_size = __evsel__sample_size(sample_type);
-
-       err = evsel__parse_sample(&evsel, event, &sample_out);
-       if (err) {
-               pr_debug("%s failed for sample_type %#"PRIx64", error %d\n",
-                        "evsel__parse_sample", sample_type, err);
-               goto out_free;
-       }
-
-       if (!samples_same(&sample, &sample_out, sample_type)) {
-               pr_debug("parsing failed for sample_type %#"PRIx64"\n",
-                        sample_type);
-               goto out_free;
-       }
-
-       ret = 0;
-out_free:
-       free(event);
-
-       return ret;
-}
-
-/**
- * test__x86_sample_parsing - test X86 specific sample parsing
- *
- * This function implements a test that synthesizes a sample event, parses it
- * and then checks that the parsed sample matches the original sample. If the
- * test passes %0 is returned, otherwise %-1 is returned.
- *
- * For now, the PERF_SAMPLE_WEIGHT_STRUCT is the only X86 specific sample type.
- * The test only checks the PERF_SAMPLE_WEIGHT_STRUCT type.
- */
-int test__x86_sample_parsing(struct test_suite *test __maybe_unused, int subtest __maybe_unused)
-{
-       return do_test(PERF_SAMPLE_WEIGHT_STRUCT);
-}
index 72411580f86988162637ce1706b53ecb405c543c..a7327c942ca209ccf26be47af5ece753b9488ba2 100644 (file)
@@ -152,6 +152,12 @@ static bool samples_same(struct perf_sample *s1,
        if (type & PERF_SAMPLE_WEIGHT)
                COMP(weight);
 
+       if (type & PERF_SAMPLE_WEIGHT_STRUCT) {
+               COMP(weight);
+               COMP(ins_lat);
+               COMP(weight3);
+       }
+
        if (type & PERF_SAMPLE_DATA_SRC)
                COMP(data_src);
 
@@ -269,6 +275,8 @@ static int do_test(u64 sample_type, u64 sample_regs, u64 read_format)
                .cgroup         = 114,
                .data_page_size = 115,
                .code_page_size = 116,
+               .ins_lat        = 117,
+               .weight3        = 118,
                .aux_sample     = {
                        .size   = sizeof(aux_data),
                        .data   = (void *)aux_data,
@@ -439,6 +447,12 @@ static int test__sample_parsing(struct test_suite *test __maybe_unused, int subt
                if (err)
                        return err;
        }
+       sample_type = (PERF_SAMPLE_MAX - 1) & ~PERF_SAMPLE_WEIGHT_STRUCT;
+       for (i = 0; i < ARRAY_SIZE(rf); i++) {
+               err = do_test(sample_type, sample_regs, rf[i]);
+               if (err)
+                       return err;
+       }
 
        return 0;
 }