Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754266AbdC1Fen (ORCPT ); Tue, 28 Mar 2017 01:34:43 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:42467 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753694AbdC1Fel (ORCPT ); Tue, 28 Mar 2017 01:34:41 -0400 Subject: Re: [PATCH v5 08/13] powerpc/perf: PMU functions for Core IMC and hotplugging To: ego@linux.vnet.ibm.com References: <1489649707-8021-1-git-send-email-maddy@linux.vnet.ibm.com> <1489649707-8021-9-git-send-email-maddy@linux.vnet.ibm.com> <20170323130947.GB4897@in.ibm.com> Cc: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Hemant Kumar , Balbir Singh , Benjamin Herrenschmidt , Paul Mackerras , Anton Blanchard , Sukadev Bhattiprolu , Michael Neuling , Stewart Smith , Daniel Axtens , Stephane Eranian , Anju T Sudhakar From: Madhavan Srinivasan Date: Tue, 28 Mar 2017 10:11:51 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170323130947.GB4897@in.ibm.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable x-cbid: 17032804-0048-0000-0000-0000021797D7 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17032804-0049-0000-0000-000047C368C5 Message-Id: <5aaf098d-5919-e7c6-b4a6-0acbb5baa222@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-28_04:,, 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-1703280043 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2394 Lines: 100 On Thursday 23 March 2017 06:39 PM, Gautham R Shenoy wrote: > Hi Maddy, Hemant, Anju, > > On Thu, Mar 16, 2017 at 01:05:02PM +0530, Madhavan Srinivasan wrote: > > [..snip..] > >> + >> +static void core_imc_change_cpu_context(int old_cpu, int new_cpu) >> +{ >> + if (!core_imc_pmu) >> + return; >> + perf_pmu_migrate_context(&core_imc_pmu->pmu, old_cpu, new_cpu); >> +} >> + >> + >> +static int ppc_core_imc_cpu_online(unsigned int cpu) >> +{ >> + int ret; >> + >> + /* If a cpu for this core is already set, then, don't do anything */ >> + ret = cpumask_any_and(&core_imc_cpumask, >> + cpu_sibling_mask(cpu)); >> + if (ret < nr_cpu_ids) >> + return 0; >> + >> + /* Else, set the cpu in the mask, and change the context */ >> + cpumask_set_cpu(cpu, &core_imc_cpumask); >> + core_imc_change_cpu_context(-1, cpu); > So, in the core case, we are ok as long as any cpu in the core is > present in the imc_cpumask. It need not have to be the smallest online > cpu in the core. > > Can the same logic be applied to the earlier nest case ? Yes. This makes sense. Let me look at this. Thanks for review Maddy > > We can have a single function for cpu_offline and cpu_online which > implements these checks and sets the cpu bit if required. > > ppc_entity_imc_cpu_offline(unsigned int cpu, cpumask_t > entity_imc_mask, > entity_imc_change_cpu_context_fn) > { > . > . > . > > } > > > static ppc_nest_imc_cpu_offline(unsigned int cpu) > { > return ppc_entity_imc_cpu_offline(cpu, nest_imc_mask, > nest_imc_change_cpu_context); > } > > And similar ones for core imc and thread imc. > > Does this sound reasonable ? >> + return 0; >> +} >> + >> +static int ppc_core_imc_cpu_offline(unsigned int cpu) >> +{ >> + int target; >> + unsigned int ncpu; >> + >> + /* >> + * clear this cpu out of the mask, if not present in the mask, >> + * don't bother doing anything. >> + */ >> + if (!cpumask_test_and_clear_cpu(cpu, &core_imc_cpumask)) >> + return 0; >> + >> + /* Find any online cpu in that core except the current "cpu" */ >> + ncpu = cpumask_any_but(cpu_sibling_mask(cpu), cpu); >> + >> + if (ncpu < nr_cpu_ids) { >> + target = ncpu; >> + cpumask_set_cpu(target, &core_imc_cpumask); >> + } else >> + target = -1; >> + >> + /* migrate the context */ >> + core_imc_change_cpu_context(cpu, target); >> + >> + return 0; >> +} >> + > -- > Thanks and Regards > gautham.