| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Copyright 2022, Kajol Jain, IBM Corp. |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| #include "../event.h" |
| #include "utils.h" |
| #include "../sampling_tests/misc.h" |
| |
| /* |
| * Load Missed L1, for power9 its pointing to PM_LD_MISS_L1_FIN (0x2c04e) and |
| * for power10 its pointing to PM_LD_MISS_L1 (0x3e054) |
| * |
| * Hardware cache level : PERF_COUNT_HW_CACHE_L1D |
| * Hardware cache event operation type : PERF_COUNT_HW_CACHE_OP_READ |
| * Hardware cache event result type : PERF_COUNT_HW_CACHE_RESULT_MISS |
| */ |
| #define EventCode_1 0x10000 |
| /* |
| * Hardware cache level : PERF_COUNT_HW_CACHE_L1D |
| * Hardware cache event operation type : PERF_COUNT_HW_CACHE_OP_WRITE |
| * Hardware cache event result type : PERF_COUNT_HW_CACHE_RESULT_ACCESS |
| */ |
| #define EventCode_2 0x0100 |
| /* |
| * Hardware cache level : PERF_COUNT_HW_CACHE_DTLB |
| * Hardware cache event operation type : PERF_COUNT_HW_CACHE_OP_WRITE |
| * Hardware cache event result type : PERF_COUNT_HW_CACHE_RESULT_ACCESS |
| */ |
| #define EventCode_3 0x0103 |
| /* |
| * Hardware cache level : PERF_COUNT_HW_CACHE_L1D |
| * Hardware cache event operation type : PERF_COUNT_HW_CACHE_OP_READ |
| * Hardware cache event result type : Invalid ( > PERF_COUNT_HW_CACHE_RESULT_MAX) |
| */ |
| #define EventCode_4 0x030000 |
| |
| /* |
| * A perf test to check valid hardware cache events. |
| */ |
| static int hw_cache_event_type_test(void) |
| { |
| struct event event; |
| |
| /* Check for platform support for the test */ |
| SKIP_IF(platform_check_for_tests()); |
| |
| /* Skip for Generic compat PMU */ |
| SKIP_IF(check_for_generic_compat_pmu()); |
| |
| /* Init the event to test hardware cache event */ |
| event_init_opts(&event, EventCode_1, PERF_TYPE_HW_CACHE, "event"); |
| |
| /* Expected to success as its pointing to L1 load miss */ |
| FAIL_IF(event_open(&event)); |
| event_close(&event); |
| |
| /* Init the event to test hardware cache event */ |
| event_init_opts(&event, EventCode_2, PERF_TYPE_HW_CACHE, "event"); |
| |
| /* Expected to fail as the corresponding cache event entry have 0 in that index */ |
| FAIL_IF(!event_open(&event)); |
| event_close(&event); |
| |
| /* Init the event to test hardware cache event */ |
| event_init_opts(&event, EventCode_3, PERF_TYPE_HW_CACHE, "event"); |
| |
| /* Expected to fail as the corresponding cache event entry have -1 in that index */ |
| FAIL_IF(!event_open(&event)); |
| event_close(&event); |
| |
| /* Init the event to test hardware cache event */ |
| event_init_opts(&event, EventCode_4, PERF_TYPE_HW_CACHE, "event"); |
| |
| /* Expected to fail as hardware cache event result type is Invalid */ |
| FAIL_IF(!event_open(&event)); |
| event_close(&event); |
| |
| return 0; |
| } |
| |
| int main(void) |
| { |
| return test_harness(hw_cache_event_type_test, "hw_cache_event_type_test"); |
| } |