All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Leach <mike.leach@linaro.org>
To: Tingwei Zhang <tingwei@codeaurora.org>
Cc: tsoni@codeaurora.org,
	Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>,
	Kim Phillips <kim.phillips@arm.com>,
	Mathieu Poirier <mathieu.poirier@linaro.org>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Coresight ML <coresight@lists.linaro.org>,
	Mao Jinlong <jinlmao@codeaurora.org>,
	Mian Yousaf Kaukab <ykaukab@suse.de>,
	Russell King <linux@armlinux.org.uk>,
	Randy Dunlap <rdunlap@infradead.org>,
	Leo Yan <leo.yan@linaro.org>,
	linux-arm-kernel <linux-arm-kernel-bounces@lists.infradead.org>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v3 08/20] coresight: allow etm4x to be built as a module
Date: Sat, 18 Jul 2020 18:38:08 +0100	[thread overview]
Message-ID: <CAJ9a7VgZykmrD++Sqt9g4mcA8BYdwG1qw47oia2rz+A_aBuJOQ@mail.gmail.com> (raw)
In-Reply-To: <b619a6250e3642ace7c37bcd4965dedd@codeaurora.org>

Hi,

That fix sorts the problem on my board.
However, be aware that the etmv4 PM code changes somewhat due to this
patch [1] that is currently on the linux master branch and will appear
in 5.8-rc6, and there are further new coresight patches in Mathieu's
coresight/next and linux-next.

It may be better to rebase onto coresight/next for the next set.

Regards

Mike

[1] 9b6a3f3633a5 coresight: etmv4: Fix CPU power management setup in
probe() function


