linux/tools/testing/selftests/powerpc/pmu/ebb/event_attributes_test.c
<<
>>
Prefs
   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}
 134