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

no_handler_test.c (1157B)


      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#include <setjmp.h>
      9#include <signal.h>
     10
     11#include "ebb.h"
     12
     13
     14/* Test that things work sanely if we have no handler */
     15
     16static int no_handler_test(void)
     17{
     18	struct event event;
     19	u64 val;
     20	int i;
     21
     22	SKIP_IF(!ebb_is_supported());
     23
     24	event_init_named(&event, 0x1001e, "cycles");
     25	event_leader_ebb_init(&event);
     26
     27	event.attr.exclude_kernel = 1;
     28	event.attr.exclude_hv = 1;
     29	event.attr.exclude_idle = 1;
     30
     31	FAIL_IF(event_open(&event));
     32	FAIL_IF(ebb_event_enable(&event));
     33
     34	val = mfspr(SPRN_EBBHR);
     35	FAIL_IF(val != 0);
     36
     37	/* Make sure it overflows quickly */
     38	sample_period = 1000;
     39	mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
     40
     41	/* Spin to make sure the event has time to overflow */
     42	for (i = 0; i < 1000; i++)
     43		mb();
     44
     45	dump_ebb_state();
     46
     47	/* We expect to see the PMU frozen & PMAO set */
     48	val = mfspr(SPRN_MMCR0);
     49	FAIL_IF(val != 0x0000000080000080);
     50
     51	event_close(&event);
     52
     53	/* The real test is that we never took an EBB at 0x0 */
     54
     55	return 0;
     56}
     57
     58int main(void)
     59{
     60	return test_harness(no_handler_test,"no_handler_test");
     61}