| // SPDX-License-Identifier: GPL-2.0-only | 
 | /* | 
 |  * Copyright 2014, Michael Ellerman, IBM Corp. | 
 |  */ | 
 |  | 
 | #include <stdio.h> | 
 | #include <stdlib.h> | 
 |  | 
 | #include "event.h" | 
 | #include "utils.h" | 
 |  | 
 | #define MALLOC_SIZE     (0x10000 * 10)  /* Ought to be enough .. */ | 
 |  | 
 | /* | 
 |  * Tests that the L3 bank handling is correct. We fixed it in commit e9aaac1. | 
 |  */ | 
 | static int l3_bank_test(void) | 
 | { | 
 | 	struct event event; | 
 | 	char *p; | 
 | 	int i; | 
 |  | 
 | 	// The L3 bank logic is only used on Power8 or later | 
 | 	SKIP_IF(!have_hwcap2(PPC_FEATURE2_ARCH_2_07)); | 
 |  | 
 | 	p = malloc(MALLOC_SIZE); | 
 | 	FAIL_IF(!p); | 
 |  | 
 | 	event_init(&event, 0x84918F); | 
 |  | 
 | 	FAIL_IF(event_open(&event)); | 
 |  | 
 | 	for (i = 0; i < MALLOC_SIZE; i += 0x10000) | 
 | 		p[i] = i; | 
 |  | 
 | 	event_read(&event); | 
 | 	event_report(&event); | 
 |  | 
 | 	FAIL_IF(event.result.running == 0); | 
 | 	FAIL_IF(event.result.enabled == 0); | 
 |  | 
 | 	event_close(&event); | 
 | 	free(p); | 
 |  | 
 | 	return 0; | 
 | } | 
 |  | 
 | int main(void) | 
 | { | 
 | 	return test_harness(l3_bank_test, "l3_bank_test"); | 
 | } |