root/tools/testing/selftests/powerpc/pmu/l3_bank_test.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");
}