Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull IRQ changes from Ingo Molnar:
"The biggest change this cycle are the softirq/hardirq stack
interaction and nesting fixes, cleanups and reorganizations from
Frederic. This is the longer followup story to the softirq nesting
fix that is already upstream (commit ded7975475
: "irq: Force hardirq
exit's softirq processing on its own stack")"
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
irqchip: bcm2835: Convert to use IRQCHIP_DECLARE macro
powerpc: Tell about irq stack coverage
x86: Tell about irq stack coverage
irq: Optimize softirq stack selection in irq exit
irq: Justify the various softirq stack choices
irq: Improve a bit softirq debugging
irq: Optimize call to softirq on hardirq exit
irq: Consolidate do_softirq() arch overriden implementations
x86/irq: Correct comment about i8259 initialization
This commit is contained in:
@@ -698,30 +698,19 @@ void __irq_entry handler_irq(int pil, struct pt_regs *regs)
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
void do_softirq(void)
|
||||
void do_softirq_own_stack(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
void *orig_sp, *sp = softirq_stack[smp_processor_id()];
|
||||
|
||||
if (in_interrupt())
|
||||
return;
|
||||
sp += THREAD_SIZE - 192 - STACK_BIAS;
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
if (local_softirq_pending()) {
|
||||
void *orig_sp, *sp = softirq_stack[smp_processor_id()];
|
||||
|
||||
sp += THREAD_SIZE - 192 - STACK_BIAS;
|
||||
|
||||
__asm__ __volatile__("mov %%sp, %0\n\t"
|
||||
"mov %1, %%sp"
|
||||
: "=&r" (orig_sp)
|
||||
: "r" (sp));
|
||||
__do_softirq();
|
||||
__asm__ __volatile__("mov %0, %%sp"
|
||||
: : "r" (orig_sp));
|
||||
}
|
||||
|
||||
local_irq_restore(flags);
|
||||
__asm__ __volatile__("mov %%sp, %0\n\t"
|
||||
"mov %1, %%sp"
|
||||
: "=&r" (orig_sp)
|
||||
: "r" (sp));
|
||||
__do_softirq();
|
||||
__asm__ __volatile__("mov %0, %%sp"
|
||||
: : "r" (orig_sp));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
|
Reference in New Issue
Block a user