linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Michael Ellerman <mpe@ellerman.id.au>
To: <linuxppc-dev@ozlabs.org>
Cc: cody@linux.vnet.ibm.com, khandual@linux.vnet.ibm.com
Subject: [PATCH 02/20] powerpc/perf: Define perf_event_print_debug() to print PMU register values
Date: Fri, 14 Mar 2014 16:00:27 +1100	[thread overview]
Message-ID: <1394773245-18328-3-git-send-email-mpe@ellerman.id.au> (raw)
In-Reply-To: <1394773245-18328-1-git-send-email-mpe@ellerman.id.au>

From: Anshuman Khandual <khandual@linux.vnet.ibm.com>

Currently the sysrq ShowRegs command does not print any PMU registers as
we have an empty definition for perf_event_print_debug(). This patch
defines perf_event_print_debug() to print various PMU registers.

Example output:

CPU: 0 PMU registers, ppmu = POWER7 n_counters = 6
PMC1:  00000000 PMC2: 00000000 PMC3: 00000000 PMC4: 00000000
PMC5:  00000000 PMC6: 00000000 PMC7: deadbeef PMC8: deadbeef
MMCR0: 0000000080000000 MMCR1: 0000000000000000 MMCRA: 0f00000001000000
SIAR:  0000000000000000 SDAR:  0000000000000000 SIER:  0000000000000000

Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com>
[mpe: Fix 32 bit build and rework formatting for compactness]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/include/asm/perf_event_server.h |  1 +
 arch/powerpc/perf/core-book3s.c              | 55 ++++++++++++++++++++++++++--
 2 files changed, 52 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/include/asm/perf_event_server.h b/arch/powerpc/include/asm/perf_event_server.h
index 3fd2f1b..9ed73714 100644
--- a/arch/powerpc/include/asm/perf_event_server.h
+++ b/arch/powerpc/include/asm/perf_event_server.h
@@ -14,6 +14,7 @@
 #include <linux/device.h>
 #include <uapi/asm/perf_event.h>
 
+/* Update perf_event_print_debug() if this changes */
 #define MAX_HWEVENTS		8
 #define MAX_EVENT_ALTERNATIVES	8
 #define MAX_LIMITED_HWCOUNTERS	2
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 67cf220..704d1c5 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -563,10 +563,6 @@ out:
 
 static void perf_event_interrupt(struct pt_regs *regs);
 
-void perf_event_print_debug(void)
-{
-}
-
 /*
  * Read one performance monitor counter (PMC).
  */
@@ -645,6 +641,57 @@ static void write_pmc(int idx, unsigned long val)
 	}
 }
 
