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 #define EventCode_1 0x35340401e0
11 #define EventCode_2 0x353c0101ec
12 #define EventCode_3 0x35340101ec
13 /*
14  * Test that using different sample bits in
15  * event code cause failure in schedule for
16  * group of events.
17  */
18 
19 static int group_constraint_mmcra_sample(void)
20 {
21 	struct event event, leader;
22 
23 	SKIP_IF(platform_check_for_tests());
24 
25 	/*
26 	 * Events with different "sample" field values
27 	 * in a group will fail to schedule.
28 	 * Use event with load only sampling mode as
29 	 * group leader. Use event with store only sampling
30 	 * as sibling event.
31 	 */
32 	event_init(&leader, EventCode_1);
33 	FAIL_IF(event_open(&leader));
34 
35 	event_init(&event, EventCode_2);
36 
37 	/* Expected to fail as sibling event doesn't use same sampling bits as leader */
38 	FAIL_IF(!event_open_with_group(&event, leader.fd));
39 
40 	event_init(&event, EventCode_3);
41 
42 	/* Expected to pass as sibling event use same sampling bits as leader */
43 	FAIL_IF(event_open_with_group(&event, leader.fd));
44 
45 	event_close(&leader);
46 	event_close(&event);
47 
48 	return 0;
49 }
50 
51 int main(void)
52 {
53 	return test_harness(group_constraint_mmcra_sample, "group_constraint_mmcra_sample");
54 }
55