2020-02-21 02:09:28

by Zenghui Yu

[permalink] [raw]
Subject: [PATCH] genirq/irqdomain: Make sure all irq domain flags are distinct

This was noticed when printing debugfs for MSIs on my ARM64 server.
The new dstate IRQD_MSI_NOMASK_QUIRK came out surprisingly while it
should only be the x86 stuff for the time being...

It's the overlap in irqdomain flags which leads to this confusion.
(1 << 1) might be a good choice for old IRQ_DOMAIN_NAME_ALLOCATED,
use it to avoid this overlap.

Fixes: 6f1a4891a592 ("x86/apic/msi: Plug non-maskable MSI affinity race")
Signed-off-by: Zenghui Yu <[email protected]>
---
include/linux/irqdomain.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index b2d47571ab67..8d062e86d954 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -192,7 +192,7 @@ enum {
IRQ_DOMAIN_FLAG_HIERARCHY = (1 << 0),

/* Irq domain name was allocated in __irq_domain_add() */
- IRQ_DOMAIN_NAME_ALLOCATED = (1 << 6),
+ IRQ_DOMAIN_NAME_ALLOCATED = (1 << 1),

/* Irq domain is an IPI domain with virq per cpu */
IRQ_DOMAIN_FLAG_IPI_PER_CPU = (1 << 2),
--
2.19.1



2020-02-21 10:14:41

by Marc Zyngier

[permalink] [raw]
Subject: Re: [PATCH] genirq/irqdomain: Make sure all irq domain flags are distinct

On 2020-02-21 02:07, Zenghui Yu wrote:
> This was noticed when printing debugfs for MSIs on my ARM64 server.
> The new dstate IRQD_MSI_NOMASK_QUIRK came out surprisingly while it
> should only be the x86 stuff for the time being...
>
> It's the overlap in irqdomain flags which leads to this confusion.
> (1 << 1) might be a good choice for old IRQ_DOMAIN_NAME_ALLOCATED,
> use it to avoid this overlap.
>
> Fixes: 6f1a4891a592 ("x86/apic/msi: Plug non-maskable MSI affinity
> race")

To be fair, the real source of the bug is this:

6a6544e520abe ("genirq/irqdomain: Remove auto-recursive hierarchy
support")

> Signed-off-by: Zenghui Yu <[email protected]>
> ---
> include/linux/irqdomain.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
> index b2d47571ab67..8d062e86d954 100644
> --- a/include/linux/irqdomain.h
> +++ b/include/linux/irqdomain.h
> @@ -192,7 +192,7 @@ enum {
> IRQ_DOMAIN_FLAG_HIERARCHY = (1 << 0),
>
> /* Irq domain name was allocated in __irq_domain_add() */
> - IRQ_DOMAIN_NAME_ALLOCATED = (1 << 6),
> + IRQ_DOMAIN_NAME_ALLOCATED = (1 << 1),
>
> /* Irq domain is an IPI domain with virq per cpu */
> IRQ_DOMAIN_FLAG_IPI_PER_CPU = (1 << 2),

Acked-by: Marc Zyngier <[email protected]>

Thomas, do you mind picking this one up, as I don't have anything
else for the time being?


M.
--
Jazz is not dead. It just smells funny...

Subject: [tip: irq/urgent] genirq/irqdomain: Make sure all irq domain flags are distinct

The following commit has been merged into the irq/urgent branch of tip:

Commit-ID: 2546287c5fb363a0165933ae2181c92f03e701d0
Gitweb: https://git.kernel.org/tip/2546287c5fb363a0165933ae2181c92f03e701d0
Author: Zenghui Yu <[email protected]>
AuthorDate: Fri, 21 Feb 2020 10:07:25 +08:00
Committer: Thomas Gleixner <[email protected]>
CommitterDate: Fri, 21 Feb 2020 11:29:15 +01:00

genirq/irqdomain: Make sure all irq domain flags are distinct

This was noticed when printing debugfs for MSIs on my ARM64 server. The
new dstate IRQD_MSI_NOMASK_QUIRK came out surprisingly while it should only
be the x86 stuff for the time being...

The new MSI quirk flag uses the same bit as IRQ_DOMAIN_NAME_ALLOCATED which
is oddly defined as bit 6 for no good reason.

Switch it to the non used bit 1.

Fixes: 6f1a4891a592 ("x86/apic/msi: Plug non-maskable MSI affinity race")
Signed-off-by: Zenghui Yu <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Cc: [email protected]
Link: https://lkml.kernel.org/r/[email protected]
---
include/linux/irqdomain.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index b2d4757..8d062e8 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -192,7 +192,7 @@ enum {
IRQ_DOMAIN_FLAG_HIERARCHY = (1 << 0),

/* Irq domain name was allocated in __irq_domain_add() */
- IRQ_DOMAIN_NAME_ALLOCATED = (1 << 6),
+ IRQ_DOMAIN_NAME_ALLOCATED = (1 << 1),

/* Irq domain is an IPI domain with virq per cpu */
IRQ_DOMAIN_FLAG_IPI_PER_CPU = (1 << 2),

2020-02-24 11:31:24

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH] genirq/irqdomain: Make sure all irq domain flags are distinct

Marc Zyngier <[email protected]> writes:
> On 2020-02-21 02:07, Zenghui Yu wrote:
>> Fixes: 6f1a4891a592 ("x86/apic/msi: Plug non-maskable MSI affinity
>> race")
>
> To be fair, the real source of the bug is this:
>
> 6a6544e520abe ("genirq/irqdomain: Remove auto-recursive hierarchy
> support")

Yes, but up to the MSI commit it was not a problem :)