linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
To: mpe@ellerman.id.au
Cc: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org,
	Madhavan Srinivasan <maddy@linux.vnet.ibm.com>,
	"Gautham R . Shenoy" <ego@linux.vnet.ibm.com>,
	Balbir Singh <bsingharora@gmail.com>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Anton Blanchard <anton@samba.org>,
	Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>,
	Michael Neuling <mikey@neuling.org>,
	Stewart Smith <stewart@linux.vnet.ibm.com>,
	Daniel Axtens <dja@axtens.net>,
	Stephane Eranian <eranian@google.com>,
	Anju T Sudhakar <anju@linux.vnet.ibm.com>
Subject: [PATCH 11/13] powerpc/powernv: Add device shutdown function for Core IMC
Date: Thu, 16 Mar 2017 13:05:05 +0530	[thread overview]
Message-ID: <1489649707-8021-12-git-send-email-maddy@linux.vnet.ibm.com> (raw)
In-Reply-To: <1489649707-8021-1-git-send-email-maddy@linux.vnet.ibm.com>

Core In Memory Collection device programs the hardware
counters and have them runing always. But if the hardware
counter were not stopped at device shutdown (like kexec),
could lead to memory corruption. Patch to stop the hardware
counters via device "shutdown" callback.

Cc: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Anton Blanchard <anton@samba.org>
Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Cc: Michael Neuling <mikey@neuling.org>
Cc: Stewart Smith <stewart@linux.vnet.ibm.com>
Cc: Daniel Axtens <dja@axtens.net>
Cc: Stephane Eranian <eranian@google.com>
Signed-off-by: Anju T Sudhakar <anju@linux.vnet.ibm.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/imc-pmu.h        |  2 ++
 arch/powerpc/perf/imc-pmu.c               | 12 +++++++++++-
 arch/powerpc/platforms/powernv/opal-imc.c |  9 +++++++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/include/asm/imc-pmu.h b/arch/powerpc/include/asm/imc-pmu.h
index 8b7141ba2f2b..00f380fce1a5 100644
--- a/arch/powerpc/include/asm/imc-pmu.h
+++ b/arch/powerpc/include/asm/imc-pmu.h
@@ -80,4 +80,6 @@ struct imc_pmu {
 #define UNKNOWN_DOMAIN		-1
 
 int imc_get_domain(struct device_node *pmu_dev);
+void core_imc_disable(void);
+void thread_imc_disable(void);
 #endif /* PPC_POWERNV_IMC_PMU_DEF_H */
diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c
index 6fc1fbc0067c..6802960db51c 100644
--- a/arch/powerpc/perf/imc-pmu.c
+++ b/arch/powerpc/perf/imc-pmu.c
@@ -317,7 +317,7 @@ static void core_imc_control_disable(void)
 	opal_core_imc_counters_control(OPAL_CORE_IMC_DISABLE, 0, 0, 0);
 }
 
-static void core_imc_disable(void)
+void core_imc_disable(void)
 {
 	on_each_cpu_mask(&core_imc_cpumask,
 			 (smp_call_func_t)core_imc_control_disable, NULL, 1);
@@ -710,6 +710,16 @@ void thread_imc_cpu_init(void)
 	on_each_cpu(thread_imc_mem_alloc, NULL, 1);
 }
 
