xref: /linux/tools/testing/selftests/powerpc/pmu/l3_bank_test.c (revision 8e07e0e3964ca4e23ce7b68e2096fe660a888942)
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 "event.h"
10 #include "utils.h"
11 
12 #define MALLOC_SIZE     (0x10000 * 10)  /* Ought to be enough .. */
13 
14 /*
15  * Tests that the L3 bank handling is correct. We fixed it in commit e9aaac1.
16  */
17 static int l3_bank_test(void)
18 {
19 	struct event event;
20 	char *p;
21 	int i;
22 
23 	// The L3 bank logic is only used on Power8 or later
24 	SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07));
25 
26 	p = malloc(MALLOC_SIZE);
27 	FAIL_IF(!p);
28 
29 	event_init(&event, 0x84918F);
30 
31 	FAIL_IF(event_open(&event));
32 
33 	for (i = 0; i < MALLOC_SIZE; i += 0x10000)
34 		p[i] = i;
35 
36 	event_read(&event);
37 	event_report(&event);
38 
39 	FAIL_IF(event.result.running == 0);
40 	FAIL_IF(event.result.enabled == 0);
41 
42 	event_close(&event);
43 	free(p);
44 
45 	return 0;
46 }
47 
48 int main(void)
49 {
50 	return test_harness(l3_bank_test, "l3_bank_test");
51 }
52