From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: mathieu.poirier@linaro.org
Cc: linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, mike.leach@linaro.org,
coresight@lists.linaro.org
Subject: Re: [RFC PATCH 01/14] coresight: etm4x: Skip save/restore before device registration
Date: Thu, 30 Jul 2020 15:45:45 +0100 [thread overview]
Message-ID: <dc1409bf-3b8a-d669-fb9a-09537d01fb0f@arm.com> (raw)
In-Reply-To: <20200729180128.GA3073178@xps15>
On 07/29/2020 07:01 PM, Mathieu Poirier wrote:
> Hi Suzuki,
>
> I have starte to review this - comments will be scattered over a few days.
>
> On Wed, Jul 22, 2020 at 06:20:27PM +0100, Suzuki K Poulose wrote:
>> Skip cpu save/restore before the coresight device is registered.
>>
>> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
>> Cc: Mike Leach <mike.leach@linaro.org>
>> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
>> ---
>> drivers/hwtracing/coresight/coresight-etm4x.c | 16 +++++++++++++++-
>> 1 file changed, 15 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
>> index 6d7d2169bfb2..cb83fb77ded6 100644
>> --- a/drivers/hwtracing/coresight/coresight-etm4x.c
>> +++ b/drivers/hwtracing/coresight/coresight-etm4x.c
>> @@ -1135,7 +1135,13 @@ static int etm4_cpu_save(struct etmv4_drvdata *drvdata)
>> {
>> int i, ret = 0;
>> struct etmv4_save_state *state;
>> - struct device *etm_dev = &drvdata->csdev->dev;
>> + struct coresight_device *csdev = drvdata->csdev;
>> + struct device *etm_dev;
>> +
>> + if (WARN_ON(!csdev))
>> + return -ENODEV;
>> +
>> + etm_dev = &csdev->dev;
>>
>> /*
>> * As recommended by 3.4.1 ("The procedure when powering down the PE")
>> @@ -1261,6 +1267,10 @@ static void etm4_cpu_restore(struct etmv4_drvdata *drvdata)
>> {
>> int i;
>> struct etmv4_save_state *state = drvdata->save_state;
>> + struct coresight_device *csdev = drvdata->csdev;
>> +
>> + if (WARN_ON(!csdev))
>> + return;
>
> Restore and save operations are only called from etm4_cpu_pm_notify() where the
> check for a valid drvdata->csdev is already done.
>
Correct, this is just an enforcement as we are going to rely on the
availability of drvdata->csdev to access the device with the
introduction of abstraction. This is why we WARN_ON() as we should
never hit this case.
>>
>> CS_UNLOCK(drvdata->base);
>>
>> @@ -1368,6 +1378,10 @@ static int etm4_cpu_pm_notify(struct notifier_block *nb, unsigned long cmd,
>>
>> drvdata = etmdrvdata[cpu];
>>
>> + /* If we have not registered the device there is nothing to do */
>> + if (!drvdata->csdev)
>> + return NOTIFY_OK;
>
> Can you describe the scenario you've seen this happening in? Probably best to
> add it to the changelog.
The CPU PM notifier is registered with the probing of the first ETM
device. Now, another ETM device could be probed (on a different CPU
than the parent of this ETM). Now, there is a very narrow window of
time between :
1) Initialise etmdrvdata[cpu]
2) Register the coresight_device for the ETM.(i.e, coresight_register()).
If the CPU is put on idle, after (1) and before (2), we end up with
drvdata->csdev == NULL.
This is unacceptable and there is no need to take an action in
such case. This patch fixes the potential problem, also making
sure that we have the access methods available when we need it.
(drvdata->csdev->access)
I will add it to the commit message.
Cheers
Suzuki
next prev parent reply other threads:[~2020-07-30 14:41 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-22 17:20 [RFC PATCH 00/14] coresight: Support for ETMv4.4 system instructions Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 01/14] coresight: etm4x: Skip save/restore before device registration Suzuki K Poulose
2020-07-29 18:01 ` Mathieu Poirier
2020-07-30 14:45 ` Suzuki K Poulose [this message]
2020-07-22 17:20 ` [RFC PATCH 02/14] coresight: Introduce device access abstraction Suzuki K Poulose
2020-07-29 19:56 ` Mathieu Poirier
2020-07-30 14:58 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 03/14] coresight: tpiu: Use coresight " Suzuki K Poulose
2020-07-29 21:01 ` Mathieu Poirier
2020-07-31 11:36 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 04/14] coresight: etm4x: Free up argument of etm4_init_arch_data Suzuki K Poulose
2020-07-30 17:31 ` Mathieu Poirier
2020-07-31 9:39 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 05/14] coresight: Convert coresight_timeout to use access abstraction Suzuki K Poulose
2020-07-30 18:00 ` Mathieu Poirier
2020-07-22 17:20 ` [RFC PATCH 06/14] coresight: Convert claim and lock operations to use access wrappers Suzuki K Poulose
2020-07-30 19:54 ` Mathieu Poirier
2020-07-31 9:46 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 07/14] coresight: etm4x: Always read the registers on the host CPU Suzuki K Poulose
2020-07-30 19:56 ` Mathieu Poirier
2020-07-22 17:20 ` [RFC PATCH 08/14] coresight: etm4x: Convert all register accesses Suzuki K Poulose
2020-07-30 20:20 ` Mathieu Poirier
2020-07-31 9:49 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 09/14] coresight: etm4x: Add sysreg access helpers Suzuki K Poulose
2020-07-30 21:41 ` Mathieu Poirier
2020-07-31 9:51 ` Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 10/14] coresight: etm4x: Define DEVARCH register fields Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 11/14] coresight: etm4x: Detect system register access support Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 12/14] coresight: etm4x: Refactor probing routine Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 13/14] coresight: etm4x: Add support for sysreg only devices Suzuki K Poulose
2020-07-22 17:20 ` [RFC PATCH 14/14] dts: bindings: coresight: ETMv4.4 system register access only units Suzuki K Poulose
2020-07-23 17:27 ` Rob Herring
2020-07-29 17:20 ` Mathieu Poirier
2020-07-30 16:38 ` Suzuki K Poulose
2020-08-10 20:14 ` Mathieu Poirier
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=dc1409bf-3b8a-d669-fb9a-09537d01fb0f@arm.com \
--to=suzuki.poulose@arm.com \
--cc=coresight@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=mike.leach@linaro.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
Powered by JetHome