All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Yicong Yang <yangyicong@huawei.com>
Cc: <mathieu.poirier@linaro.org>, <suzuki.poulose@arm.com>,
	<corbet@lwn.net>, <linux-kernel@vger.kernel.org>,
	<linux-doc@vger.kernel.org>, <alexander.shishkin@linux.intel.com>,
	<helgaas@kernel.org>, <linux-pci@vger.kernel.org>,
	<prime.zeng@huawei.com>, <linuxarm@huawei.com>
Subject: Re: [PATCH 1/4] hwtracing: hisi_ptt: Make cpumask only present online CPUs
Date: Tue, 28 Mar 2023 17:24:09 +0100	[thread overview]
Message-ID: <20230328172409.000021f5@Huawei.com> (raw)
In-Reply-To: <20230315094316.26772-2-yangyicong@huawei.com>

On Wed, 15 Mar 2023 17:43:13 +0800
Yicong Yang <yangyicong@huawei.com> wrote:

> From: Yicong Yang <yangyicong@hisilicon.com>
> 
> perf will try to start PTT trace on every CPU presented in cpumask sysfs
> attribute and it will fail to start on offline CPUs(see the comments in
> perf_event_open()). But the driver is using cpumask_of_node() to export
> the available cpumask which may include offline CPUs and may fail the
> perf unintendedly. Fix this by only export the online CPUs of the node.

There isn't clear documentation that I can find for cpumask_of_node()
and chasing through on arm64 (which is what we care about for this driver)
it's maintained via numa_add_cpu() numa_remove_cpu()
Those are called in arch/arm64/kernel/smp.c in locations that are closely coupled
with set_cpu_online(cpu, XXX);
https://elixir.bootlin.com/linux/v6.3-rc4/source/arch/arm64/kernel/smp.c#L246
https://elixir.bootlin.com/linux/v6.3-rc4/source/arch/arm64/kernel/smp.c#L303

Now there are races when the two might not be in sync but in this case
we are just exposing the result to userspace, so chances of a race
after this sysfs attribute has been read seems much higher to me and
I don't think we can do anything about that.

Is there another path that I'm missing where online and node masks are out
of sync?

Jonathan


> 
> Fixes: ff0de066b463 ("hwtracing: hisi_ptt: Add trace function support for HiSilicon PCIe Tune and Trace device")
> Signed-off-by: Yicong Yang <yangyicong@hisilicon.com>

> ---
>  drivers/hwtracing/ptt/hisi_ptt.c | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/hwtracing/ptt/hisi_ptt.c b/drivers/hwtracing/ptt/hisi_ptt.c
> index 30f1525639b5..0a10c7ec46ad 100644
> --- a/drivers/hwtracing/ptt/hisi_ptt.c
> +++ b/drivers/hwtracing/ptt/hisi_ptt.c
> @@ -487,9 +487,18 @@ static ssize_t cpumask_show(struct device *dev, struct device_attribute *attr,
>  			    char *buf)
>  {
>  	struct hisi_ptt *hisi_ptt = to_hisi_ptt(dev_get_drvdata(dev));
> -	const cpumask_t *cpumask = cpumask_of_node(dev_to_node(&hisi_ptt->pdev->dev));
> +	cpumask_var_t mask;
> +	ssize_t n;
>  
> -	return cpumap_print_to_pagebuf(true, buf, cpumask);
> +	if (!alloc_cpumask_var(&mask, GFP_KERNEL))
> +		return 0;
> +
> +	cpumask_and(mask, cpumask_of_node(dev_to_node(&hisi_ptt->pdev->dev)),
> +		    cpu_online_mask);
> +	n = cpumap_print_to_pagebuf(true, buf, mask);
> +	free_cpumask_var(mask);
> +
> +	return n;
>  }
>  static DEVICE_ATTR_RO(cpumask);
>  


  reply	other threads:[~2023-03-28 16:24 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-15  9:43 [PATCH 0/4] Improve PTT filter interface and some fixes Yicong Yang
2023-03-15  9:43 ` [PATCH 1/4] hwtracing: hisi_ptt: Make cpumask only present online CPUs Yicong Yang
2023-03-28 16:24   ` Jonathan Cameron [this message]
2023-03-30  3:53     ` Yicong Yang
2023-03-30  8:34       ` Jonathan Cameron
2023-03-15  9:43 ` [PATCH 2/4] hwtracing: hisi_ptt: Add support for dynamically updating the filter list Yicong Yang
2023-03-28 16:51   ` Jonathan Cameron
2023-03-29 12:52     ` Yicong Yang
2023-03-15  9:43 ` [PATCH 3/4] hwtracing: hisi_ptt: Export available filters through sysfs Yicong Yang
2023-03-28 17:02   ` Jonathan Cameron
2023-03-29 12:54     ` Yicong Yang
2023-03-15  9:43 ` [PATCH 4/4] hwtracing: hisi_ptt: Advertise PERF_PMU_CAP_NO_EXCLUDE for PTT PMU Yicong Yang
2023-03-28 16:53   ` Jonathan Cameron
2023-03-27 10:49 ` [PATCH 0/4] Improve PTT filter interface and some fixes Yicong Yang

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=20230328172409.000021f5@Huawei.com \
    --to=jonathan.cameron@huawei.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=corbet@lwn.net \
    --cc=helgaas@kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=mathieu.poirier@linaro.org \
    --cc=prime.zeng@huawei.com \
    --cc=suzuki.poulose@arm.com \
    --cc=yangyicong@huawei.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.