2019-04-04 07:36:04

by Kefeng Wang

[permalink] [raw]
Subject: [PATCH] genirq: Fix uninitialized request_mutex

When !CONFIG_SPARSE_IRQ, request_mutex of struct irq_desc won't
be initialiezed, it leads to system hung, fix it.

Fixes: 9114014cf4e6 ("genirq: Add mutex to irq desc to serialize request/free_irq()")
Signed-off-by: Kefeng Wang <[email protected]>
---
kernel/irq/irqdesc.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 13539e12cd80..9f8a709337cf 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -558,6 +558,7 @@ int __init early_irq_init(void)
alloc_masks(&desc[i], node);
raw_spin_lock_init(&desc[i].lock);
lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
+ mutex_init(&desc[i].request_mutex);
desc_set_defaults(i, &desc[i], node, NULL, NULL);
}
return arch_early_irq_init();
--
2.20.1


2019-04-04 08:01:53

by Mukesh Ojha

[permalink] [raw]
Subject: Re: [PATCH] genirq: Fix uninitialized request_mutex


On 4/4/2019 1:15 PM, Kefeng Wang wrote:
> When !CONFIG_SPARSE_IRQ, request_mutex of struct irq_desc won't
> be initialiezed, it leads to system hung, fix it.
>
> Fixes: 9114014cf4e6 ("genirq: Add mutex to irq desc to serialize request/free_irq()")
> Signed-off-by: Kefeng Wang <[email protected]>


Reviewed-by: Mukesh Ojha <[email protected]>

Cheers,
-Mukesh

> ---
> kernel/irq/irqdesc.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
> index 13539e12cd80..9f8a709337cf 100644
> --- a/kernel/irq/irqdesc.c
> +++ b/kernel/irq/irqdesc.c
> @@ -558,6 +558,7 @@ int __init early_irq_init(void)
> alloc_masks(&desc[i], node);
> raw_spin_lock_init(&desc[i].lock);
> lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
> + mutex_init(&desc[i].request_mutex);
> desc_set_defaults(i, &desc[i], node, NULL, NULL);
> }
> return arch_early_irq_init();

Subject: [tip:irq/urgent] genirq: Initialize request_mutex if CONFIG_SPARSE_IRQ=n

Commit-ID: e8458e7afa855317b14915d7b86ab3caceea7eb6
Gitweb: https://git.kernel.org/tip/e8458e7afa855317b14915d7b86ab3caceea7eb6
Author: Kefeng Wang <[email protected]>
AuthorDate: Thu, 4 Apr 2019 15:45:12 +0800
Committer: Thomas Gleixner <[email protected]>
CommitDate: Fri, 5 Apr 2019 14:37:56 +0200

genirq: Initialize request_mutex if CONFIG_SPARSE_IRQ=n

When CONFIG_SPARSE_IRQ is disable, the request_mutex in struct irq_desc
is not initialized which causes malfunction.

Fixes: 9114014cf4e6 ("genirq: Add mutex to irq desc to serialize request/free_irq()")
Signed-off-by: Kefeng Wang <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Reviewed-by: Mukesh Ojha <[email protected]>
Cc: Marc Zyngier <[email protected]>
Cc: <[email protected]>
Cc: [email protected]
Link: https://lkml.kernel.org/r/[email protected]

---
kernel/irq/irqdesc.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 13539e12cd80..9f8a709337cf 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -558,6 +558,7 @@ int __init early_irq_init(void)
alloc_masks(&desc[i], node);
raw_spin_lock_init(&desc[i].lock);
lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
+ mutex_init(&desc[i].request_mutex);
desc_set_defaults(i, &desc[i], node, NULL, NULL);
}
return arch_early_irq_init();