mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
[PATCH] x86-64: don't use set_irq_regs()
We don't need to setup _irq_regs in smp_xxx_interrupt (except apic timer). These handlers run with irqs disabled and do not call functions which need "struct pt_regs". Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andi Kleen <ak@suse.de> Acked-by: Ingo Molnar <mingo@elte.hu> Cc: Andi Kleen <ak@suse.de> Acked-By: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org>
This commit is contained in:
parent
ad892f5e0d
commit
6bedb2ccb0
@ -321,7 +321,6 @@ static inline void leave_mm (unsigned long cpu)
|
|||||||
|
|
||||||
fastcall void smp_invalidate_interrupt(struct pt_regs *regs)
|
fastcall void smp_invalidate_interrupt(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
|
||||||
unsigned long cpu;
|
unsigned long cpu;
|
||||||
|
|
||||||
cpu = get_cpu();
|
cpu = get_cpu();
|
||||||
@ -352,7 +351,6 @@ fastcall void smp_invalidate_interrupt(struct pt_regs *regs)
|
|||||||
smp_mb__after_clear_bit();
|
smp_mb__after_clear_bit();
|
||||||
out:
|
out:
|
||||||
put_cpu_no_resched();
|
put_cpu_no_resched();
|
||||||
set_irq_regs(old_regs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
|
static void flush_tlb_others(cpumask_t cpumask, struct mm_struct *mm,
|
||||||
@ -607,14 +605,11 @@ void smp_send_stop(void)
|
|||||||
*/
|
*/
|
||||||
fastcall void smp_reschedule_interrupt(struct pt_regs *regs)
|
fastcall void smp_reschedule_interrupt(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
|
||||||
ack_APIC_irq();
|
ack_APIC_irq();
|
||||||
set_irq_regs(old_regs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fastcall void smp_call_function_interrupt(struct pt_regs *regs)
|
fastcall void smp_call_function_interrupt(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
|
||||||
void (*func) (void *info) = call_data->func;
|
void (*func) (void *info) = call_data->func;
|
||||||
void *info = call_data->info;
|
void *info = call_data->info;
|
||||||
int wait = call_data->wait;
|
int wait = call_data->wait;
|
||||||
@ -637,7 +632,6 @@ fastcall void smp_call_function_interrupt(struct pt_regs *regs)
|
|||||||
mb();
|
mb();
|
||||||
atomic_inc(&call_data->finished);
|
atomic_inc(&call_data->finished);
|
||||||
}
|
}
|
||||||
set_irq_regs(old_regs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user