summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sparc64/kernel/smp.c')
-rw-r--r--arch/sparc64/kernel/smp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c
index 8dd471be6..932534c05 100644
--- a/arch/sparc64/kernel/smp.c
+++ b/arch/sparc64/kernel/smp.c
@@ -3,6 +3,7 @@
* Copyright (C) 1997 David S. Miller (davem@caip.rutgers.edu)
*/
+#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/tasks.h>
@@ -23,6 +24,7 @@
#include <asm/spinlock.h>
#include <asm/hardirq.h>
#include <asm/softirq.h>
+#include <asm/uaccess.h>
#define __KERNEL_SYSCALLS__
#include <linux/unistd.h>
@@ -346,7 +348,7 @@ static void smp_cross_call_avoidance(struct mm_struct *mm)
spin_lock(&scheduler_lock);
get_new_mmu_context(mm, &tlb_context_cache);
mm->cpu_vm_mask = (1UL << smp_processor_id());
- if(current->tss.current_ds) {
+ if(segment_eq(current->tss.current_ds,USER_DS)) {
u32 ctx = mm->context & 0x1fff;
current->tss.ctx = ctx;
@@ -473,6 +475,7 @@ void smp_penguin_jailcell(void)
static inline void sparc64_do_profile(unsigned long pc)
{
+#ifdef CONFIG_PROFILE
if(prof_buffer && current->pid) {
extern int _stext;
@@ -483,6 +486,7 @@ static inline void sparc64_do_profile(unsigned long pc)
pc = prof_len - 1;
atomic_inc((atomic_t *)&prof_buffer[pc]);
}
+#endif
}
static unsigned long real_tick_offset, current_tick_offset;
@@ -510,7 +514,7 @@ void smp_percpu_timer_interrupt(struct pt_regs *regs)
update_one_process(current, 1, user, !user);
if(--current->counter < 0) {
current->counter = 0;
- resched_force();
+ need_resched = 1;
}
if(user) {