From f183f1f8c0e529076bfccafda39313c8131e5ccc Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Sun, 8 Feb 2009 16:18:03 -0800 Subject: [PATCH] --- yaml --- r: 135777 b: refs/heads/master c: 0f3c2a89c1451cdf6328f99977bd9decd4f708e1 h: refs/heads/master i: 135775: b2f9efc00ba4af67428fce1092e443b1074d15ae v: v3 --- [refs] | 2 +- trunk/kernel/irq/chip.c | 1 + trunk/kernel/irq/handle.c | 5 +++++ trunk/kernel/irq/internals.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 41709a874bed..cfd847cfbf6a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4d87c5bec5389625d80b71108795aecf82cd670d +refs/heads/master: 0f3c2a89c1451cdf6328f99977bd9decd4f708e1 diff --git a/trunk/kernel/irq/chip.c b/trunk/kernel/irq/chip.c index f63c706d25e1..1310856cb22b 100644 --- a/trunk/kernel/irq/chip.c +++ b/trunk/kernel/irq/chip.c @@ -78,6 +78,7 @@ void dynamic_irq_cleanup(unsigned int irq) desc->handle_irq = handle_bad_irq; desc->chip = &no_irq_chip; desc->name = NULL; + clear_kstat_irqs(desc); spin_unlock_irqrestore(&desc->lock, flags); } diff --git a/trunk/kernel/irq/handle.c b/trunk/kernel/irq/handle.c index 48299a8a22f8..1b473e7569aa 100644 --- a/trunk/kernel/irq/handle.c +++ b/trunk/kernel/irq/handle.c @@ -242,6 +242,11 @@ struct irq_desc *irq_to_desc_alloc_cpu(unsigned int irq, int cpu) } #endif /* !CONFIG_SPARSE_IRQ */ +void clear_kstat_irqs(struct irq_desc *desc) +{ + memset(desc->kstat_irqs, 0, nr_cpu_ids * sizeof(*(desc->kstat_irqs))); +} + /* * What should we do if we get a hw irq event on an illegal vector? * Each architecture has to answer this themself. diff --git a/trunk/kernel/irq/internals.h b/trunk/kernel/irq/internals.h index e6d0a43cc125..b60950bf5a16 100644 --- a/trunk/kernel/irq/internals.h +++ b/trunk/kernel/irq/internals.h @@ -15,6 +15,7 @@ extern int __irq_set_trigger(struct irq_desc *desc, unsigned int irq, extern struct lock_class_key irq_desc_lock_class; extern void init_kstat_irqs(struct irq_desc *desc, int cpu, int nr); +extern void clear_kstat_irqs(struct irq_desc *desc); extern spinlock_t sparse_irq_lock; extern struct irq_desc *irq_desc_ptrs[NR_IRQS];