forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/powerpc/pmu: Add selftest for group constraint check for PM…
…C5 and PMC6 Events using Performance Monitor Counter 5 (PMC5) and Performance Monitor Counter 6 (PMC6) can't have other fields in event code like cache bits, thresholding or marked bit. PMC5 and PMC6 only supports base events: ie 500fa and 600f4. Other combinations should fail. Testcase tries setting other bits in event code for 500fa and 600f4 to check this scenario. Signed-off-by: Athira Rajeev <[email protected]> Signed-off-by: Michael Ellerman <[email protected]> Link: https://lore.kernel.org/r/[email protected]
- Loading branch information
1 parent
0a110a4
commit 9258c0a
Showing
2 changed files
with
64 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
63 changes: 63 additions & 0 deletions
63
tools/testing/selftests/powerpc/pmu/event_code_tests/group_constraint_pmc56_test.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
/* | ||
* Copyright 2022, Athira Rajeev, IBM Corp. | ||
*/ | ||
|
||
#include <stdio.h> | ||
#include "../event.h" | ||
#include "../sampling_tests/misc.h" | ||
|
||
/* | ||
* Testcase for checking constraint checks for | ||
* Performance Monitor Counter 5 (PMC5) and also | ||
* Performance Monitor Counter 6 (PMC6). Events using | ||
* PMC5/PMC6 shouldn't have other fields in event | ||
* code like cache bits, thresholding or marked bit. | ||
*/ | ||
|
||
static int group_constraint_pmc56(void) | ||
{ | ||
struct event event; | ||
|
||
/* Check for platform support for the test */ | ||
SKIP_IF(platform_check_for_tests()); | ||
|
||
/* | ||
* Events using PMC5 and PMC6 with cache bit | ||
* set in event code is expected to fail. | ||
*/ | ||
event_init(&event, 0x2500fa); | ||
FAIL_IF(!event_open(&event)); | ||
|
||
event_init(&event, 0x2600f4); | ||
FAIL_IF(!event_open(&event)); | ||
|
||
/* | ||
* PMC5 and PMC6 only supports base events: | ||
* ie 500fa and 600f4. Other combinations | ||
* should fail. | ||
*/ | ||
event_init(&event, 0x501e0); | ||
FAIL_IF(!event_open(&event)); | ||
|
||
event_init(&event, 0x6001e); | ||
FAIL_IF(!event_open(&event)); | ||
|
||
event_init(&event, 0x501fa); | ||
FAIL_IF(!event_open(&event)); | ||
|
||
/* | ||
* Events using PMC5 and PMC6 with random | ||
* sampling bits set in event code should fail | ||
* to schedule. | ||
*/ | ||
event_init(&event, 0x35340500fa); | ||
FAIL_IF(!event_open(&event)); | ||
|
||
return 0; | ||
} | ||
|
||
int main(void) | ||
{ | ||
return test_harness(group_constraint_pmc56, "group_constraint_pmc56"); | ||
} |