1/* 2 * Copyright 2014, Michael Ellerman, IBM Corp. 3 * Licensed under GPLv2. 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 event_init(&event, 0x1001e); 20 event_leader_ebb_init(&event); 21 /* Expected to succeed */ 22 FAIL_IF(event_open(&event)); 23 event_close(&event); 24 25 26 event_init(&event, 0x001e); /* CYCLES - no PMC specified */ 27 event_leader_ebb_init(&event); 28 /* Expected to fail, no PMC specified */ 29 FAIL_IF(event_open(&event) == 0); 30 31 32 event_init(&event, 0x2001e); 33 event_leader_ebb_init(&event); 34 event.attr.exclusive = 0; 35 /* Expected to fail, not exclusive */ 36 FAIL_IF(event_open(&event) == 0); 37 38 39 event_init(&event, 0x3001e); 40 event_leader_ebb_init(&event); 41 event.attr.freq = 1; 42 /* Expected to fail, sets freq */ 43 FAIL_IF(event_open(&event) == 0); 44 45 46 event_init(&event, 0x4001e); 47 event_leader_ebb_init(&event); 48 event.attr.sample_period = 1; 49 /* Expected to fail, sets sample_period */ 50 FAIL_IF(event_open(&event) == 0); 51 52 53 event_init(&event, 0x1001e); 54 event_leader_ebb_init(&event); 55 event.attr.enable_on_exec = 1; 56 /* Expected to fail, sets enable_on_exec */ 57 FAIL_IF(event_open(&event) == 0); 58 59 60 event_init(&event, 0x1001e); 61 event_leader_ebb_init(&event); 62 event.attr.inherit = 1; 63 /* Expected to fail, sets inherit */ 64 FAIL_IF(event_open(&event) == 0); 65 66 67 event_init(&leader, 0x1001e); 68 event_leader_ebb_init(&leader); 69 FAIL_IF(event_open(&leader)); 70 71 event_init(&event, 0x20002); 72 event_ebb_init(&event); 73 74 /* Expected to succeed */ 75 FAIL_IF(event_open_with_group(&event, leader.fd)); 76 event_close(&leader); 77 event_close(&event); 78 79 80 event_init(&leader, 0x1001e); 81 event_leader_ebb_init(&leader); 82 FAIL_IF(event_open(&leader)); 83 84 event_init(&event, 0x20002); 85 86 /* Expected to fail, event doesn't request EBB, leader does */ 87 FAIL_IF(event_open_with_group(&event, leader.fd) == 0); 88 event_close(&leader); 89 90 91 event_init(&leader, 0x1001e); 92 event_leader_ebb_init(&leader); 93 /* Clear the EBB flag */ 94 leader.attr.config &= ~(1ull << 63); 95 96 FAIL_IF(event_open(&leader)); 97 98 event_init(&event, 0x20002); 99 event_ebb_init(&event); 100 101 /* Expected to fail, leader doesn't request EBB */ 102 FAIL_IF(event_open_with_group(&event, leader.fd) == 0); 103 event_close(&leader); 104 105 106 event_init(&leader, 0x1001e); 107 event_leader_ebb_init(&leader); 108 leader.attr.exclusive = 0; 109 /* Expected to fail, leader isn't exclusive */ 110 FAIL_IF(event_open(&leader) == 0); 111 112 113 event_init(&leader, 0x1001e); 114 event_leader_ebb_init(&leader); 115 leader.attr.pinned = 0; 116 /* Expected to fail, leader isn't pinned */ 117 FAIL_IF(event_open(&leader) == 0); 118 119 event_init(&event, 0x1001e); 120 event_leader_ebb_init(&event); 121 /* Expected to fail, not a task event */ 122 SKIP_IF(require_paranoia_below(1)); 123 FAIL_IF(event_open_with_cpu(&event, 0) == 0); 124 125 return 0; 126} 127 128int main(void) 129{ 130 return test_harness(event_attributes, "event_attributes"); 131} 132