From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933019AbbI3Lfu (ORCPT ); Wed, 30 Sep 2015 07:35:50 -0400 Received: from mga14.intel.com ([192.55.52.115]:29599 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932089AbbI3Lfs (ORCPT ); Wed, 30 Sep 2015 07:35:48 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,612,1437462000"; d="scan'208";a="816246923" From: Alexander Shishkin To: Mathieu Poirier , gregkh@linuxfoundation.org, a.p.zijlstra@chello.nl, acme@kernel.org, mingo@redhat.com, corbet@lwn.net Cc: adrian.hunter@intel.com, zhang.chunyan@linaro.org, mike.leach@arm.com, tor@ti.com, al.grant@arm.com, pawel.moll@arm.com, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 06/20] coresight: etm3x: unlocking tracer in default arch init In-Reply-To: <1442593594-10665-7-git-send-email-mathieu.poirier@linaro.org> References: <1442593594-10665-1-git-send-email-mathieu.poirier@linaro.org> <1442593594-10665-7-git-send-email-mathieu.poirier@linaro.org> User-Agent: Notmuch/0.20.2 (http://notmuchmail.org) Emacs/24.5.1 (x86_64-pc-linux-gnu) Date: Wed, 30 Sep 2015 14:33:36 +0300 Message-ID: <87eghgjg4v.fsf@ashishki-desk.ger.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Mathieu Poirier writes: > Calling function 'smp_call_function_single()' to unlock the > tracer and calling it right after to perform the default > initialisation doesn't make sense. > > Moving 'etm_os_unlock()' just before making the default > initialisation results in the same outcome while saving > one call to 'smp_call_function_single()'. > > Signed-off-by: Mathieu Poirier > --- > drivers/hwtracing/coresight/coresight-etm3x.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/hwtracing/coresight/coresight-etm3x.c b/drivers/hwtracing/coresight/coresight-etm3x.c > index c6880c1ade55..a4c158df0fef 100644 > --- a/drivers/hwtracing/coresight/coresight-etm3x.c > +++ b/drivers/hwtracing/coresight/coresight-etm3x.c > @@ -1867,6 +1867,11 @@ static void etm_init_arch_data(void *info) > * certain registers might be ignored. > */ > etm_clr_pwrdwn(drvdata); > + > + /* Make sure all registers are accessible */ > + etm_os_unlock(drvdata); In case of co-processor register access, this will end up unlocking the local ETM instead of the one on target cpu, by the looks of it. That's why smp_function_call() was needed there. Or you might want a etm_read_on_cpu() variant if it's really worth it. > + drvdata->os_unlock = true; > + > /* > * Set prog bit. It will be set from reset but this is included to > * ensure it is set > @@ -1961,9 +1966,6 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id) > get_online_cpus(); > etmdrvdata[drvdata->cpu] = drvdata; > > - if (!smp_call_function_single(drvdata->cpu, etm_os_unlock, drvdata, 1)) > - drvdata->os_unlock = true; > - > if (smp_call_function_single(drvdata->cpu, > etm_init_arch_data, drvdata, 1)) > dev_err(dev, "ETM arch init failed\n"); > -- > 1.9.1 Regards, -- Alex