git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[pandora-kernel.git]
/
arch
/
i386
/
kernel
/
smp.c
diff --git
a/arch/i386/kernel/smp.c
b/arch/i386/kernel/smp.c
index
1b080ab
..
31e5c65
100644
(file)
--- a/
arch/i386/kernel/smp.c
+++ b/
arch/i386/kernel/smp.c
@@
-321,6
+321,7
@@
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;
cpu = get_cpu();
unsigned long cpu;
cpu = get_cpu();
@@
-351,6
+352,7
@@
fastcall void smp_invalidate_interrupt(struct pt_regs *regs)
smp_mb__after_clear_bit();
out:
put_cpu_no_resched();
smp_mb__after_clear_bit();
out:
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,
@@
-605,11
+607,14
@@
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 *info = call_data->info;
int wait = call_data->wait;
void (*func) (void *info) = call_data->func;
void *info = call_data->info;
int wait = call_data->wait;
@@
-632,6
+637,7
@@
fastcall void smp_call_function_interrupt(struct pt_regs *regs)
mb();
atomic_inc(&call_data->finished);
}
mb();
atomic_inc(&call_data->finished);
}
+ set_irq_regs(old_regs);
}
/*
}
/*