// SPDX-License-Identifier: GPL-2.0-only /* * Copyright 2022, Kajol Jain, IBM Corp. */ #include #include #include "../event.h" #include "utils.h" #include "../sampling_tests/misc.h" /* All successful D-side store dispatches for this thread */ #define EventCode_1 0x010000046080 /* All successful D-side store dispatches for this thread that were L2 Miss */ #define EventCode_2 0x26880 /* All successful D-side store dispatches for this thread that were L2 Miss */ #define EventCode_3 0x010000026880 /* * Testcase for group constraint check of l2l3_sel bits which is * used to program l2l3 select field in Monitor Mode Control Register 0 * (MMCR0: 56-60). * All events in the group should match l2l3_sel bits otherwise * event_open for the group should fail. */ static int group_constraint_l2l3_sel(void) { struct event event, leader; /* * Check for platform support for the test. * This test is only aplicable on power10 */ SKIP_IF(platform_check_for_tests()); SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_3_1)); /* Init the events for the group contraint check for l2l3_sel bits */ event_init(&leader, EventCode_1); FAIL_IF(event_open(&leader)); event_init(&event, EventCode_2); /* Expected to fail as sibling event doesn't request same l2l3_sel bits as leader */ FAIL_IF(!event_open_with_group(&event, leader.fd)); event_close(&event); /* Init the event for the group contraint l2l3_sel test */ event_init(&event, EventCode_3); /* Expected to succeed as sibling event request same l2l3_sel bits as leader */ FAIL_IF(event_open_with_group(&event, leader.fd)); event_close(&leader); event_close(&event); return 0; } int main(void) { return test_harness(group_constraint_l2l3_sel, "group_constraint_l2l3_sel"); }