FILE
generic_events_valid_test.c
File preview with syntax highlighting.
linux-6.19.14/tools/testing/selftests/powerpc/pmu/event_code_tests/generic_events_valid_test.c
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright 2022, Athira Rajeev, IBM Corp. 4 */ 5 6#include <stdio.h> 7#include <sys/prctl.h> 8#include <limits.h> 9#include "../event.h" 10#include "../sampling_tests/misc.h" 11 12/* 13 * Testcase to ensure that using invalid event in generic 14 * event for PERF_TYPE_HARDWARE should fail 15 */ 16 17static int generic_events_valid_test(void) 18{ 19 struct event event; 20 int pvr = mfspr(SPRN_PVR); 21 22 /* Check for platform support for the test */ 23 SKIP_IF(platform_check_for_tests()); 24 25 /* generic events is different in compat_mode */ 26 SKIP_IF(check_for_generic_compat_pmu()); 27 28 /* 29 * Invalid generic events in power10: 30 * - PERF_COUNT_HW_BUS_CYCLES 31 * - PERF_COUNT_HW_STALLED_CYCLES_FRONTEND 32 * - PERF_COUNT_HW_STALLED_CYCLES_BACKEND 33 * - PERF_COUNT_HW_REF_CPU_CYCLES 34 */ 35 if ((pvr == POWER10) || (pvr == POWER11)) { 36 event_init_opts(&event, PERF_COUNT_HW_CPU_CYCLES, PERF_TYPE_HARDWARE, "event"); 37 FAIL_IF(event_open(&event)); 38 event_close(&event); 39 40 event_init_opts(&event, PERF_COUNT_HW_INSTRUCTIONS, 41 PERF_TYPE_HARDWARE, "event"); 42 FAIL_IF(event_open(&event)); 43 event_close(&event); 44 45 event_init_opts(&event, PERF_COUNT_HW_CACHE_REFERENCES, 46 PERF_TYPE_HARDWARE, "event"); 47 FAIL_IF(event_open(&event)); 48 event_close(&event); 49 50 event_init_opts(&event, PERF_COUNT_HW_CACHE_MISSES, PERF_TYPE_HARDWARE, "event"); 51 FAIL_IF(event_open(&event)); 52 event_close(&event); 53 54 event_init_opts(&event, PERF_COUNT_HW_BRANCH_INSTRUCTIONS, 55 PERF_TYPE_HARDWARE, "event"); 56 FAIL_IF(event_open(&event)); 57 event_close(&event); 58 59 event_init_opts(&event, PERF_COUNT_HW_BRANCH_MISSES, PERF_TYPE_HARDWARE, "event"); 60 FAIL_IF(event_open(&event)); 61 event_close(&event); 62 63 event_init_opts(&event, PERF_COUNT_HW_BUS_CYCLES, PERF_TYPE_HARDWARE, "event"); 64 FAIL_IF(!event_open(&event)); 65 66 event_init_opts(&event, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND, 67 PERF_TYPE_HARDWARE, "event"); 68 FAIL_IF(!event_open(&event)); 69 70 event_init_opts(&event, PERF_COUNT_HW_STALLED_CYCLES_BACKEND, 71 PERF_TYPE_HARDWARE, "event"); 72 FAIL_IF(!event_open(&event)); 73 74 event_init_opts(&event, PERF_COUNT_HW_REF_CPU_CYCLES, PERF_TYPE_HARDWARE, "event"); 75 FAIL_IF(!event_open(&event)); 76 } else if (PVR_VER(mfspr(SPRN_PVR)) == POWER9) { 77 /* 78 * Invalid generic events in power9: 79 * - PERF_COUNT_HW_BUS_CYCLES 80 * - PERF_COUNT_HW_REF_CPU_CYCLES 81 */ 82 event_init_opts(&event, PERF_COUNT_HW_CPU_CYCLES, PERF_TYPE_HARDWARE, "event"); 83 FAIL_IF(event_open(&event)); 84 event_close(&event); 85 86 event_init_opts(&event, PERF_COUNT_HW_INSTRUCTIONS, PERF_TYPE_HARDWARE, "event"); 87 FAIL_IF(event_open(&event)); 88 event_close(&event); 89 90 event_init_opts(&event, PERF_COUNT_HW_CACHE_REFERENCES, 91 PERF_TYPE_HARDWARE, "event"); 92 FAIL_IF(event_open(&event)); 93 event_close(&event); 94 95 event_init_opts(&event, PERF_COUNT_HW_CACHE_MISSES, PERF_TYPE_HARDWARE, "event"); 96 FAIL_IF(event_open(&event)); 97 event_close(&event); 98 99 event_init_opts(&event, PERF_COUNT_HW_BRANCH_INSTRUCTIONS, 100 PERF_TYPE_HARDWARE, "event"); 101 FAIL_IF(event_open(&event)); 102 event_close(&event); 103 104 event_init_opts(&event, PERF_COUNT_HW_BRANCH_MISSES, PERF_TYPE_HARDWARE, "event"); 105 FAIL_IF(event_open(&event)); 106 event_close(&event); 107 108 event_init_opts(&event, PERF_COUNT_HW_BUS_CYCLES, PERF_TYPE_HARDWARE, "event"); 109 FAIL_IF(!event_open(&event)); 110 111 event_init_opts(&event, PERF_COUNT_HW_STALLED_CYCLES_FRONTEND, 112 PERF_TYPE_HARDWARE, "event"); 113 FAIL_IF(event_open(&event)); 114 event_close(&event); 115 116 event_init_opts(&event, PERF_COUNT_HW_STALLED_CYCLES_BACKEND, 117 PERF_TYPE_HARDWARE, "event"); 118 FAIL_IF(event_open(&event)); 119 event_close(&event); 120 121 event_init_opts(&event, PERF_COUNT_HW_REF_CPU_CYCLES, PERF_TYPE_HARDWARE, "event"); 122 FAIL_IF(!event_open(&event)); 123 } 124 125 return 0; 126} 127 128int main(void) 129{ 130 return test_harness(generic_events_valid_test, "generic_events_valid_test"); 131}
~/
Read-only file preview.