Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752564AbdC0Kf6 (ORCPT ); Mon, 27 Mar 2017 06:35:58 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:39257 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751945AbdC0Kfr (ORCPT ); Mon, 27 Mar 2017 06:35:47 -0400 Subject: Re: [PATCH 12/13] powerpc/perf: Thread imc cpuhotplug support To: ego@linux.vnet.ibm.com, Madhavan Srinivasan References: <1489649707-8021-1-git-send-email-maddy@linux.vnet.ibm.com> <1489649707-8021-13-git-send-email-maddy@linux.vnet.ibm.com> <20170323171511.GA4148@in.ibm.com> Cc: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Balbir Singh , Benjamin Herrenschmidt , Paul Mackerras , Anton Blanchard , Sukadev Bhattiprolu , Michael Neuling , Stewart Smith , Daniel Axtens , Stephane Eranian From: Anju T Sudhakar Date: Mon, 27 Mar 2017 16:05:35 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <20170323171511.GA4148@in.ibm.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 17032710-2213-0000-0000-00000173B3BE X-IBM-SpamModules-Scores: X-IBM-SpamModules-Versions: BY=3.00006858; HX=3.00000240; KW=3.00000007; PH=3.00000004; SC=3.00000206; SDB=6.00839402; UDB=6.00412977; IPR=6.00617304; BA=6.00005240; NDR=6.00000001; ZLA=6.00000005; ZF=6.00000009; ZB=6.00000000; ZP=6.00000000; ZH=6.00000000; ZU=6.00000002; MB=3.00014819; XFM=3.00000013; UTC=2017-03-27 10:35:43 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17032710-2214-0000-0000-000054FECAE3 Message-Id: X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-27_09:,, 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-1703270094 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4193 Lines: 125 On Thursday 23 March 2017 10:45 PM, Gautham R Shenoy wrote: > 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 Thank you for reviewing the patch Gautham. -Anju > >> 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.