+/* Called from sysrq_handle_showregs() */
+void perf_event_print_debug(void)
+{
+	unsigned long sdar, sier, flags;
+	u32 pmcs[MAX_HWEVENTS];
+	int i;
+
+	if (!ppmu->n_counter)
+		return;
+
+	local_irq_save(flags);
+
+	pr_info("CPU: %d PMU registers, ppmu = %s n_counters = %d",
+		 smp_processor_id(), ppmu->name, ppmu->n_counter);
+
+	for (i = 0; i < ppmu->n_counter; i++)
+		pmcs[i] = read_pmc(i + 1);
+
+	for (; i < MAX_HWEVENTS; i++)
+		pmcs[i] = 0xdeadbeef;
+
+	pr_info("PMC1:  %08x PMC2: %08x PMC3: %08x PMC4: %08x\n",
+		 pmcs[0], pmcs[1], pmcs[2], pmcs[3]);
+
+	if (ppmu->n_counter > 4)
+		pr_info("PMC5:  %08x PMC6: %08x PMC7: %08x PMC8: %08x\n",
+			 pmcs[4], pmcs[5], pmcs[6], pmcs[7]);
+
+	pr_info("MMCR0: %016lx MMCR1: %016lx MMCRA: %016lx\n",
+		mfspr(SPRN_MMCR0), mfspr(SPRN_MMCR1), mfspr(SPRN_MMCRA));
+
+	sdar = sier = 0;
+#ifdef CONFIG_PPC64
+	sdar = mfspr(SPRN_SDAR);
+
+	if (ppmu->flags & PPMU_HAS_SIER)
+		sier = mfspr(SPRN_SIER);
+
+	if (ppmu->flags & PPMU_EBB) {
+		pr_info("MMCR2: %016lx EBBHR: %016lx\n",
+			mfspr(SPRN_MMCR2), mfspr(SPRN_EBBHR));
+		pr_info("EBBRR: %016lx BESCR: %016lx\n",
+			mfspr(SPRN_EBBRR), mfspr(SPRN_BESCR));
+	}
+#endif
+	pr_info("SIAR:  %016lx SDAR:  %016lx SIER:  %016lx\n",
+		mfspr(SPRN_SIAR), sdar, sier);
+
+	local_irq_restore(flags);
+}
+
 /*
  * Check if a set of events can all go on the PMU at once.
  * If they can't, this will look at alternative codes for the events
-- 
1.8.3.2

  parent reply	other threads:[~2014-03-14  5:00 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-14  5:00 powerpc/perf: patches for 3.15 Michael Ellerman
2014-03-14  5:00 ` [PATCH 01/20] powerpc/perf: Make some new raw event codes available in sysfs Michael Ellerman
2014-03-14  5:00 ` Michael Ellerman [this message]
2014-03-14  5:00 ` [PATCH 03/20] powerpc: Add a cpu feature CPU_FTR_PMAO_BUG Michael Ellerman
2014-03-14  5:00 ` [PATCH 04/20] powerpc/perf: Add lost exception workaround Michael Ellerman
2014-03-14  5:00 ` [PATCH 05/20] powerpc/perf: Reject EBB events which specify a sample_type Michael Ellerman
2014-03-14  5:00 ` [PATCH 06/20] powerpc/perf: Clean up the EBB hash defines a little Michael Ellerman
2014-03-14  5:00 ` [PATCH 07/20] powerpc/perf: Avoid mutating event in power8_get_constraint() Michael Ellerman
2014-03-14  5:00 ` [PATCH 08/20] powerpc/perf: Add BHRB constraint and IFM MMCRA handling for EBB Michael Ellerman
2014-03-14  5:00 ` [PATCH 09/20] powerpc/perf: Enable BHRB access for EBB events Michael Ellerman
2014-03-14  5:00 ` [PATCH 10/20] sysfs: create bin_attributes under the requested group Michael Ellerman
2014-03-14  5:00 ` [PATCH 11/20] powerpc: Add hvcalls for 24x7 and gpci (Get Performance Counter Info) Michael Ellerman
2014-03-14  5:00 ` [PATCH 12/20] powerpc/perf: Add hv_gpci interface header Michael Ellerman
2014-03-14  5:00 ` [PATCH 13/20] powerpc/perf: Add 24x7 interface headers Michael Ellerman
2014-03-14  5:00 ` [PATCH 14/20] powerpc/perf: Add a shared interface to get gpci version and capabilities Michael Ellerman
2014-03-14  5:00 ` [PATCH 15/20] powerpc/perf: Add macros for defining event fields & formats Michael Ellerman
2014-03-14  5:00 ` [PATCH 16/20] powerpc/perf: Add support for the hv gpci (get performance counter info) interface Michael Ellerman
2014-03-14  5:00 ` [PATCH 17/20] powerpc/perf: Add support for the hv 24x7 interface Michael Ellerman
2014-03-14  5:00 ` [PATCH 18/20] powerpc/perf: Add kconfig option for hypervisor provided counters Michael Ellerman
2014-03-14  5:00 ` [PATCH 19/20] powerpc/perf/hv_{gpci, 24x7}: Add documentation of device attributes Michael Ellerman
2014-03-14  5:00 ` [PATCH 20/20] powerpc/perf: Fix handling of L3 events with bank == 1 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=1394773245-18328-3-git-send-email-mpe@ellerman.id.au \
    --to=mpe@ellerman.id.au \
    --cc=cody@linux.vnet.ibm.com \
    --cc=khandual@linux.vnet.ibm.com \
    --cc=linuxppc-dev@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).