From patchwork Thu Mar 16 07:35:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: maddy X-Patchwork-Id: 739663 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3vkLHf2Nqpz9rxw for ; Thu, 16 Mar 2017 18:50:38 +1100 (AEDT) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3vkLHf1ZpczDrBV for ; Thu, 16 Mar 2017 18:50:38 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3vkL0R14M7zDqZ1 for ; Thu, 16 Mar 2017 18:37:26 +1100 (AEDT) Received: from pps.filterd (m0098410.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.20/8.16.0.20) with SMTP id v2G7SaEg070690 for ; Thu, 16 Mar 2017 03:37:25 -0400 Received: from e23smtp08.au.ibm.com (e23smtp08.au.ibm.com [202.81.31.141]) by mx0a-001b2d01.pphosted.com with ESMTP id 297cf6ekb3-1 (version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT) for ; Thu, 16 Mar 2017 03:37:24 -0400 Received: from localhost by e23smtp08.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 16 Mar 2017 17:37:22 +1000 Received: from d23relay09.au.ibm.com (202.81.31.228) by e23smtp08.au.ibm.com (202.81.31.205) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 16 Mar 2017 17:37:19 +1000 Received: from d23av04.au.ibm.com (d23av04.au.ibm.com [9.190.235.139]) by d23relay09.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id v2G7bBZV51314924 for ; Thu, 16 Mar 2017 18:37:19 +1100 Received: from d23av04.au.ibm.com (localhost [127.0.0.1]) by d23av04.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id v2G7aja8010824 for ; Thu, 16 Mar 2017 18:36:46 +1100 Received: from SrihariSrinidhi.in.ibm.com ([9.77.193.245]) by d23av04.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id v2G7ZTYl008432; Thu, 16 Mar 2017 18:36:40 +1100 From: Madhavan Srinivasan To: mpe@ellerman.id.au Subject: [PATCH 11/13] powerpc/powernv: Add device shutdown function for Core IMC Date: Thu, 16 Mar 2017 13:05:05 +0530 X-Mailer: git-send-email 2.7.4 In-Reply-To: <1489649707-8021-1-git-send-email-maddy@linux.vnet.ibm.com> References: <1489649707-8021-1-git-send-email-maddy@linux.vnet.ibm.com> X-TM-AS-MML: disable x-cbid: 17031607-0048-0000-0000-000002144258 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17031607-0049-0000-0000-000047BDB4C4 Message-Id: <1489649707-8021-12-git-send-email-maddy@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-03-16_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=1 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1702020001 definitions=main-1703160061 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Stewart Smith , "Gautham R . Shenoy" , Michael Neuling , Madhavan Srinivasan , linux-kernel@vger.kernel.org, Stephane Eranian , Anju T Sudhakar , Paul Mackerras , Anton Blanchard , Sukadev Bhattiprolu , linuxppc-dev@lists.ozlabs.org, Daniel Axtens Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" 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 Cc: Balbir Singh Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Anton Blanchard Cc: Sukadev Bhattiprolu Cc: Michael Neuling Cc: Stewart Smith Cc: Daniel Axtens Cc: Stephane Eranian Signed-off-by: Anju T Sudhakar Signed-off-by: Madhavan Srinivasan --- 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);