+static void thread_imc_ldbar_disable(void *dummy)
+{
+        mtspr(SPRN_LDBAR, 0);
+}
+
+void thread_imc_disable(void)
+{
+        on_each_cpu(thread_imc_ldbar_disable, NULL, 1);
+}
+
 /*
  * init_imc_pmu : Setup the IMC pmu device in "pmu_ptr" and its events
  *                "events".
diff --git a/arch/powerpc/platforms/powernv/opal-imc.c b/arch/powerpc/platforms/powernv/opal-imc.c
index 70f4b0924fae..2bc05ba19e3b 100644
--- a/arch/powerpc/platforms/powernv/opal-imc.c
+++ b/arch/powerpc/platforms/powernv/opal-imc.c
@@ -34,6 +34,8 @@
 extern struct perchip_nest_info nest_perchip_info[IMC_MAX_CHIPS];
 extern struct imc_pmu *per_nest_pmu_arr[IMC_MAX_PMUS];
 extern struct imc_pmu *core_imc_pmu;
+extern void core_imc_disable(void);
+extern void thread_imc_disable(void);
 
 extern int init_imc_pmu(struct imc_events *events,
 			int idx, struct imc_pmu *pmu_ptr);
@@ -532,6 +534,12 @@ static int opal_imc_counters_probe(struct platform_device *pdev)
 	return -ENODEV;
 }
 
+static void opal_imc_counters_shutdown(struct platform_device *pdev)
+{
+	core_imc_disable();
+	thread_imc_disable();
+}
+
 static const struct of_device_id opal_imc_match[] = {
 	{ .compatible = IMC_DTB_COMPAT },
 	{},
@@ -543,6 +551,7 @@ static struct platform_driver opal_imc_driver = {
 		.of_match_table = opal_imc_match,
 	},
 	.probe = opal_imc_counters_probe,
+	.shutdown = opal_imc_counters_shutdown,
 };
 
 MODULE_DEVICE_TABLE(of, opal_imc_match);
-- 
2.7.4

  parent reply	other threads:[~2017-03-16  7:37 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-16  7:34 [PATCH v5 00/13] IMC Instrumentation Support Madhavan Srinivasan
2017-03-16  7:34 ` [PATCH v5 01/13] powerpc/powernv: Data structure and macros definitions Madhavan Srinivasan
2017-03-16  7:34 ` [PATCH v5 02/13] powerpc/powernv: Autoload IMC device driver module Madhavan Srinivasan
2017-03-16  7:34 ` [PATCH v5 03/13] powerpc/powernv: Detect supported IMC units and its events Madhavan Srinivasan
2017-03-16  7:34 ` [PATCH v5 04/13] powerpc/perf: Add event attribute and group to IMC pmus Madhavan Srinivasan
2017-03-16  7:34 ` [PATCH v5 05/13] powerpc/perf: Generic imc pmu event functions Madhavan Srinivasan
2017-03-16  7:35 ` [PATCH v5 06/13] powerpc/perf: IMC pmu cpumask and cpu hotplug support Madhavan Srinivasan
2017-03-23 11:52   ` Gautham R Shenoy
2017-03-27 10:34     ` Anju T Sudhakar
2017-03-16  7:35 ` [PATCH v5 07/13] powerpc/powernv: Core IMC events detection Madhavan Srinivasan
2017-03-16  7:35 ` [PATCH v5 08/13] powerpc/perf: PMU functions for Core IMC and hotplugging Madhavan Srinivasan
2017-03-23 13:09   ` Gautham R Shenoy
2017-03-28  4:41     ` Madhavan Srinivasan
2017-03-16  7:35 ` [PATCH v5 09/13] powerpc/powernv: Thread IMC events detection Madhavan Srinivasan
2017-03-16  7:35 ` [PATCH v5 10/13] powerpc/perf: Thread IMC PMU functions Madhavan Srinivasan
2017-03-16  7:35 ` Madhavan Srinivasan [this message]
2017-03-16  7:35 ` [PATCH 12/13] powerpc/perf: Thread imc cpuhotplug support Madhavan Srinivasan
2017-03-23 17:15   ` Gautham R Shenoy
2017-03-27 10:35     ` Anju T Sudhakar
2017-03-16  7:35 ` [PATCH 13/13] powerpc/perf: Enable/disable core engine during cpuhotplug Madhavan Srinivasan

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=1489649707-8021-12-git-send-email-maddy@linux.vnet.ibm.com \
    --to=maddy@linux.vnet.ibm.com \
    --cc=anju@linux.vnet.ibm.com \
    --cc=anton@samba.org \
    --cc=benh@kernel.crashing.org \
    --cc=bsingharora@gmail.com \
    --cc=dja@axtens.net \
    --cc=ego@linux.vnet.ibm.com \
    --cc=eranian@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mikey@neuling.org \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=stewart@linux.vnet.ibm.com \
    --cc=sukadev@linux.vnet.ibm.com \
    /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).