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
19static 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
51int main(void)
52{
53	return test_harness(group_constraint_mmcra_sample, "group_constraint_mmcra_sample");
54}
55