| // 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"); |
| } |