stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Huacai Chen <chenhuacai@loongson.cn>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	linux-kernel@vger.kernel.org, Xuefeng Li <lixuefeng@loongson.cn>,
	Huacai Chen <chenhuacai@gmail.com>,
	Jiaxun Yang <jiaxun.yang@flygoat.com>,
	stable@vger.kernel.org
Subject: Re: [PATCH] irqchip/loongson-pch-msi: Fix hwirq setting problem
Date: Sun, 29 Aug 2021 11:24:06 +0100	[thread overview]
Message-ID: <87sfysczw9.wl-maz@kernel.org> (raw)
In-Reply-To: <20210829092933.4061429-1-chenhuacai@loongson.cn>

On Sun, 29 Aug 2021 10:29:33 +0100,
Huacai Chen <chenhuacai@loongson.cn> wrote:
> 
> The default msi_domain_ops_init() doesn't set hwirq for irq_data,
> which causes the hwirq displayed in /proc/interrupts very strange.
> We fix this by providing a custom msi_domain_ops_init().

I suggest you start by reading pci_msi_domain_set_desc(). Can you
demonstrate that this function isn't called and that the numbers
displayed in /proc/interrupts are just random crap pulled out of thin
air?

> 
> Before this patch:
> 
> root@loongson-pc:~# cat /proc/interrupts
>            CPU0       CPU1
>  30:          0          0      PCH PIC  47  acpi
>  42:      80020          0      LIOINTC  10  ttyS0
>  44:          1          0      PCH PIC  49  ohci_hcd:usb3
>  45:          0          0      PCH PIC  48  ehci_hcd:usb1
>  46:          1          0      PCH PIC  51  ohci_hcd:usb4
>  47:          0          0      PCH PIC  50  ehci_hcd:usb2
>  54:          0          0      PCH PIC  16  ahci[0000:00:08.0]
>  55:       4364          0      PCH PIC  17  ahci[0000:00:08.1]
>  56:        103          0      PCH PIC  18  ahci[0000:00:08.2]
>  57:          0          0     PCH PCI MSI 1048576  ahci[0000:02:00.0]
>  58:          0          0     PCH PCI MSI 524288  xhci_hcd
>  59:          0          0     PCH PCI MSI 524289  xhci_hcd
>  60:          0          0     PCH PCI MSI 524290  xhci_hcd
>  61:          0          0     PCH PCI MSI 524291  xhci_hcd
>  62:          1          0     PCH PCI MSI 1572864  enp3s0f0
>  63:          6        173     PCH PCI MSI 1572865  enp3s0f0-rx-0
>  64:          6        151     PCH PCI MSI 1572866  enp3s0f0-rx-1
>  65:          6        151     PCH PCI MSI 1572867  enp3s0f0-rx-2
>  66:         20          0     PCH PCI MSI 1572868  enp3s0f0-tx-0
>  67:         20          0     PCH PCI MSI 1572869  enp3s0f0-tx-1
>  68:        170          0     PCH PCI MSI 1572870  enp3s0f0-tx-2
> 
> After this patch:
> 
> root@loongson-pc:~# cat /proc/interrupts
>            CPU0       CPU1
>  30:          0          0      PCH PIC  47  acpi
>  42:      83960          0      LIOINTC  10  ttyS0
>  44:          1          0      PCH PIC  49  ohci_hcd:usb3
>  45:          0          0      PCH PIC  48  ehci_hcd:usb1
>  46:          1          0      PCH PIC  51  ohci_hcd:usb4
>  47:          0          0      PCH PIC  50  ehci_hcd:usb2
>  54:          0          0      PCH PIC  16  ahci[0000:00:08.0]
>  55:       6688         13      PCH PIC  17  ahci[0000:00:08.1]
>  56:        113          2      PCH PIC  18  ahci[0000:00:08.2]
>  57:          0          0     PCH PCI MSI  67  ahci[0000:02:00.0]
>  58:          0          0     PCH PCI MSI  68  xhci_hcd
>  59:          0          0     PCH PCI MSI  69  xhci_hcd
>  60:          0          0     PCH PCI MSI  70  xhci_hcd
>  61:          0          0     PCH PCI MSI  71  xhci_hcd
>  62:          1          0     PCH PCI MSI  72  enp3s0f0
>  63:         12          4     PCH PCI MSI  73  enp3s0f0-rx-0
>  64:         12          4     PCH PCI MSI  74  enp3s0f0-rx-1
>  65:         12          0     PCH PCI MSI  75  enp3s0f0-rx-2
>  66:         16          0     PCH PCI MSI  76  enp3s0f0-tx-0
>  67:         22          0     PCH PCI MSI  77  enp3s0f0-tx-1
>  68:         12          0     PCH PCI MSI  78  enp3s0f0-tx-2
> 
> Fixes: 632dcc2c75ef6de327 ("irqchip: Add Loongson PCH MSI controller")
> Cc: stable@vger.kernel.org
> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
> ---
>  drivers/irqchip/irq-loongson-pch-msi.c | 19 ++++++++++++++++++-
>  1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/irqchip/irq-loongson-pch-msi.c b/drivers/irqchip/irq-loongson-pch-msi.c
> index 32562b7e681b..c91a731abd99 100644
> --- a/drivers/irqchip/irq-loongson-pch-msi.c
> +++ b/drivers/irqchip/irq-loongson-pch-msi.c
> @@ -81,10 +81,25 @@ static void pch_msi_compose_msi_msg(struct irq_data *data,
>  	msg->data = data->hwirq;
>  }
>  
> +static int msi_domain_ops_init(struct irq_domain *domain,
> +				struct msi_domain_info *info,
> +				unsigned int virq, irq_hw_number_t hwirq,
> +				msi_alloc_info_t *arg)
> +{
> +	irq_domain_set_hwirq_and_chip(domain, virq, arg->hwirq, info->chip,
> +					info->chip_data);
> +	return 0;
> +}
> +
> +static struct msi_domain_ops pch_msi_domain_ops = {
> +	.msi_init	= msi_domain_ops_init,
> +};
> +
>  static struct msi_domain_info pch_msi_domain_info = {
>  	.flags	= MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
>  		  MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX,
>  	.chip	= &pch_msi_irq_chip,
> +	.ops	= &pch_msi_domain_ops,
>  };
>  
>  static struct irq_chip middle_irq_chip = {
> @@ -112,8 +127,9 @@ static int pch_msi_middle_domain_alloc(struct irq_domain *domain,
>  					   unsigned int virq,
>  					   unsigned int nr_irqs, void *args)
>  {
> -	struct pch_msi_data *priv = domain->host_data;
>  	int hwirq, err, i;
> +	struct pch_msi_data *priv = domain->host_data;
> +	msi_alloc_info_t *info = (msi_alloc_info_t *)args;
>  
>  	hwirq = pch_msi_allocate_hwirq(priv, nr_irqs);
>  	if (hwirq < 0)
> @@ -127,6 +143,7 @@ static int pch_msi_middle_domain_alloc(struct irq_domain *domain,
>  		irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i,
>  					      &middle_irq_chip, priv);
>  	}
> +	info->hwirq = hwirq;
>  
>  	return 0;
>  

There is nothing to fix here. The hwirq numbers in /proc/interrupts
are the way they are for a good reason, and there is no need to make
them look "better".

	M.

-- 
Without deviation from the norm, progress is not possible.

      reply	other threads:[~2021-08-29 10:24 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-29  9:29 [PATCH] irqchip/loongson-pch-msi: Fix hwirq setting problem Huacai Chen
2021-08-29 10:24 ` Marc Zyngier [this message]

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=87sfysczw9.wl-maz@kernel.org \
    --to=maz@kernel.org \
    --cc=chenhuacai@gmail.com \
    --cc=chenhuacai@loongson.cn \
    --cc=jiaxun.yang@flygoat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lixuefeng@loongson.cn \
    --cc=stable@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).