linux/tools/testing/selftests/powerpc/pmu/ebb/cycles_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 * Basic test that counts user cycles and takes EBBs.
  14 */
  15int cycles(void)
  16{
  17        struct event event;
  18
  19        SKIP_IF(!ebb_is_supported());
  20
  21        event_init_named(&event, 0x1001e, "cycles");
  22        event_leader_ebb_init(&event);
  23
  24        event.attr.exclude_kernel = 1;
  25        event.attr.exclude_hv = 1;
  26        event.attr.exclude_idle = 1;
  27
  28        FAIL_IF(event_open(&event));
  29
  30        ebb_enable_pmc_counting(1);
  31        setup_ebb_handler(standard_ebb_callee);
  32        ebb_global_enable();
  33        FAIL_IF(ebb_event_enable(&event));
  34
  35        mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
  36
  37        while (ebb_state.stats.ebb_count < 10) {
  38                FAIL_IF(core_busy_loop());
  39                FAIL_IF(ebb_check_mmcr0());
  40        }
  41
  42        ebb_global_disable();
  43        ebb_freeze_pmcs();
  44
  45        dump_ebb_state();
  46
  47        event_close(&event);
  48
  49        FAIL_IF(ebb_state.stats.ebb_count == 0);
  50        FAIL_IF(!ebb_check_count(1, sample_period, 100));
  51
  52        return 0;
  53}
  54
  55int main(void)
  56{
  57        return test_harness(cycles, "cycles");
  58}
  59