| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Copyright 2022, Athira Rajeev, IBM Corp. |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| #include "../event.h" |
| #include "misc.h" |
| #include "utils.h" |
| |
| /* |
| * A perf sampling test for making sure |
| * sampling with -intr-regs doesn't crash |
| * in any environment, say: |
| * - With generic compat PMU |
| * - without any PMU registered |
| * - With platform specific PMU. |
| * A fix for crash with intr_regs was |
| * addressed in commit: f75e7d73bdf7 in kernel. |
| * |
| * This testcase exercises this code path by doing |
| * intr_regs using software event. Software event is |
| * used since s/w event will work even in platform |
| * without PMU. |
| */ |
| static int intr_regs_no_crash_wo_pmu_test(void) |
| { |
| struct event event; |
| |
| /* |
| * Init the event for the sampling test. |
| * This uses software event which works on |
| * any platform. |
| */ |
| event_init_opts(&event, 0, PERF_TYPE_SOFTWARE, "cycles"); |
| |
| event.attr.sample_period = 1000; |
| event.attr.sample_type = PERF_SAMPLE_REGS_INTR; |
| event.attr.disabled = 1; |
| |
| /* |
| * Return code of event_open is not considered |
| * since test just expects no crash from using |
| * PERF_SAMPLE_REGS_INTR. |
| */ |
| event_open(&event); |
| |
| event_close(&event); |
| return 0; |
| } |
| |
| int main(void) |
| { |
| return test_harness(intr_regs_no_crash_wo_pmu_test, "intr_regs_no_crash_wo_pmu_test"); |
| } |