59 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0-only
 | |
| /*
 | |
|  * Copyright 2014, Michael Ellerman, IBM Corp.
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| #include "ebb.h"
 | |
| 
 | |
| 
 | |
| /*
 | |
|  * Basic test that counts user cycles and takes EBBs.
 | |
|  */
 | |
| int cycles(void)
 | |
| {
 | |
| 	struct event event;
 | |
| 
 | |
| 	SKIP_IF(!ebb_is_supported());
 | |
| 
 | |
| 	event_init_named(&event, 0x1001e, "cycles");
 | |
| 	event_leader_ebb_init(&event);
 | |
| 
 | |
| 	event.attr.exclude_kernel = 1;
 | |
| 	event.attr.exclude_hv = 1;
 | |
| 	event.attr.exclude_idle = 1;
 | |
| 
 | |
| 	FAIL_IF(event_open(&event));
 | |
| 
 | |
| 	ebb_enable_pmc_counting(1);
 | |
| 	setup_ebb_handler(standard_ebb_callee);
 | |
| 	ebb_global_enable();
 | |
| 	FAIL_IF(ebb_event_enable(&event));
 | |
| 
 | |
| 	mtspr(SPRN_PMC1, pmc_sample_period(sample_period));
 | |
| 
 | |
| 	while (ebb_state.stats.ebb_count < 10) {
 | |
| 		FAIL_IF(core_busy_loop());
 | |
| 		FAIL_IF(ebb_check_mmcr0());
 | |
| 	}
 | |
| 
 | |
| 	ebb_global_disable();
 | |
| 	ebb_freeze_pmcs();
 | |
| 
 | |
| 	dump_ebb_state();
 | |
| 
 | |
| 	event_close(&event);
 | |
| 
 | |
| 	FAIL_IF(ebb_state.stats.ebb_count == 0);
 | |
| 	FAIL_IF(!ebb_check_count(1, sample_period, 100));
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int main(void)
 | |
| {
 | |
| 	return test_harness(cycles, "cycles");
 | |
| }
 |