52 lines
903 B
C
52 lines
903 B
C
|
// 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");
|
||
|
}
|