Home | History | Annotate | Download | only in ebb
      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  */
     15 int 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 
    130 int main(void)
    131 {
    132 	return test_harness(event_attributes, "event_attributes");
    133 }
    134