File Index
Files and directories
Sign in
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 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.