From: Anju T Sudhakar <anju@linux.vnet.ibm.com>
To: Santosh Sivaraj <santosh@fossix.org>
Cc: mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org,
linux-kernel@vger.kernel.org, maddy@linux.vnet.ibm.com,
hemant@linux.vnet.ibm.com
Subject: Re: [PATCH] powerpc/perf: Fix for core/nest imc call trace on cpuhotplug
Date: Thu, 5 Oct 2017 15:21:47 +0530 [thread overview]
Message-ID: <f4375873-192d-49b6-f51b-5aa320ebdb08@linux.vnet.ibm.com> (raw)
In-Reply-To: <20171005095015.wr6spduebk4zqktk@santosiv.in.ibm.com>
Hi Santosh,
On Thursday 05 October 2017 03:20 PM, Santosh Sivaraj wrote:
> * Anju T Sudhakar <anju@linux.vnet.ibm.com> wrote (on 2017-10-04 06:50:52 +0000):
>
>> Nest/core pmu units are enabled only when it is used. A reference count is
>> maintained for the events which uses the nest/core pmu units. Currently in
>> *_imc_counters_release function a WARN() is used for notification of any
>> underflow of ref count.
>>
>> The case where event ref count hit a negative value is, when perf session is
>> started, followed by offlining of all cpus in a given core.
>> i.e. in cpuhotplug offline path ppc_core_imc_cpu_offline() function set the
>> ref->count to zero, if the current cpu which is about to offline is the last
>> cpu in a given core and make an OPAL call to disable the engine in that core.
>> And on perf session termination, perf->destroy (core_imc_counters_release) will
>> first decrement the ref->count for this core and based on the ref->count value
>> an opal call is made to disable the core-imc engine.
>> Now, since cpuhotplug path already clears the ref->count for core and disabled
>> the engine, perf->destroy() decrementing again at event termination make it
>> negative which in turn fires the WARN_ON. The same happens for nest units.
>>
>> Add a check to see if the reference count is alreday zero, before decrementing
>> the count, so that the ref count will not hit a negative value.
>>
>> Signed-off-by: Anju T Sudhakar <anju@linux.vnet.ibm.com>
> Reviewed-by: Santosh Sivaraj <santosh@fossix.org>
Thanks for reviewing.
-Anju
>> ---
>> arch/powerpc/perf/imc-pmu.c | 28 ++++++++++++++++++++++++++++
>> 1 file changed, 28 insertions(+)
>>
>> diff --git a/arch/powerpc/perf/imc-pmu.c b/arch/powerpc/perf/imc-pmu.c
>> index 9ccac86f3463..e3a1f65933b5 100644
>> --- a/arch/powerpc/perf/imc-pmu.c
>> +++ b/arch/powerpc/perf/imc-pmu.c
>> @@ -399,6 +399,20 @@ static void nest_imc_counters_release(struct perf_event *event)
>>
>> /* Take the mutex lock for this node and then decrement the reference count */
>> mutex_lock(&ref->lock);
>> + if (ref->refc == 0) {
>> + /*
>> + * The scenario where this is true is, when perf session is
>> + * started, followed by offlining of all cpus in a given node.
>> + *
>> + * In the cpuhotplug offline path, ppc_nest_imc_cpu_offline()
>> + * function set the ref->count to zero, if the cpu which is
>> + * about to offline is the last cpu in a given node and make
>> + * an OPAL call to disable the engine in that node.
>> + *
>> + */
>> + mutex_unlock(&ref->lock);
>> + return;
>> + }
>> ref->refc--;
>> if (ref->refc == 0) {
>> rc = opal_imc_counters_stop(OPAL_IMC_COUNTERS_NEST,
>> @@ -646,6 +660,20 @@ static void core_imc_counters_release(struct perf_event *event)
>> return;
>>
>> mutex_lock(&ref->lock);
>> + if (ref->refc == 0) {
>> + /*
>> + * The scenario where this is true is, when perf session is
>> + * started, followed by offlining of all cpus in a given core.
>> + *
>> + * In the cpuhotplug offline path, ppc_core_imc_cpu_offline()
>> + * function set the ref->count to zero, if the cpu which is
>> + * about to offline is the last cpu in a given core and make
>> + * an OPAL call to disable the engine in that core.
>> + *
>> + */
>> + mutex_unlock(&ref->lock);
>> + return;
>> + }
>> ref->refc--;
>> if (ref->refc == 0) {
>> rc = opal_imc_counters_stop(OPAL_IMC_COUNTERS_CORE,
next prev parent reply other threads:[~2017-10-05 9:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-04 6:50 Anju T Sudhakar
2017-10-05 9:50 ` Santosh Sivaraj
2017-10-05 9:51 ` Anju T Sudhakar [this message]
2017-10-13 12:32 ` Michael Ellerman
-- strict thread matches above, loose matches on Subject: below --
2017-09-11 17:32 [PATCH] " Anju T Sudhakar
2017-09-21 4:34 ` Michael Ellerman
2017-09-25 11:52 ` Anju T Sudhakar
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=f4375873-192d-49b6-f51b-5aa320ebdb08@linux.vnet.ibm.com \
--to=anju@linux.vnet.ibm.com \
--cc=hemant@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.vnet.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=santosh@fossix.org \
/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
all inboxes | Powered by JetHome®