All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Leach <mike.leach@linaro.org>
To: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	Coresight ML <coresight@lists.linaro.org>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>,
	"Suzuki K. Poulose" <suzuki.poulose@arm.com>
Subject: Re: [PATCH v4 3/6] coresight: Add generic sysfs link creation functions.
Date: Tue, 25 Feb 2020 15:46:04 +0000	[thread overview]
Message-ID: <CAJ9a7VhmRLm8BS4rAOnZL202zXg7rpeTH454y=bbSurH8WG6sA@mail.gmail.com> (raw)
In-Reply-To: <20200214231706.GD20024@xps15>

Hi Mathieu,

On Fri, 14 Feb 2020 at 23:17, Mathieu Poirier
<mathieu.poirier@linaro.org> wrote:
>
> On Tue, Feb 11, 2020 at 10:58:05AM +0000, Mike Leach wrote:
> > To allow the connections between coresight components to be represented
> > in sysfs, generic methods for creating sysfs links between two coresight
> > devices are added.
> >
> > Signed-off-by: Mike Leach <mike.leach@linaro.org>
> > Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> > ---
> >  drivers/hwtracing/coresight/Makefile          |   3 +-
> >  drivers/hwtracing/coresight/coresight-priv.h  |   4 +
> >  drivers/hwtracing/coresight/coresight-sysfs.c | 124 ++++++++++++++++++
> >  include/linux/coresight.h                     |  20 +++
> >  4 files changed, 150 insertions(+), 1 deletion(-)
> >  create mode 100644 drivers/hwtracing/coresight/coresight-sysfs.c
> >
> > diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/coresight/Makefile
> > index 0e3e72f0f510..19497d1d92bf 100644
> > --- a/drivers/hwtracing/coresight/Makefile
> > +++ b/drivers/hwtracing/coresight/Makefile
> > @@ -2,7 +2,8 @@
> >  #
> >  # Makefile for CoreSight drivers.
> >  #
> > -obj-$(CONFIG_CORESIGHT) += coresight.o coresight-etm-perf.o coresight-platform.o
> > +obj-$(CONFIG_CORESIGHT) += coresight.o coresight-etm-perf.o \
> > +                        coresight-platform.o coresight-sysfs.o
> >  obj-$(CONFIG_CORESIGHT_LINK_AND_SINK_TMC) += coresight-tmc.o \
> >                                            coresight-tmc-etf.o \
> >                                            coresight-tmc-etr.o
> > diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> > index 1cad642f27aa..a4a658d46045 100644
> > --- a/drivers/hwtracing/coresight/coresight-priv.h
> > +++ b/drivers/hwtracing/coresight/coresight-priv.h
> > @@ -153,6 +153,10 @@ struct coresight_device *coresight_get_sink_by_id(u32 id);
> >  struct list_head *coresight_build_path(struct coresight_device *csdev,
> >                                      struct coresight_device *sink);
> >  void coresight_release_path(struct list_head *path);
> > +int coresight_add_sysfs_link(struct coresight_sysfs_link *info);
> > +void coresight_remove_sysfs_link(struct coresight_sysfs_link *info);
> > +int coresight_create_conns_sysfs_group(struct coresight_device *csdev);
> > +void coresight_remove_conns_sysfs_group(struct coresight_device *csdev);
> >
> >  #ifdef CONFIG_CORESIGHT_SOURCE_ETM3X
> >  extern int etm_readl_cp14(u32 off, unsigned int *val);
> > diff --git a/drivers/hwtracing/coresight/coresight-sysfs.c b/drivers/hwtracing/coresight/coresight-sysfs.c
> > new file mode 100644
> > index 000000000000..17d565941e5e
> > --- /dev/null
> > +++ b/drivers/hwtracing/coresight/coresight-sysfs.c
> > @@ -0,0 +1,124 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (c) 2019, Linaro Limited, All rights reserved.
> > + * Author: Mike Leach <mike.leach@linaro.org>
> > + */
> > +
> > +#include <linux/device.h>
> > +#include <linux/kernel.h>
> > +
> > +#include "coresight-priv.h"
> > +
> > +/*
> > + * Connections group - links attribute.
> > + * Count of created links between coresight components in the group.
> > + */
> > +static ssize_t nr_links_show(struct device *dev,
> > +                          struct device_attribute *attr,
> > +                          char *buf)
> > +{
> > +     struct coresight_device *csdev = to_coresight_device(dev);
> > +
> > +     return scnprintf(buf, PAGE_SIZE, "%d\n", csdev->nr_links);
> > +}
> > +static DEVICE_ATTR_RO(nr_links);
> > +
> > +static struct attribute *coresight_conns_attrs[] = {
> > +     &dev_attr_nr_links.attr,
> > +     NULL,
> > +};
> > +
> > +static struct attribute_group coresight_conns_group = {
> > +     .attrs = coresight_conns_attrs,
> > +     .name = "connections",
> > +};
> > +
> > +/*
> > + * Create connections group for CoreSight devices.
> > + * This group will then be used to collate the sysfs links between
> > + * devices.
> > + */
> > +int coresight_create_conns_sysfs_group(struct coresight_device *csdev)
> > +{
> > +     int ret = 0;
> > +
> > +     if (!csdev)
> > +             return -EINVAL;
> > +
> > +     ret = sysfs_create_group(&csdev->dev.kobj, &coresight_conns_group);
> > +     if (ret)
> > +             return ret;
> > +
> > +     csdev->has_conns_grp = true;
>
> The only place coresight_create_conns_sysfs_group() is used is in
> coresight_register() where an error is returned to driver probe() functions if
> an error occurs.  Have you found places where csdev->has_conns_grp is needed?
> If not please remove.
>

There is a sequence of calls in coresight_register() which occur after
the coresight_create_conns_sysfs_group() -
any one of which may throw an error resulting in an immediate
coresight_unregister() and hence
coresight_release_platform_data() => coresight_remove_conns_sysfs_group().
There is also an alternate path through coresight_register() which
also results in coresight_release_platform_data() occurring before we
have created the group.
The flag ensures that both paths clean up the sysfs connection data
correctly and safely.

Regards

Mike

> > +     return ret;
> > +}
> > +
> > +void coresight_remove_conns_sysfs_group(struct coresight_device *csdev)
> > +{
> > +     if (!csdev)
> > +             return;
> > +
> > +     if (csdev->has_conns_grp) {
> > +             sysfs_remove_group(&csdev->dev.kobj, &coresight_conns_group);
> > +             csdev->has_conns_grp = false;
> > +     }
> > +}
> > +
> > +int coresight_add_sysfs_link(struct coresight_sysfs_link *info)
> > +{
> > +     int ret = 0;
> > +
> > +     if (!info)
> > +             return -EINVAL;
> > +     if (!info->orig || !info->target ||
> > +         !info->orig_name || !info->target_name)
> > +             return -EINVAL;
> > +     if (!info->orig->has_conns_grp || !info->target->has_conns_grp)
> > +             return -EINVAL;
> > +
> > +     /* first link orig->target */
> > +     ret = sysfs_add_link_to_group(&info->orig->dev.kobj,
> > +                                   coresight_conns_group.name,
> > +                                   &info->target->dev.kobj,
> > +                                   info->orig_name);
> > +     if (ret)
> > +             return ret;
> > +
> > +     /* second link target->orig */
> > +     ret = sysfs_add_link_to_group(&info->target->dev.kobj,
> > +                                   coresight_conns_group.name,
> > +                                   &info->orig->dev.kobj,
> > +                                   info->target_name);
> > +
> > +     /* error in second link - remove first - otherwise inc counts */
> > +     if (ret) {
> > +             sysfs_remove_link_from_group(&info->orig->dev.kobj,
> > +                                          coresight_conns_group.name,
> > +                                          info->orig_name);
> > +     } else {
> > +             info->orig->nr_links++;
> > +             info->target->nr_links++;
> > +     }
> > +
> > +     return ret;
> > +}
> > +
> > +void coresight_remove_sysfs_link(struct coresight_sysfs_link *info)
> > +{
> > +     if (!info)
> > +             return;
> > +     if (!info->orig || !info->target ||
> > +         !info->orig_name || !info->target_name)
> > +             return;
> > +
> > +     sysfs_remove_link_from_group(&info->orig->dev.kobj,
> > +                                  coresight_conns_group.name,
> > +                                  info->orig_name);
> > +
> > +     sysfs_remove_link_from_group(&info->target->dev.kobj,
> > +                                  coresight_conns_group.name,
> > +                                  info->target_name);
> > +
> > +     info->orig->nr_links--;
> > +     info->target->nr_links--;
> > +}
> > diff --git a/include/linux/coresight.h b/include/linux/coresight.h
> > index 193cc9dbf448..a2ec25e02ca9 100644
> > --- a/include/linux/coresight.h
> > +++ b/include/linux/coresight.h
> > @@ -148,6 +148,20 @@ struct coresight_connection {
> >       struct coresight_device *child_dev;
> >  };
> >
> > +/**
> > + * struct coresight_sysfs_link - representation of a connection in sysfs.
> > + * @orig:            Originating (master) coresight device for the link.
> > + * @orig_name:               Name to use for the link orig->target.
> > + * @target:          Target (slave) coresight device for the link.
> > + * @target_name:     Name to use for the link target->orig.
> > + */
> > +struct coresight_sysfs_link {
> > +     struct coresight_device *orig;
> > +     const char *orig_name;
> > +     struct coresight_device *target;
> > +     const char *target_name;
> > +};
> > +
> >  /**
> >   * struct coresight_device - representation of a device as used by the framework
> >   * @pdata:   Platform data with device connections associated to this device.
> > @@ -165,6 +179,9 @@ struct coresight_connection {
> >   * @ea:              Device attribute for sink representation under PMU directory.
> >   * @ect_dev: Associated cross trigger device. Not part of the trace data
> >   *           path or connections.
> > + * @nr_links:   number of sysfs links created to other components from this
> > + *           device. These will appear in the "connections" group.
> > + * @has_conns_grp: Have added a "connections" group for sysfs links.
> >   */
> >  struct coresight_device {
> >       struct coresight_platform_data *pdata;
> > @@ -180,6 +197,9 @@ struct coresight_device {
> >       struct dev_ext_attribute *ea;
> >       /* cross trigger handling */
> >       struct coresight_device *ect_dev;
> > +     /* sysfs links between components */
> > +     int nr_links;
> > +     bool has_conns_grp;
> >  };
>
> With the above:
>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
>
> >
> >  /*
> > --
> > 2.17.1
> >



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

WARNING: multiple messages have this Message-ID (diff)
From: Mike Leach <mike.leach@linaro.org>
To: Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Coresight ML <coresight@lists.linaro.org>,
	"Suzuki K. Poulose" <suzuki.poulose@arm.com>,
	linux-arm-kernel <linux-arm-kernel@lists.infradead.org>,
	"open list:DOCUMENTATION" <linux-doc@vger.kernel.org>
Subject: Re: [PATCH v4 3/6] coresight: Add generic sysfs link creation functions.
Date: Tue, 25 Feb 2020 15:46:04 +0000	[thread overview]
Message-ID: <CAJ9a7VhmRLm8BS4rAOnZL202zXg7rpeTH454y=bbSurH8WG6sA@mail.gmail.com> (raw)
In-Reply-To: <20200214231706.GD20024@xps15>

Hi Mathieu,

On Fri, 14 Feb 2020 at 23:17, Mathieu Poirier
<mathieu.poirier@linaro.org> wrote:
>
> On Tue, Feb 11, 2020 at 10:58:05AM +0000, Mike Leach wrote:
> > To allow the connections between coresight components to be represented
> > in sysfs, generic methods for creating sysfs links between two coresight
> > devices are added.
> >
> > Signed-off-by: Mike Leach <mike.leach@linaro.org>
> > Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> > ---
> >  drivers/hwtracing/coresight/Makefile          |   3 +-
> >  drivers/hwtracing/coresight/coresight-priv.h  |   4 +
> >  drivers/hwtracing/coresight/coresight-sysfs.c | 124 ++++++++++++++++++
> >  include/linux/coresight.h                     |  20 +++
> >  4 files changed, 150 insertions(+), 1 deletion(-)
> >  create mode 100644 drivers/hwtracing/coresight/coresight-sysfs.c
> >
> > diff --git a/drivers/hwtracing/coresight/Makefile b/drivers/hwtracing/coresight/Makefile
> > index 0e3e72f0f510..19497d1d92bf 100644
> > --- a/drivers/hwtracing/coresight/Makefile
> > +++ b/drivers/hwtracing/coresight/Makefile
> > @@ -2,7 +2,8 @@
> >  #
> >  # Makefile for CoreSight drivers.
> >  #
> > -obj-$(CONFIG_CORESIGHT) += coresight.o coresight-etm-perf.o coresight-platform.o
> > +obj-$(CONFIG_CORESIGHT) += coresight.o coresight-etm-perf.o \
> > +                        coresight-platform.o coresight-sysfs.o
> >  obj-$(CONFIG_CORESIGHT_LINK_AND_SINK_TMC) += coresight-tmc.o \
> >                                            coresight-tmc-etf.o \
> >                                            coresight-tmc-etr.o
> > diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> > index 1cad642f27aa..a4a658d46045 100644
> > --- a/drivers/hwtracing/coresight/coresight-priv.h
> > +++ b/drivers/hwtracing/coresight/coresight-priv.h
> > @@ -153,6 +153,10 @@ struct coresight_device *coresight_get_sink_by_id(u32 id);
> >  struct list_head *coresight_build_path(struct coresight_device *csdev,
> >                                      struct coresight_device *sink);
> >  void coresight_release_path(struct list_head *path);
> > +int coresight_add_sysfs_link(struct coresight_sysfs_link *info);
> > +void coresight_remove_sysfs_link(struct coresight_sysfs_link *info);
> > +int coresight_create_conns_sysfs_group(struct coresight_device *csdev);
> > +void coresight_remove_conns_sysfs_group(struct coresight_device *csdev);
> >
> >  #ifdef CONFIG_CORESIGHT_SOURCE_ETM3X
> >  extern int etm_readl_cp14(u32 off, unsigned int *val);
> > diff --git a/drivers/hwtracing/coresight/coresight-sysfs.c b/drivers/hwtracing/coresight/coresight-sysfs.c
> > new file mode 100644
> > index 000000000000..17d565941e5e
> > --- /dev/null
> > +++ b/drivers/hwtracing/coresight/coresight-sysfs.c
> > @@ -0,0 +1,124 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright (c) 2019, Linaro Limited, All rights reserved.
> > + * Author: Mike Leach <mike.leach@linaro.org>
> > + */
> > +
> > +#include <linux/device.h>
> > +#include <linux/kernel.h>
> > +
> > +#include "coresight-priv.h"
> > +
> > +/*
> > + * Connections group - links attribute.
> > + * Count of created links between coresight components in the group.
> > + */
> > +static ssize_t nr_links_show(struct device *dev,
> > +                          struct device_attribute *attr,
> > +                          char *buf)
> > +{
> > +     struct coresight_device *csdev = to_coresight_device(dev);
> > +
> > +     return scnprintf(buf, PAGE_SIZE, "%d\n", csdev->nr_links);
> > +}
> > +static DEVICE_ATTR_RO(nr_links);
> > +
> > +static struct attribute *coresight_conns_attrs[] = {
> > +     &dev_attr_nr_links.attr,
> > +     NULL,
> > +};
> > +
> > +static struct attribute_group coresight_conns_group = {
> > +     .attrs = coresight_conns_attrs,
> > +     .name = "connections",
> > +};
> > +
> > +/*
> > + * Create connections group for CoreSight devices.
> > + * This group will then be used to collate the sysfs links between
> > + * devices.
> > + */
> > +int coresight_create_conns_sysfs_group(struct coresight_device *csdev)
> > +{
> > +     int ret = 0;
> > +
> > +     if (!csdev)
> > +             return -EINVAL;
> > +
> > +     ret = sysfs_create_group(&csdev->dev.kobj, &coresight_conns_group);
> > +     if (ret)
> > +             return ret;
> > +
> > +     csdev->has_conns_grp = true;
>
> The only place coresight_create_conns_sysfs_group() is used is in
> coresight_register() where an error is returned to driver probe() functions if
> an error occurs.  Have you found places where csdev->has_conns_grp is needed?
> If not please remove.
>

There is a sequence of calls in coresight_register() which occur after
the coresight_create_conns_sysfs_group() -
any one of which may throw an error resulting in an immediate
coresight_unregister() and hence
coresight_release_platform_data() => coresight_remove_conns_sysfs_group().
There is also an alternate path through coresight_register() which
also results in coresight_release_platform_data() occurring before we
have created the group.
The flag ensures that both paths clean up the sysfs connection data
correctly and safely.

Regards

Mike

> > +     return ret;
> > +}
> > +
> > +void coresight_remove_conns_sysfs_group(struct coresight_device *csdev)
> > +{
> > +     if (!csdev)
> > +             return;
> > +
> > +     if (csdev->has_conns_grp) {
> > +             sysfs_remove_group(&csdev->dev.kobj, &coresight_conns_group);
> > +             csdev->has_conns_grp = false;
> > +     }
> > +}
> > +
> > +int coresight_add_sysfs_link(struct coresight_sysfs_link *info)
> > +{
> > +     int ret = 0;
> > +
> > +     if (!info)
> > +             return -EINVAL;
> > +     if (!info->orig || !info->target ||
> > +         !info->orig_name || !info->target_name)
> > +             return -EINVAL;
> > +     if (!info->orig->has_conns_grp || !info->target->has_conns_grp)
> > +             return -EINVAL;
> > +
> > +     /* first link orig->target */
> > +     ret = sysfs_add_link_to_group(&info->orig->dev.kobj,
> > +                                   coresight_conns_group.name,
> > +                                   &info->target->dev.kobj,
> > +                                   info->orig_name);
> > +     if (ret)
> > +             return ret;
> > +
> > +     /* second link target->orig */
> > +     ret = sysfs_add_link_to_group(&info->target->dev.kobj,
> > +                                   coresight_conns_group.name,
> > +                                   &info->orig->dev.kobj,
> > +                                   info->target_name);
> > +
> > +     /* error in second link - remove first - otherwise inc counts */
> > +     if (ret) {
> > +             sysfs_remove_link_from_group(&info->orig->dev.kobj,
> > +                                          coresight_conns_group.name,
> > +                                          info->orig_name);
> > +     } else {
> > +             info->orig->nr_links++;
> > +             info->target->nr_links++;
> > +     }
> > +
> > +     return ret;
> > +}
> > +
> > +void coresight_remove_sysfs_link(struct coresight_sysfs_link *info)
> > +{
> > +     if (!info)
> > +             return;
> > +     if (!info->orig || !info->target ||
> > +         !info->orig_name || !info->target_name)
> > +             return;
> > +
> > +     sysfs_remove_link_from_group(&info->orig->dev.kobj,
> > +                                  coresight_conns_group.name,
> > +                                  info->orig_name);
> > +
> > +     sysfs_remove_link_from_group(&info->target->dev.kobj,
> > +                                  coresight_conns_group.name,
> > +                                  info->target_name);
> > +
> > +     info->orig->nr_links--;
> > +     info->target->nr_links--;
> > +}
> > diff --git a/include/linux/coresight.h b/include/linux/coresight.h
> > index 193cc9dbf448..a2ec25e02ca9 100644
> > --- a/include/linux/coresight.h
> > +++ b/include/linux/coresight.h
> > @@ -148,6 +148,20 @@ struct coresight_connection {
> >       struct coresight_device *child_dev;
> >  };
> >
> > +/**
> > + * struct coresight_sysfs_link - representation of a connection in sysfs.
> > + * @orig:            Originating (master) coresight device for the link.
> > + * @orig_name:               Name to use for the link orig->target.
> > + * @target:          Target (slave) coresight device for the link.
> > + * @target_name:     Name to use for the link target->orig.
> > + */
> > +struct coresight_sysfs_link {
> > +     struct coresight_device *orig;
> > +     const char *orig_name;
> > +     struct coresight_device *target;
> > +     const char *target_name;
> > +};
> > +
> >  /**
> >   * struct coresight_device - representation of a device as used by the framework
> >   * @pdata:   Platform data with device connections associated to this device.
> > @@ -165,6 +179,9 @@ struct coresight_connection {
> >   * @ea:              Device attribute for sink representation under PMU directory.
> >   * @ect_dev: Associated cross trigger device. Not part of the trace data
> >   *           path or connections.
> > + * @nr_links:   number of sysfs links created to other components from this
> > + *           device. These will appear in the "connections" group.
> > + * @has_conns_grp: Have added a "connections" group for sysfs links.
> >   */
> >  struct coresight_device {
> >       struct coresight_platform_data *pdata;
> > @@ -180,6 +197,9 @@ struct coresight_device {
> >       struct dev_ext_attribute *ea;
> >       /* cross trigger handling */
> >       struct coresight_device *ect_dev;
> > +     /* sysfs links between components */
> > +     int nr_links;
> > +     bool has_conns_grp;
> >  };
>
> With the above:
>
> Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>
>
> >
> >  /*
> > --
> > 2.17.1
> >



-- 
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-02-25 15:46 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-11 10:58 [PATCH v4 0/6] Describe CoreSight topology using sysfs links Mike Leach
2020-02-11 10:58 ` Mike Leach
2020-02-11 10:58 ` [PATCH v4 1/6] coresight: Pass coresight_device for coresight_release_platform_data Mike Leach
2020-02-11 10:58   ` Mike Leach
2020-02-11 10:58 ` [PATCH v4 2/6] coresight: add return value for fixup connections Mike Leach
2020-02-11 10:58   ` Mike Leach
2020-02-11 10:58 ` [PATCH v4 3/6] coresight: Add generic sysfs link creation functions Mike Leach
2020-02-11 10:58   ` Mike Leach
2020-02-14 23:17   ` Mathieu Poirier
2020-02-14 23:17     ` Mathieu Poirier
2020-02-25 15:46     ` Mike Leach [this message]
2020-02-25 15:46       ` Mike Leach
2020-02-25 17:07       ` Mathieu Poirier
2020-02-25 17:07         ` Mathieu Poirier
2020-02-11 10:58 ` [PATCH v4 4/6] coresight: Expose device connections via sysfs Mike Leach
2020-02-11 10:58   ` Mike Leach
2020-02-14 22:31   ` Mathieu Poirier
2020-02-14 22:31     ` Mathieu Poirier
2020-02-26 14:32     ` Mike Leach
2020-02-26 14:32       ` Mike Leach
2020-02-26 21:23       ` Mathieu Poirier
2020-02-26 21:23         ` Mathieu Poirier
2020-02-11 10:58 ` [PATCH v4 5/6] coresight: cti: Add in sysfs links to other coresight devices Mike Leach
2020-02-11 10:58   ` Mike Leach
2020-02-14 22:58   ` Mathieu Poirier
2020-02-14 22:58     ` Mathieu Poirier
2020-02-26 13:37     ` Mike Leach
2020-02-26 13:37       ` Mike Leach
2020-02-26 21:20       ` Mathieu Poirier
2020-02-26 21:20         ` Mathieu Poirier
2020-02-11 10:58 ` [PATCH v4 6/6] coresight: docs: Add information about the topology representations Mike Leach
2020-02-11 10:58   ` Mike Leach
2020-02-14 23:10   ` Mathieu Poirier
2020-02-14 23:10     ` 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='CAJ9a7VhmRLm8BS4rAOnZL202zXg7rpeTH454y=bbSurH8WG6sA@mail.gmail.com' \
    --to=mike.leach@linaro.org \
    --cc=coresight@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=mathieu.poirier@linaro.org \
    --cc=suzuki.poulose@arm.com \
    /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.