1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright 2022, Athira Rajeev, IBM Corp.
4 */
5
6#include <stdio.h>
7#include "../event.h"
8#include "../sampling_tests/misc.h"
9
10/* The processor's L1 data cache was reloaded */
11#define EventCode1 0x21C040
12#define EventCode2 0x22C040
13
14/*
15 * Testcase for group constraint check
16 * when using events with same PMC.
17 * Multiple events in a group shouldn't
18 * ask for same PMC. If so it should fail.
19 */
20
21static int group_constraint_repeat(void)
22{
23	struct event event, leader;
24
25	/* Check for platform support for the test */
26	SKIP_IF(platform_check_for_tests());
27
28	/*
29	 * Two events in a group using same PMC
30	 * should fail to get scheduled. Usei same PMC2
31	 * for leader and sibling event which is expected
32	 * to fail.
33	 */
34	event_init(&leader, EventCode1);
35	FAIL_IF(event_open(&leader));
36
37	event_init(&event, EventCode1);
38
39	/* Expected to fail since sibling event is requesting same PMC as leader */
40	FAIL_IF(!event_open_with_group(&event, leader.fd));
41
42	event_init(&event, EventCode2);
43
44	/* Expected to pass since sibling event is requesting different PMC */
45	FAIL_IF(event_open_with_group(&event, leader.fd));
46
47	event_close(&leader);
48	event_close(&event);
49
50	return 0;
51}
52
53int main(void)
54{
55	return test_harness(group_constraint_repeat, "group_constraint_repeat");
56}
57