134 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Copyright 2014, Michael Ellerman, IBM Corp.4 */5 6#include <stdio.h>7#include <stdlib.h>8 9#include "ebb.h"10 11 12/*13 * Test various attributes of the EBB event are enforced.14 */15int event_attributes(void)16{17 struct event event, leader;18 19 SKIP_IF(!ebb_is_supported());20 21 event_init(&event, 0x1001e);22 event_leader_ebb_init(&event);23 /* Expected to succeed */24 FAIL_IF(event_open(&event));25 event_close(&event);26 27 28 event_init(&event, 0x001e); /* CYCLES - no PMC specified */29 event_leader_ebb_init(&event);30 /* Expected to fail, no PMC specified */31 FAIL_IF(event_open(&event) == 0);32 33 34 event_init(&event, 0x2001e);35 event_leader_ebb_init(&event);36 event.attr.exclusive = 0;37 /* Expected to fail, not exclusive */38 FAIL_IF(event_open(&event) == 0);39 40 41 event_init(&event, 0x3001e);42 event_leader_ebb_init(&event);43 event.attr.freq = 1;44 /* Expected to fail, sets freq */45 FAIL_IF(event_open(&event) == 0);46 47 48 event_init(&event, 0x4001e);49 event_leader_ebb_init(&event);50 event.attr.sample_period = 1;51 /* Expected to fail, sets sample_period */52 FAIL_IF(event_open(&event) == 0);53 54 55 event_init(&event, 0x1001e);56 event_leader_ebb_init(&event);57 event.attr.enable_on_exec = 1;58 /* Expected to fail, sets enable_on_exec */59 FAIL_IF(event_open(&event) == 0);60 61 62 event_init(&event, 0x1001e);63 event_leader_ebb_init(&event);64 event.attr.inherit = 1;65 /* Expected to fail, sets inherit */66 FAIL_IF(event_open(&event) == 0);67 68 69 event_init(&leader, 0x1001e);70 event_leader_ebb_init(&leader);71 FAIL_IF(event_open(&leader));72 73 event_init(&event, 0x20002);74 event_ebb_init(&event);75 76 /* Expected to succeed */77 FAIL_IF(event_open_with_group(&event, leader.fd));78 event_close(&leader);79 event_close(&event);80 81 82 event_init(&leader, 0x1001e);83 event_leader_ebb_init(&leader);84 FAIL_IF(event_open(&leader));85 86 event_init(&event, 0x20002);87 88 /* Expected to fail, event doesn't request EBB, leader does */89 FAIL_IF(event_open_with_group(&event, leader.fd) == 0);90 event_close(&leader);91 92 93 event_init(&leader, 0x1001e);94 event_leader_ebb_init(&leader);95 /* Clear the EBB flag */96 leader.attr.config &= ~(1ull << 63);97 98 FAIL_IF(event_open(&leader));99 100 event_init(&event, 0x20002);101 event_ebb_init(&event);102 103 /* Expected to fail, leader doesn't request EBB */104 FAIL_IF(event_open_with_group(&event, leader.fd) == 0);105 event_close(&leader);106 107 108 event_init(&leader, 0x1001e);109 event_leader_ebb_init(&leader);110 leader.attr.exclusive = 0;111 /* Expected to fail, leader isn't exclusive */112 FAIL_IF(event_open(&leader) == 0);113 114 115 event_init(&leader, 0x1001e);116 event_leader_ebb_init(&leader);117 leader.attr.pinned = 0;118 /* Expected to fail, leader isn't pinned */119 FAIL_IF(event_open(&leader) == 0);120 121 event_init(&event, 0x1001e);122 event_leader_ebb_init(&event);123 /* Expected to fail, not a task event */124 SKIP_IF(require_paranoia_below(1));125 FAIL_IF(event_open_with_cpu(&event, 0) == 0);126 127 return 0;128}129 130int main(void)131{132 return test_harness(event_attributes, "event_attributes");133}134