cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

event_attributes_test.c (2992B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      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}