| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Copyright 2022, Athira Rajeev, IBM Corp. |
| */ |
| |
| #include <stdio.h> |
| #include "../event.h" |
| #include "../sampling_tests/misc.h" |
| |
| /* |
| * Testcase for number of counters in use. |
| * The number of programmable counters is from |
| * performance monitor counter 1 to performance |
| * monitor counter 4 (PMC1-PMC4). If number of |
| * counters in use exceeds the limit, next event |
| * should fail to schedule. |
| */ |
| |
| static int group_constraint_pmc_count(void) |
| { |
| struct event *e, events[5]; |
| int i; |
| |
| /* Check for platform support for the test */ |
| SKIP_IF(platform_check_for_tests()); |
| |
| /* |
| * Test for number of counters in use. |
| * Use PMC1 to PMC4 for leader and 3 sibling |
| * events. Trying to open fourth event should |
| * fail here. |
| */ |
| e = &events[0]; |
| event_init(e, 0x1001a); |
| |
| e = &events[1]; |
| event_init(e, 0x200fc); |
| |
| e = &events[2]; |
| event_init(e, 0x30080); |
| |
| e = &events[3]; |
| event_init(e, 0x40054); |
| |
| e = &events[4]; |
| event_init(e, 0x0002c); |
| |
| FAIL_IF(event_open(&events[0])); |
| |
| /* |
| * The event_open will fail on event 4 if constraint |
| * check fails |
| */ |
| for (i = 1; i < 5; i++) { |
| if (i == 4) |
| FAIL_IF(!event_open_with_group(&events[i], events[0].fd)); |
| else |
| FAIL_IF(event_open_with_group(&events[i], events[0].fd)); |
| } |
| |
| for (i = 1; i < 4; i++) |
| event_close(&events[i]); |
| |
| return 0; |
| } |
| |
| int main(void) |
| { |
| return test_harness(group_constraint_pmc_count, "group_constraint_pmc_count"); |
| } |