Add '-e' option to 'mach' command to list top address of all emergency
stacks of all present CPUs.
Signed-off-by: Hari Bathini <hbathini(a)linux.ibm.com>
---
help.c | 31 +++++++++++++++++++++++++++++++
ppc64.c | 43 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/help.c b/help.c
index 99214c1..7f0389c 100644
--- a/help.c
+++ b/help.c
@@ -2487,6 +2487,7 @@ char *help_mach[] = {
" -x override default output format with hexadecimal format.",
" -d override default output format with decimal format.",
" -o Display the OPAL console log (ppc64 only).",
+" -e List top address of all emergency stacks of each CPU (ppc64 only).",
"\nEXAMPLES",
" %s> mach",
" MACHINE TYPE: i686",
@@ -2524,6 +2525,36 @@ char *help_mach[] = {
" [ 65.219607955,5] FDT: Parsing fdt @0xff00000",
" [ 494.026291523,7] BT: seq 0x25 netfn 0x0a cmd 0x48: Message sent to
host",
" [ 494.027636927,7] BT: seq 0x25 netfn 0x0a cmd 0x48: IPMI MSG done",
+" ",
+" List top address of emergency stacks of each CPU:\n",
+" %s> mach -e",
+" EMERGENCY STACK: ",
+" CPU 0: c00000001eb28000",
+" CPU 1: c00000001eb1c000",
+" CPU 2: c00000001eb10000",
+" CPU 3: c00000001eb04000",
+" CPU 4: c00000001eaf8000",
+" CPU 5: c00000001eaec000",
+" CPU 6: c00000001eae0000",
+" CPU 7: c00000001ead4000",
+" NMI EMERGENCY STACK: ",
+" CPU 0: c00000001eb24000",
+" CPU 1: c00000001eb18000",
+" CPU 2: c00000001eb0c000",
+" CPU 3: c00000001eb00000",
+" CPU 4: c00000001eaf4000",
+" CPU 5: c00000001eae8000",
+" CPU 6: c00000001eadc000",
+" CPU 7: c00000001ead0000",
+" MC EMERGENCY STACK: ",
+" CPU 0: c00000001eb20000",
+" CPU 1: c00000001eb14000",
+" CPU 2: c00000001eb08000",
+" CPU 3: c00000001eafc000",
+" CPU 4: c00000001eaf0000",
+" CPU 5: c00000001eae4000",
+" CPU 6: c00000001ead8000",
+" CPU 7: c00000001eacc000",
NULL
};
diff --git a/ppc64.c b/ppc64.c
index 333a775..c3a3d3a 100644
--- a/ppc64.c
+++ b/ppc64.c
@@ -3153,6 +3153,44 @@ opalmsg(void)
fprintf(fp, "\n");
}
+static void ppc64_print_emergency_stack_info(void)
+{
+ struct machine_specific *ms = machdep->machspec;
+ char buf[32];
+ int i;
+
+ fprintf(fp, " EMERGENCY STACK: ");
+ if (ms->emergency_sp) {
+ fprintf(fp, "\n");
+ for (i = 0; i < kt->cpus; i++) {
+ sprintf(buf, "CPU %d", i);
+ fprintf(fp, "%19s: %lx\n", buf, ms->emergency_sp[i]);
+ }
+ } else
+ fprintf(fp, "(unused)\n");
+
+ fprintf(fp, "NMI EMERGENCY STACK: ");
+ if (ms->nmi_emergency_sp) {
+ fprintf(fp, "\n");
+ for (i = 0; i < kt->cpus; i++) {
+ sprintf(buf, "CPU %d", i);
+ fprintf(fp, "%19s: %lx\n", buf, ms->nmi_emergency_sp[i]);
+ }
+ } else
+ fprintf(fp, "(unused)\n");
+
+ fprintf(fp, " MC EMERGENCY STACK: ");
+ if (ms->mc_emergency_sp) {
+ fprintf(fp, "\n");
+ for (i = 0; i < kt->cpus; i++) {
+ sprintf(buf, "CPU %d", i);
+ fprintf(fp, "%19s: %lx\n", buf, ms->mc_emergency_sp[i]);
+ }
+ } else
+ fprintf(fp, "(unused)\n");
+ fprintf(fp, "\n");
+}
+
/*
* Machine dependent command.
*/
@@ -3161,7 +3199,7 @@ ppc64_cmd_mach(void)
{
int c;
- while ((c = getopt(argcnt, args, "cmo")) != EOF) {
+ while ((c = getopt(argcnt, args, "cmoe")) != EOF) {
switch(c)
{
case 'c':
@@ -3171,6 +3209,9 @@ ppc64_cmd_mach(void)
break;
case 'o':
return opalmsg();
+ case 'e':
+ ppc64_print_emergency_stack_info();
+ break;
default:
argerrs++;
break;
--
2.35.3