// SPDX-License-Identifier: GPL-2.0-only /* * Copyright 2022, Athira Rajeev, IBM Corp. */ #include <stdio.h> #include "../event.h" #include <sys/prctl.h> #include <limits.h> #include "../sampling_tests/misc.h" /* * Testcase for group constraint check for * Performance Monitor Counter 5 (PMC5) and also * Performance Monitor Counter 6 (PMC6). * Test that pmc5/6 is excluded from constraint * check when scheduled along with group of events. */ static int group_pmc56_exclude_constraints(void) { struct event *e, events[3]; int i; /* Check for platform support for the test */ SKIP_IF(platform_check_for_tests()); /* * PMC5/6 is excluded from constraint bit * check along with group of events. Use * group of events with PMC5, PMC6 and also * event with cache bit (dc_ic) set. Test expects * this set of events to go in as a group. */ e = &events[0]; event_init(e, 0x500fa); e = &events[1]; event_init(e, 0x600f4); e = &events[2]; event_init(e, 0x22C040); FAIL_IF(event_open(&events[0])); /* * The event_open will fail if constraint check fails. * Since we are asking for events in a group and since * PMC5/PMC6 is excluded from group constraints, even_open * should pass. */ for (i = 1; i < 3; i++) FAIL_IF(event_open_with_group(&events[i], events[0].fd)); for (i = 0; i < 3; i++) event_close(&events[i]); return 0; } int main(void) { return test_harness(group_pmc56_exclude_constraints, "group_pmc56_exclude_constraints"); }