diff options
author | Philippe Langlais <philippe.langlais@linaro.org> | 2012-03-19 09:23:27 +0100 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@linaro.org> | 2012-03-19 09:23:27 +0100 |
commit | 350ab868ed4959536700fa201abd7dab562b171c (patch) | |
tree | 16f96df09fe3ac2ab1f840ab9b5b782fd89f9a43 /kernel | |
parent | 7f98542d82ea8fe5caec2e3244c9ea6cfe5db5d1 (diff) | |
parent | 7dd388a9d2f34f7a04e443a9d1d83babf5fe0824 (diff) |
Merge topic branch 'core' into integration-linux-ux500-3.3
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/irq/chip.c | 8 | ||||
-rw-r--r-- | kernel/kexec.c | 12 |
2 files changed, 17 insertions, 3 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index fb7db75ee0c..9b571fabf66 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -265,7 +265,7 @@ void handle_nested_irq(unsigned int irq) { struct irq_desc *desc = irq_to_desc(irq); struct irqaction *action; - irqreturn_t action_ret; + irqreturn_t action_ret = IRQ_NONE; might_sleep(); @@ -280,7 +280,11 @@ void handle_nested_irq(unsigned int irq) irqd_set(&desc->irq_data, IRQD_IRQ_INPROGRESS); raw_spin_unlock_irq(&desc->lock); - action_ret = action->thread_fn(action->irq, action->dev_id); + do { + action_ret |= action->thread_fn(action->irq, action->dev_id); + action = action->next; + } while (action); + if (!noirqdebug) note_interrupt(irq, desc, action_ret); diff --git a/kernel/kexec.c b/kernel/kexec.c index 7b088678670..a650adb2594 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -49,6 +49,8 @@ u32 vmcoreinfo_note[VMCOREINFO_NOTE_SIZE/4]; size_t vmcoreinfo_size; size_t vmcoreinfo_max_size = sizeof(vmcoreinfo_data); +ATOMIC_NOTIFIER_HEAD(crash_percpu_notifier_list); + /* Location of the reserved area for the crash kernel */ struct resource crashk_res = { .name = "Crash kernel", @@ -1081,6 +1083,7 @@ asmlinkage long compat_sys_kexec_load(unsigned long entry, void crash_kexec(struct pt_regs *regs) { + struct pt_regs fixed_regs; /* Take the kexec_mutex here to prevent sys_kexec_load * running on one cpu from replacing the crash kernel * we are using after a panic on a different cpu. @@ -1091,13 +1094,20 @@ void crash_kexec(struct pt_regs *regs) */ if (mutex_trylock(&kexec_mutex)) { if (kexec_crash_image) { - struct pt_regs fixed_regs; crash_setup_regs(&fixed_regs, regs); crash_save_vmcoreinfo(); machine_crash_shutdown(&fixed_regs); machine_kexec(kexec_crash_image); } +#ifdef CONFIG_CRASH_SWRESET + else { + crash_setup_regs(&fixed_regs, regs); + crash_save_vmcoreinfo(); + machine_crash_shutdown(&fixed_regs); + machine_crash_swreset(); + } +#endif mutex_unlock(&kexec_mutex); } } |