On Sat, 18 Jul 2020 at 04:25, <tingwei@codeaurora.org> wrote:
>
> Hi Mike,
>
> Thanks for reporting this.  This is a good catch.
>
> I was testing on db845c but I didn't encounter this issue with
> multiple module load/unload test. I guess it's due to timing difference.
> The issue is etm4_cpu_pm_notify() is removed from cpu pm notification
> after last etm4 device is removed. There's racing condition when some
> etm4 device say etm0 is removed but etm4_cpu_pm_notify() is still
> called. I reproduced this issue by manually unbind etm4x device.
>
> The fix is clean etmdrvdata[drvdata->cpu] in etm4_remove() so
> etm4_cpu_pm_notify() is gracefully returned. I've verified this on
> db845c with manually unbind etm4x device test. Do you mind test
> on your db410 as well? I'll put it into v4.
>
> @@ -1542,6 +1543,7 @@ static int __exit etm4_remove(struct amba_device
> *adev)
>
>          etm_perf_symlink(drvdata->csdev, false);
>
> +       etmdrvdata[drvdata->cpu] = NULL;
>          if (--etm4_count == 0) {
>                  etm4_cpu_pm_unregister();
>
>
>
> On 2020-07-18 01:05, Mike Leach wrote:
> > Hi Tingwei,
> >
> > Couldn't see 00/20 cover note for this set, so reporting this here as
> > it relates to etmv4 in part.
> >
> > The following sequence:-
> > (There is a load dependency here of course, if I try to load ETMv4
> > without the coresight core, then I get a lot of missing symbol error
> > messages - I assume this is expected behaviour?)
>
> Coresight_etm4x module depends on coresight module, so it's expected
> behavior.
>
> >
> > root@linaro-developer:/home/linaro/cs-mods# insmod coresight.ko
> > root@linaro-developer:/home/linaro/cs-mods# insmod coresight-etm4x.ko
> >
> > correctly loads the coresight core then ETMv4 module.
> >
> > [ 1208.214674] coresight etm0: CPU0: ETM v4.0 initialized
> > [ 1208.215534] coresight etm1: CPU1: ETM v4.0 initialized
> > [ 1208.221020] coresight etm2: CPU2: ETM v4.0 initialized
> > [ 1208.224757] coresight etm3: CPU3: ETM v4.0 initialized
> >
> > However, if I then unload the ETMv4 module:-
> >
> > root@linaro-developer:/home/linaro/cs-mods# rmmod coresight-etm4x.ko
> >
> > I get a crash:-
> >
> > [ 1215.963689] ------------[ cut here ]------------
> > [ 1215.963741] WARNING: CPU: 3 PID: 0 at
> > drivers/hwtracing/coresight/coresight-etm4x-core.c:1364
> > etm4_cpu_pm_notify+0xad8/0xb48 [coresight_etm4x]
> > [ 1215.967373] Modules linked in: coresight_etm4x(-) coresight [last
> > unloaded: coresight]
> > [ 1215.979960] CPU: 3 PID: 0 Comm: swapper/3 Tainted: G        W
> >   5.8.0-rc5cs-modscs-mods-00020-gc03fe910680d #282
> > [ 1215.987856] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC
> > (DT)
> > [ 1215.998531] pstate: 80000085 (Nzcv daIf -PAN -UAO BTYPE=--)
> > [ 1216.005396] pc : etm4_cpu_pm_notify+0xad8/0xb48 [coresight_etm4x]
> > [ 1216.010687] lr : notifier_call_chain+0x5c/0xa0
> > [ 1216.016926] sp : ffff000009fe7d50
> > [ 1216.021265] x29: ffff000009fe7d50 x28: 0000000000000000
> > [ 1216.024653] x27: 0000011b1d1464b5 x26: 0000000000000001
> > [ 1216.030035] x25: ffff00003c79f888 x24: 0000000000000001
> > [ 1216.035330] x23: 0000000000000000 x22: 0000000000000000
> > [ 1216.040626] x21: 0000000000000000 x20: 0000000000000000
> > [ 1216.045921] x19: ffff000038396480 x18: 0000000000000000
> > [ 1216.051216] x17: 0000000000000000 x16: 0000000000000000
> > [ 1216.056510] x15: 0000000000000000 x14: ffffffffffffffff
> > [ 1216.061806] x13: ffffffffffffffff x12: 0000000000000000
> > [ 1216.067101] x11: 0000000000000000 x10: 00000000000009b0
> > [ 1216.072396] x9 : ffff000009fe7e70 x8 : ffff000009fd4010
> > [ 1216.077690] x7 : 0000000000000000 x6 : 0000000023c2c562
> > [ 1216.082986] x5 : 00ffffffffffffff x4 : 0000000000000003
> > [ 1216.088281] x3 : ffff000038396880 x2 : ffff800008d8d280
> > [ 1216.093576] x1 : ffff80002b1aa000 x0 : 000000005f454c42
> > [ 1216.098873] Call trace:
> > [ 1216.104178]  etm4_cpu_pm_notify+0xad8/0xb48 [coresight_etm4x]
> > [ 1216.106343]  notifier_call_chain+0x5c/0xa0
> > [ 1216.112242]  __atomic_notifier_call_chain+0x48/0x60
> > [ 1216.116236]  cpu_pm_notify+0x44/0x70
> > [ 1216.121008]  cpu_pm_enter+0x3c/0x80
> > [ 1216.124829]  psci_enter_domain_idle_state+0x38/0xa8
> > [ 1216.128040]  cpuidle_enter_state+0x88/0x478
> > [ 1216.132900]  cpuidle_enter+0x44/0x58
> > [ 1216.137069]  call_cpuidle+0x40/0x70
> > [ 1216.140888]  do_idle+0x1e0/0x248
> > [ 1216.144099]  cpu_startup_entry+0x28/0x98
> > [ 1216.147574]  secondary_start_kernel+0x1a0/0x1f8
> > [ 1216.151476] ---[ end trace 97bcd7b8bdd7f9a7 ]---
> >
> > This happens each time, though the CPU number can change.
> > Test platform is Dragonboard DB410, linux 5.8-rc5 + this patch set.
> >
> > Regards
> >
> > Mike
> >
> >
> > On Fri, 17 Jul 2020 at 06:48, Tingwei Zhang <tingwei@codeaurora.org>
> > wrote:
> >>
> >> From: Kim Phillips <kim.phillips@arm.com>
> >>
> >> Allow to build coresight-etm4x as a module, for ease of development.
> >>
> >> - Kconfig becomes a tristate, to allow =m
> >> - append -core to source file name to allow module to
> >>   be called coresight-etm4x by the Makefile
> >> - add an etm4_remove function, for module unload
> >> - add a MODULE_DEVICE_TABLE for autoloading on boot
> >>
> >> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> >> Cc: Leo Yan <leo.yan@linaro.org>
> >> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
> >> Cc: Randy Dunlap <rdunlap@infradead.org>
> >> Cc: Suzuki K Poulose <Suzuki.Poulose@arm.com>
> >> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >> Cc: Russell King <linux@armlinux.org.uk>
> >> Signed-off-by: Kim Phillips <kim.phillips@arm.com>
> >> Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org>
> >> ---
> >>  drivers/hwtracing/coresight/Kconfig           |  5 ++-
> >>  drivers/hwtracing/coresight/Makefile          |  4 +--
> >>  ...resight-etm4x.c => coresight-etm4x-core.c} | 31
> >> ++++++++++++++++++-
> >>  3 files changed, 36 insertions(+), 4 deletions(-)
> >>  rename drivers/hwtracing/coresight/{coresight-etm4x.c =>
> > coresight-etm4x-core.c} (98%)
> >>
> >> diff --git a/drivers/hwtracing/coresight/Kconfig
> > b/drivers/hwtracing/coresight/Kconfig
> >> index 8fd9fd139cf3..d6e107bbd30b 100644
> >> --- a/drivers/hwtracing/coresight/Kconfig
> >> +++ b/drivers/hwtracing/coresight/Kconfig
> >> @@ -78,7 +78,7 @@ config CORESIGHT_SOURCE_ETM3X
> >>           module will be called coresight-etm3x.
> >>
> >>  config CORESIGHT_SOURCE_ETM4X
> >> -       bool "CoreSight Embedded Trace Macrocell 4.x driver"
> >> +       tristate "CoreSight Embedded Trace Macrocell 4.x driver"
> >>         depends on ARM64
> >>         select CORESIGHT_LINKS_AND_SINKS
> >>         select PID_IN_CONTEXTIDR
> >> @@ -88,6 +88,9 @@ config CORESIGHT_SOURCE_ETM4X
> >>           for instruction level tracing. Depending on the implemented
> > version
> >>           data tracing may also be available.
> >>
> >> +         To compile this driver as a module, choose M here: the
> >> +         module will be called coresight-etm4x.
> >> +
> >>  config CORESIGHT_STM
> >>         tristate "CoreSight System Trace Macrocell driver"
> >>         depends on (ARM && !(CPU_32v3 || CPU_32v4 || CPU_32v4T)) ||
> > ARM64
> >> diff --git a/drivers/hwtracing/coresight/Makefile
> > b/drivers/hwtracing/coresight/Makefile
> >> index d619cfd0abd8..271dc255454f 100644
> >> --- a/drivers/hwtracing/coresight/Makefile
> >> +++ b/drivers/hwtracing/coresight/Makefile
> >> @@ -14,8 +14,8 @@ obj-$(CONFIG_CORESIGHT_LINKS_AND_SINKS) +=
> > coresight-funnel.o \
> >>  obj-$(CONFIG_CORESIGHT_SOURCE_ETM3X) += coresight-etm3x.o
> >>  coresight-etm3x-y := coresight-etm3x-core.o coresight-etm-cp14.o \
> >>                                         coresight-etm3x-sysfs.o
> >> -obj-$(CONFIG_CORESIGHT_SOURCE_ETM4X) += coresight-etm4x.o \
> >> -                                       coresight-etm4x-sysfs.o
> >> +obj-$(CONFIG_CORESIGHT_SOURCE_ETM4X) += coresight-etm4x.o
> >> +coresight-etm4x-y := coresight-etm4x-core.o coresight-etm4x-sysfs.o
> >>  obj-$(CONFIG_CORESIGHT_STM) += coresight-stm.o
> >>  obj-$(CONFIG_CORESIGHT_CPU_DEBUG) += coresight-cpu-debug.o
> >>  obj-$(CONFIG_CORESIGHT_CATU) += coresight-catu.o
> >> diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c
> > b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> >> similarity index 98%
> >> rename from drivers/hwtracing/coresight/coresight-etm4x.c
> >> rename to drivers/hwtracing/coresight/coresight-etm4x-core.c
> >> index 747afc875f91..b5945f62794c 100644
> >> --- a/drivers/hwtracing/coresight/coresight-etm4x.c
> >> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> >> @@ -1536,6 +1536,26 @@ static struct amba_cs_uci_id uci_id_etm4[] = {
> >>         }
> >>  };
> >>
> >> +static int __exit etm4_remove(struct amba_device *adev)
> >> +{
> >> +       struct etmv4_drvdata *drvdata = dev_get_drvdata(&adev->dev);
> >> +
> >> +       etm_perf_symlink(drvdata->csdev, false);
> >> +
> >> +       if (--etm4_count == 0) {
> >> +               etm4_cpu_pm_unregister();
> >> +
> >> +
> > cpuhp_remove_state_nocalls(CPUHP_AP_ARM_CORESIGHT_STARTING);
> >> +               if (hp_online)
> >> +                       cpuhp_remove_state_nocalls(hp_online);
> >> +       }
> >> +
> >> +       coresight_unregister(drvdata->csdev);
> >> +
> >> +       return 0;
> >> +}
> >> +
> >> +
> >>  static const struct amba_id etm4_ids[] = {
> >>         CS_AMBA_ID(0x000bb95d),                 /* Cortex-A53 */
> >>         CS_AMBA_ID(0x000bb95e),                 /* Cortex-A57 */
> >> @@ -1553,12 +1573,21 @@ static const struct amba_id etm4_ids[] = {
> >>         {},
> >>  };
> >>
> >> +MODULE_DEVICE_TABLE(amba, etm4_ids);
> >> +
> >>  static struct amba_driver etm4x_driver = {
> >>         .drv = {
> >>                 .name   = "coresight-etm4x",
> >> +               .owner  = THIS_MODULE,
> >>                 .suppress_bind_attrs = true,
> >>         },
> >>         .probe          = etm4_probe,
> >> +       .remove         = etm4_remove,
> >>         .id_table       = etm4_ids,
> >>  };
> >> -builtin_amba_driver(etm4x_driver);
> >> +module_amba_driver(etm4x_driver);
> >> +
> >> +MODULE_AUTHOR("Pratik Patel <pratikp@codeaurora.org>");
> >> +MODULE_AUTHOR("Mathieu Poirier <mathieu.poirier@linaro.org>");
> >> +MODULE_DESCRIPTION("Arm CoreSight Program Flow Trace v4 driver");
> >> +MODULE_LICENSE("GPL v2");
> >> --
> >> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
> > Forum,
> >> a Linux Foundation Collaborative Project
> >>
> >>
> >> _______________________________________________
> >> linux-arm-kernel mailing list
> >> linux-arm-kernel@lists.infradead.org
> >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel



--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-07-18 17:40 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-17  5:45 [PATCH v3 00/20] coresight: allow to build coresight as modules Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 01/20] coresight: cpu_debug: add module name in Kconfig Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 02/20] coresight: cpu_debug: define MODULE_DEVICE_TABLE Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 03/20] coresight: use IS_ENABLED for CONFIGs that may be modules Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 04/20] coresight: add coresight prefix to barrier_pkt Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 05/20] coresight: export global symbols Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 06/20] Allow to build coresight-stm as a module, for ease of development Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 07/20] coresight: allow etm3x to be built as a module Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 08/20] coresight: allow etm4x " Tingwei Zhang
2020-07-17 17:05   ` Mike Leach
2020-07-18  3:25     ` tingwei
2020-07-18 17:38       ` Mike Leach [this message]
2020-07-21 14:55         ` Mathieu Poirier
2020-07-21 23:22           ` tingwei
2020-07-20  6:58   ` Sai Prakash Ranjan
2020-07-21  7:03     ` Sai Prakash Ranjan
2020-07-17  5:45 ` [PATCH v3 09/20] coresight: allow etb " Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 10/20] coresight: allow tpiu " Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 11/20] coresight: allow tmc " Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 12/20] coresight: remove multiple init calls from funnel driver Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 13/20] coresight: remove multiple init calls from replicator driver Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 14/20] coresight: allow funnel and replicator drivers to be built as modules Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 15/20] coresight: cti: add function to register cti associate ops Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 16/20] coresight: allow cti to be built as a module Tingwei Zhang
2020-07-20 17:00   ` Mike Leach
2020-07-20 21:07     ` Mike Leach
2020-07-21 16:35       ` Mike Leach
2020-07-21 23:27         ` tingwei
2020-07-17  5:45 ` [PATCH v3 17/20] coresight: tmc-etr: add function to register catu ops Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 18/20] coresight: allow catu drivers to be built as modules Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 19/20] coresight: add try_get_module() in coresight_grab_device() Tingwei Zhang
2020-07-22 10:49   ` Suzuki K Poulose
2020-07-22 10:48     ` Greg KH
2020-07-22 11:26       ` Suzuki K Poulose
2020-07-23  0:18         ` tingwei
2020-07-23  0:35       ` tingwei
2020-07-22 10:51     ` Suzuki K Poulose
2020-07-23  0:19       ` tingwei
2020-07-23 19:36     ` Mathieu Poirier
2020-07-24  1:17       ` Tingwei Zhang
2020-07-17  5:45 ` [PATCH v3 20/20] coresight: allow the coresight core driver to be built as a module Tingwei Zhang

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=CAJ9a7VgZykmrD++Sqt9g4mcA8BYdwG1qw47oia2rz+A_aBuJOQ@mail.gmail.com \
    --to=mike.leach@linaro.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=coresight@lists.linaro.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jinlmao@codeaurora.org \
    --cc=kim.phillips@arm.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-arm-kernel-bounces@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux@armlinux.org.uk \
    --cc=mathieu.poirier@linaro.org \
    --cc=rdunlap@infradead.org \
    --cc=saiprakash.ranjan@codeaurora.org \
    --cc=suzuki.poulose@arm.com \
    --cc=tingwei@codeaurora.org \
    --cc=tsoni@codeaurora.org \
    --cc=ykaukab@suse.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.