All of lore.kernel.org
 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 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.