All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: Joseph Jang <jjang@nvidia.com>
Cc: shuah@kernel.org, tglx@linutronix.de, mochs@nvidia.com,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-tegra@vger.kernel.org
Subject: Re: [PATCH] selftest: drivers: Add support to check duplicate hwirq
Date: Fri, 18 Oct 2024 14:34:11 -0500	[thread overview]
Message-ID: <20241018193411.GA758389@bhelgaas> (raw)
In-Reply-To: <20240904014426.3404397-1-jjang@nvidia.com>

On Tue, Sep 03, 2024 at 06:44:26PM -0700, Joseph Jang wrote:
> Validate there are no duplicate hwirq from the irq debug
> file system /sys/kernel/debug/irq/irqs/* per chip name.
> 
> One example log show 2 duplicated hwirq in the irq debug
> file system.
> 
> $ sudo cat /sys/kernel/debug/irq/irqs/163
> handler:  handle_fasteoi_irq
> device:   0019:00:00.0
>      <SNIP>
> node:     1
> affinity: 72-143
> effectiv: 76
> domain:  irqchip@0x0000100022040000-3
>  hwirq:   0xc8000000
>  chip:    ITS-MSI
>   flags:   0x20
> 
> $ sudo cat /sys/kernel/debug/irq/irqs/174
> handler:  handle_fasteoi_irq
> device:   0039:00:00.0
>     <SNIP>
> node:     3
> affinity: 216-287
> effectiv: 221
> domain:  irqchip@0x0000300022040000-3
>  hwirq:   0xc8000000
>  chip:    ITS-MSI
>   flags:   0x20
> 
> The irq-check.sh can help to collect hwirq and chip name from
> /sys/kernel/debug/irq/irqs/* and print error log when find duplicate
> hwirq per chip name.
> 
> Kernel patch ("PCI/MSI: Fix MSI hwirq truncation") [1] fix above issue.
> [1]: https://lore.kernel.org/all/20240115135649.708536-1-vidyas@nvidia.com/

I don't know enough about this issue to understand the details.  It
seems like you look for duplicate hwirqs in chips with the same name,
e.g., "ITS-MSI" in this case?  That name seems too generic to me
(might there be several instances of "ITS-MSI" in a system?)

Also, the name may come from chip->irq_print_chip(), so it apparently
relies on irqchip drivers to make the names unique if there are
multiple instances?

I would have expected looking for duplicates inside something more
specific, like "irqchip@0x0000300022040000-3".  But again, I don't
know enough about the problem to speak confidently here.

Cosmetic nits:

  - Tweak subject to match history (use "git log --oneline
    tools/testing/selftests/drivers/" to see it), e.g.,

      selftests: irq: Add check for duplicate hwirq

  - Rewrap commit log to fill 75 columns.  No point in using shorter
    lines.

  - Indent the "$ sudu cat ..." block by a couple spaces since it's
    effectively a quotation, not part of the main text body.

  - Possibly include sample output of irq-check.sh (also indented as a
    quote) when run on the system where you manually found the
    duplicate via "sudo cat /sys/kernel/debug/irq/irqs/..."

  - Reword "The irq-check.sh can help ..." to something like this:

      Add an irq-check.sh test to report errors when there are
      duplicate hwirqs per chip name.

  - Since the kernel patch has already been merged, cite it like this
    instead of using the https://lore URL:

      db744ddd59be ("PCI/MSI: Prevent MSI hardware interrupt number truncation")

> Signed-off-by: Joseph Jang <jjang@nvidia.com>
> Reviewed-by: Matthew R. Ochs <mochs@nvidia.com>
> ---
>  tools/testing/selftests/drivers/irq/Makefile  |  5 +++
>  tools/testing/selftests/drivers/irq/config    |  2 +
>  .../selftests/drivers/irq/irq-check.sh        | 39 +++++++++++++++++++
>  3 files changed, 46 insertions(+)
>  create mode 100644 tools/testing/selftests/drivers/irq/Makefile
>  create mode 100644 tools/testing/selftests/drivers/irq/config
>  create mode 100755 tools/testing/selftests/drivers/irq/irq-check.sh
> 
> diff --git a/tools/testing/selftests/drivers/irq/Makefile b/tools/testing/selftests/drivers/irq/Makefile
> new file mode 100644
> index 000000000000..d6998017c861
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/irq/Makefile
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +TEST_PROGS := irq-check.sh
> +
> +include ../../lib.mk
> diff --git a/tools/testing/selftests/drivers/irq/config b/tools/testing/selftests/drivers/irq/config
> new file mode 100644
> index 000000000000..a53d3b713728
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/irq/config
> @@ -0,0 +1,2 @@
> +CONFIG_GENERIC_IRQ_DEBUGFS=y
> +CONFIG_GENERIC_IRQ_INJECTION=y
> diff --git a/tools/testing/selftests/drivers/irq/irq-check.sh b/tools/testing/selftests/drivers/irq/irq-check.sh
> new file mode 100755
> index 000000000000..e784777043a1
> --- /dev/null
> +++ b/tools/testing/selftests/drivers/irq/irq-check.sh
> @@ -0,0 +1,39 @@
> +#!/bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +
> +# This script need root permission
> +uid=$(id -u)
> +if [ $uid -ne 0 ]; then
> +	echo "SKIP: Must be run as root"
> +	exit 4
> +fi
> +
> +# Ensure debugfs is mounted
> +mount -t debugfs nodev /sys/kernel/debug 2>/dev/null
> +if [ ! -d "/sys/kernel/debug/irq/irqs" ]; then
> +	echo "SKIP: irq debugfs not found"
> +	exit 4
> +fi
> +
> +# Traverse the irq debug file system directory to collect chip_name and hwirq
> +hwirq_list=$(for irq_file in /sys/kernel/debug/irq/irqs/*; do
> +	# Read chip name and hwirq from the irq_file
> +	chip_name=$(cat "$irq_file" | grep -m 1 'chip:' | awk '{print $2}')
> +	hwirq=$(cat "$irq_file" | grep -m 1 'hwirq:' | awk '{print $2}' )
> +
> +	if [ -z "$chip_name" ] || [ -z "$hwirq" ]; then
> +		continue
> +	fi
> +
> +	echo "$chip_name $hwirq"
> +done)
> +
> +dup_hwirq_list=$(echo "$hwirq_list" | sort | uniq -cd)
> +
> +if [ -n "$dup_hwirq_list" ]; then
> +	echo "ERROR: Found duplicate hwirq"
> +	echo "$dup_hwirq_list"
> +	exit 1
> +fi
> +
> +exit 0
> -- 
> 2.34.1
> 

  parent reply	other threads:[~2024-10-18 19:34 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-04  1:44 [PATCH] selftest: drivers: Add support to check duplicate hwirq Joseph Jang
2024-10-18  4:29 ` Joseph Jang
2024-10-18 15:23   ` Shuah Khan
2024-10-18 19:34 ` Bjorn Helgaas [this message]
2024-11-11  7:21   ` Joseph Jang
2024-11-22 17:54     ` Bjorn Helgaas
2024-12-01 11:38       ` Thomas Gleixner

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=20241018193411.GA758389@bhelgaas \
    --to=helgaas@kernel.org \
    --cc=jjang@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mochs@nvidia.com \
    --cc=shuah@kernel.org \
    --cc=tglx@linutronix.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.