From: Benjamin Gray <bgray@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Benjamin Gray <bgray@linux.ibm.com>
Subject: [PATCH v1 7/9] selftests/powerpc/dexcr: Add DEXCR config details to lsdexcr
Date: Wed, 17 Apr 2024 21:23:23 +1000 [thread overview]
Message-ID: <20240417112325.728010-8-bgray@linux.ibm.com> (raw)
In-Reply-To: <20240417112325.728010-1-bgray@linux.ibm.com>
Now that the DEXCR can be configured with prctl, add a section in
lsdexcr that explains why each aspect is set the way it is.
Signed-off-by: Benjamin Gray <bgray@linux.ibm.com>
---
.../testing/selftests/powerpc/dexcr/lsdexcr.c | 113 +++++++++++++++++-
1 file changed, 111 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/powerpc/dexcr/lsdexcr.c b/tools/testing/selftests/powerpc/dexcr/lsdexcr.c
index 94abbfcc389e..a63db47b6610 100644
--- a/tools/testing/selftests/powerpc/dexcr/lsdexcr.c
+++ b/tools/testing/selftests/powerpc/dexcr/lsdexcr.c
@@ -1,9 +1,9 @@
// SPDX-License-Identifier: GPL-2.0+
-#include <errno.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
+#include <sys/prctl.h>
#include "dexcr.h"
#include "utils.h"
@@ -16,6 +16,8 @@ struct dexcr_aspect {
const char *name;
const char *desc;
unsigned int index;
+ unsigned long prctl;
+ const char *sysctl;
};
static const struct dexcr_aspect aspects[] = {
@@ -23,26 +25,36 @@ static const struct dexcr_aspect aspects[] = {
.name = "SBHE",
.desc = "Speculative branch hint enable",
.index = 0,
+ .prctl = PR_PPC_DEXCR_SBHE,
+ .sysctl = "speculative_branch_hint_enable",
},
{
.name = "IBRTPD",
.desc = "Indirect branch recurrent target prediction disable",
.index = 3,
+ .prctl = PR_PPC_DEXCR_IBRTPD,
+ .sysctl = "indirect_branch_recurrent_target_prediction_disable",
},
{
.name = "SRAPD",
.desc = "Subroutine return address prediction disable",
.index = 4,
+ .prctl = PR_PPC_DEXCR_SRAPD,
+ .sysctl = "subroutine_return_address_prediction_disable",
},
{
.name = "NPHIE",
.desc = "Non-privileged hash instruction enable",
.index = 5,
+ .prctl = PR_PPC_DEXCR_NPHIE,
+ .sysctl = "nonprivileged_hash_instruction_enable",
},
{
.name = "PHIE",
.desc = "Privileged hash instruction enable",
.index = 6,
+ .prctl = -1,
+ .sysctl = NULL,
},
};
@@ -60,7 +72,7 @@ static void print_dexcr(char *name, unsigned int bits)
const char *enabled_aspects[ARRAY_SIZE(aspects) + 1] = {NULL};
size_t j = 0;
- printf("%s: %08x", name, bits);
+ printf("%s: 0x%08x", name, bits);
if (bits == 0) {
printf("\n");
@@ -103,6 +115,95 @@ static void print_aspect(const struct dexcr_aspect *aspect)
printf(" \t(%s)\n", aspect->desc);
}
+static void print_aspect_config(const struct dexcr_aspect *aspect)
+{
+ char sysctl_path[128] = "/proc/sys/kernel/dexcr/";
+ const char *reason = "unknown";
+ const char *reason_hyp = NULL;
+ const char *reason_sysctl = "no sysctl";
+ const char *reason_prctl = "no prctl";
+ bool actual = effective & DEXCR_PR_BIT(aspect->index);
+ bool expected = false;
+
+ long sysctl_ctrl = 0;
+ int prctl_ctrl = 0;
+ int err;
+
+ if (aspect->prctl >= 0) {
+ prctl_ctrl = pr_get_dexcr(aspect->prctl);
+ if (prctl_ctrl < 0)
+ reason_prctl = "(failed to read prctl)";
+ else {
+ if (prctl_ctrl & PR_PPC_DEXCR_CTRL_SET) {
+ reason_prctl = "set by prctl";
+ expected = true;
+ } else if (prctl_ctrl & PR_PPC_DEXCR_CTRL_CLEAR) {
+ reason_prctl = "cleared by prctl";
+ expected = false;
+ } else
+ reason_prctl = "unknown prctl";
+
+ reason = reason_prctl;
+ }
+ }
+
+ if (aspect->sysctl) {
+ strcat(sysctl_path, aspect->sysctl);
+ err = read_long(sysctl_path, &sysctl_ctrl, 10);
+ if (err)
+ reason_sysctl = "(failed to read sysctl)";
+ else {
+ switch (sysctl_ctrl) {
+ case 0:
+ reason_sysctl = "cleared by sysctl";
+ reason = reason_sysctl;
+ expected = false;
+ break;
+ case 1:
+ reason_sysctl = "set by sysctl";
+ reason = reason_sysctl;
+ expected = true;
+ break;
+ case 2:
+ reason_sysctl = "not modified by sysctl";
+ break;
+ case 3:
+ reason_sysctl = "cleared by sysctl (permanent)";
+ reason = reason_sysctl;
+ expected = false;
+ break;
+ case 4:
+ reason_sysctl = "set by sysctl (permanent)";
+ reason = reason_sysctl;
+ expected = true;
+ break;
+ default:
+ reason_sysctl = "unknown sysctl";
+ break;
+ }
+ }
+ }
+
+
+ if (hdexcr & DEXCR_PR_BIT(aspect->index)) {
+ reason_hyp = "set by hypervisor";
+ reason = reason_hyp;
+ expected = true;
+ } else
+ reason_hyp = "not modified by hypervisor";
+
+ printf("%12s (%d): %-28s (%s, %s, %s)\n",
+ aspect->name,
+ aspect->index,
+ reason,
+ reason_hyp,
+ reason_sysctl,
+ reason_prctl);
+
+ if (actual != expected)
+ printf(" : ! actual %s does not match config\n", aspect->name);
+}
+
int main(int argc, char *argv[])
{
if (!dexcr_exists()) {
@@ -114,6 +215,8 @@ int main(int argc, char *argv[])
hdexcr = get_dexcr(HDEXCR);
effective = dexcr | hdexcr;
+ printf("current status:\n");
+
print_dexcr(" DEXCR", dexcr);
print_dexcr(" HDEXCR", hdexcr);
print_dexcr("Effective", effective);
@@ -136,6 +239,12 @@ int main(int argc, char *argv[])
else
printf("ignored\n");
}
+ printf("\n");
+
+ printf("configuration:\n");
+ for (size_t i = 0; i < ARRAY_SIZE(aspects); i++)
+ print_aspect_config(&aspects[i]);
+ printf("\n");
return 0;
}
--
2.44.0
next prev parent reply other threads:[~2024-04-17 11:29 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-17 11:23 [PATCH v1 0/9] Add dynamic DEXCR support Benjamin Gray
2024-04-17 11:23 ` [PATCH v1 1/9] selftests/powerpc/dexcr: Add -no-pie to hashchk tests Benjamin Gray
2024-05-07 7:44 ` Andrew Donnellan
2024-04-17 11:23 ` [PATCH v1 2/9] powerpc/dexcr: Track the DEXCR per-process Benjamin Gray
2024-04-17 11:23 ` [PATCH v1 3/9] powerpc/dexcr: Reset DEXCR value across exec Benjamin Gray
2024-04-17 11:23 ` [PATCH v1 4/9] powerpc/dexcr: Add DEXCR prctl interface Benjamin Gray
2024-04-17 11:23 ` [PATCH v1 5/9] selftests/powerpc/dexcr: Add DEXCR prctl interface test Benjamin Gray
2024-04-17 11:23 ` [PATCH v1 6/9] selftests/powerpc/dexcr: Attempt to enable NPHIE in hashchk selftest Benjamin Gray
2024-04-17 11:23 ` Benjamin Gray [this message]
2024-04-17 11:23 ` [PATCH v1 8/9] selftests/powerpc/dexcr: Add chdexcr utility Benjamin Gray
2024-04-17 11:23 ` [PATCH v1 9/9] Documentation: Document PowerPC kernel dynamic DEXCR interface Benjamin Gray
2024-05-08 13:39 ` [PATCH v1 0/9] Add dynamic DEXCR support Michael Ellerman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240417112325.728010-8-bgray@linux.ibm.com \
--to=bgray@linux.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.