sparseirq: fix desc->lock init
Impact: cleanup init_one_irq_desc() does not initialize the desc->lock properly - you cannot init a lock by memcpying some other lock on it. This happens to work right now (because irq_desc_init is never in use), but it's a dangerous construct nevertheless, so fix it. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
8b07cd4451
commit
793f7b12a0
2 changed files with 3 additions and 0 deletions
|
@ -93,6 +93,8 @@ void __attribute__((weak)) arch_init_chip_data(struct irq_desc *desc, int cpu)
|
||||||
static void init_one_irq_desc(int irq, struct irq_desc *desc, int cpu)
|
static void init_one_irq_desc(int irq, struct irq_desc *desc, int cpu)
|
||||||
{
|
{
|
||||||
memcpy(desc, &irq_desc_init, sizeof(struct irq_desc));
|
memcpy(desc, &irq_desc_init, sizeof(struct irq_desc));
|
||||||
|
|
||||||
|
spin_lock_init(&desc->lock);
|
||||||
desc->irq = irq;
|
desc->irq = irq;
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
desc->cpu = cpu;
|
desc->cpu = cpu;
|
||||||
|
|
|
@ -42,6 +42,7 @@ static void init_copy_one_irq_desc(int irq, struct irq_desc *old_desc,
|
||||||
struct irq_desc *desc, int cpu)
|
struct irq_desc *desc, int cpu)
|
||||||
{
|
{
|
||||||
memcpy(desc, old_desc, sizeof(struct irq_desc));
|
memcpy(desc, old_desc, sizeof(struct irq_desc));
|
||||||
|
spin_lock_init(&desc->lock);
|
||||||
desc->cpu = cpu;
|
desc->cpu = cpu;
|
||||||
lockdep_set_class(&desc->lock, &irq_desc_lock_class);
|
lockdep_set_class(&desc->lock, &irq_desc_lock_class);
|
||||||
init_copy_kstat_irqs(old_desc, desc, cpu, nr_cpu_ids);
|
init_copy_kstat_irqs(old_desc, desc, cpu, nr_cpu_ids);
|
||||||
|
|
Loading…
Reference in a new issue