Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933994AbdCWRPZ (ORCPT ); Thu, 23 Mar 2017 13:15:25 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:55395 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933768AbdCWRPW (ORCPT ); Thu, 23 Mar 2017 13:15:22 -0400 Date: Thu, 23 Mar 2017 22:45:11 +0530 From: Gautham R Shenoy To: Madhavan Srinivasan Cc: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Anju T Sudhakar , "Gautham R . Shenoy" , Balbir Singh , Benjamin Herrenschmidt , Paul Mackerras , Anton Blanchard , Sukadev Bhattiprolu , Michael Neuling , Stewart Smith , Daniel Axtens , Stephane Eranian Subject: Re: [PATCH 12/13] powerpc/perf: Thread imc cpuhotplug support Reply-To: ego@linux.vnet.ibm.com References: <1489649707-8021-1-git-send-email-maddy@linux.vnet.ibm.com> <1489649707-8021-13-git-send-email-maddy@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1489649707-8021-13-git-send-email-maddy@linux.vnet.ibm.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-TM-AS-GCONF: 00 x-cbid: 17032317-0024-0000-0000-00000224E877 X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00006835; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000206; SDB=6.00837873; UDB=6.00411955; IPR=6.00615635; BA=6.00005234; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00014779; XFM=3.00000013; UTC=2017-03-23 17:15:17 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17032317-0025-0000-0000-000042CBB56C Message-Id: <20170323171511.GA4148@in.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-23_15:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=2 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1702020001 definitions=main-1703230150 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3937 Lines: 119 Hi Maddy, Anju, On Thu, Mar 16, 2017 at 01:05:06PM +0530, Madhavan Srinivasan wrote: > From: Anju T Sudhakar > > This patch adds support for thread IMC on cpuhotplug. > > When a cpu goes offline, the LDBAR for that cpu is disabled, and when it comes > back online the previous ldbar value is written back to the LDBAR for that cpu. > > To register the hotplug functions for thread_imc, a new state > CPUHP_AP_PERF_POWERPC_THREADIMC_ONLINE is added to the list of existing > states. > > 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/perf/imc-pmu.c | 33 ++++++++++++++++++++++++++++----- > include/linux/cpuhotplug.h | 1 + > 2 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c > index 6802960db51c..2ff39fe2a5ce 100644 > --- a/arch/powerpc/perf/imc-pmu.c > +++ b/arch/powerpc/perf/imc-pmu.c > @@ -687,6 +687,16 @@ static void cleanup_all_thread_imc_memory(void) > on_each_cpu(cleanup_thread_imc_memory, NULL, 1); > } > > +static void thread_imc_update_ldbar(unsigned int cpu_id) > +{ > + u64 ldbar_addr, ldbar_value; > + > + ldbar_addr = (u64)virt_to_phys((void *)per_cpu_add[cpu_id]); > + ldbar_value = (ldbar_addr & (u64)THREAD_IMC_LDBAR_MASK) | > + (u64)THREAD_IMC_ENABLE; > + mtspr(SPRN_LDBAR, ldbar_value); > +} > + > /* > * Allocates a page of memory for each of the online cpus, and, writes the > * physical base address of that page to the LDBAR for that cpu. This starts > @@ -694,20 +704,33 @@ static void cleanup_all_thread_imc_memory(void) > */ > static void thread_imc_mem_alloc(void *dummy) > { > - u64 ldbar_addr, ldbar_value; > int cpu_id = smp_processor_id(); > > per_cpu_add[cpu_id] = (u64)__get_free_pages(GFP_KERNEL | __GFP_ZERO, > 0); > - ldbar_addr = (u64)virt_to_phys((void *)per_cpu_add[cpu_id]); > - ldbar_value = (ldbar_addr & (u64)THREAD_IMC_LDBAR_MASK) | > - (u64)THREAD_IMC_ENABLE; > - mtspr(SPRN_LDBAR, ldbar_value); > + thread_imc_update_ldbar(cpu_id); > +} > + > +static int ppc_thread_imc_cpu_online(unsigned int cpu) > +{ > + thread_imc_update_ldbar(cpu); > + return 0; > + > +} > + > +static int ppc_thread_imc_cpu_offline(unsigned int cpu) > +{ > + mtspr(SPRN_LDBAR, 0); > + return 0; > } This patch looks ok to me. So it appears that in case of a full-core deep stop entry/exit you will need to save/restore LDBAR as well. But I will take it up for the next set of stop cleanups. For this patch, Reviewed-by: Gautham R. Shenoy > > void thread_imc_cpu_init(void) > { > on_each_cpu(thread_imc_mem_alloc, NULL, 1); > + cpuhp_setup_state(CPUHP_AP_PERF_POWERPC_THREADIMC_ONLINE, > + "POWER_THREAD_IMC_ONLINE", > + ppc_thread_imc_cpu_online, > + ppc_thread_imc_cpu_offline); > } > > static void thread_imc_ldbar_disable(void *dummy) > diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h > index abde85d9511a..724df46b2c3c 100644 > --- a/include/linux/cpuhotplug.h > +++ b/include/linux/cpuhotplug.h > @@ -138,6 +138,7 @@ enum cpuhp_state { > CPUHP_AP_PERF_ARM_L2X0_ONLINE, > CPUHP_AP_PERF_POWERPC_NEST_ONLINE, > CPUHP_AP_PERF_POWERPC_COREIMC_ONLINE, > + CPUHP_AP_PERF_POWERPC_THREADIMC_ONLINE, > CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE, > CPUHP_AP_WORKQUEUE_ONLINE, > CPUHP_AP_RCUTREE_ONLINE, > -- > 2.7.4 > -- Thanks and Regards gautham.