summaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/process.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-09-19 19:15:08 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-09-19 19:15:08 +0000
commit03ba4131783cc9e872f8bb26a03f15bc11f27564 (patch)
tree88db8dba75ae06ba3bad08e42c5e52efc162535c /arch/alpha/kernel/process.c
parent257730f99381dd26e10b832fce4c94cae7ac1176 (diff)
- Merge with Linux 2.1.121.
- Bugfixes.
Diffstat (limited to 'arch/alpha/kernel/process.c')
-rw-r--r--arch/alpha/kernel/process.c56
1 files changed, 16 insertions, 40 deletions
diff --git a/arch/alpha/kernel/process.c b/arch/alpha/kernel/process.c
index 697572e7a..6162e3375 100644
--- a/arch/alpha/kernel/process.c
+++ b/arch/alpha/kernel/process.c
@@ -75,58 +75,34 @@ sys_sethae(unsigned long hae, unsigned long a1, unsigned long a2,
return 0;
}
-#ifdef __SMP__
-/* This is being executed in task 0 'user space'. */
-#define resched_needed() 1
-int
-cpu_idle(void *unused)
+static void __attribute__((noreturn))
+do_cpu_idle(void)
{
- extern volatile int smp_commenced;
-
- current->priority = -100;
+ /* An endless idle loop with no priority at all. */
+ current->priority = 0;
while (1) {
+ check_pgt_cache();
run_task_queue(&tq_scheduler);
- /* endless idle loop with no priority at all */
- current->counter = -100;
- if (!smp_commenced || resched_needed()) {
- schedule();
- }
+ current->counter = 0;
+ schedule();
}
}
-asmlinkage int
-sys_idle(void)
+#ifdef __SMP__
+void
+cpu_idle(void *unused)
{
- if(current->pid != 0)
- return -EPERM;
-
- cpu_idle(NULL);
- return 0;
+ do_cpu_idle();
}
-
-#else /* __SMP__ */
+#endif
asmlinkage int
sys_idle(void)
{
- int ret = -EPERM;
-
- lock_kernel();
- if (current->pid != 0)
- goto out;
-
- /* endless idle loop with no priority at all */
- current->counter = -100;
- for (;;) {
- check_pgt_cache();
- schedule();
- }
- ret = 0;
-out:
- unlock_kernel();
- return ret;
+ if (current->pid == 0)
+ do_cpu_idle();
+ return -EPERM;
}
-#endif /* __SMP__ */
void
generic_kill_arch (int mode, char *restart_cmd)
@@ -154,7 +130,7 @@ generic_kill_arch (int mode, char *restart_cmd)
cpup->ipc_buffer[0] = 0;
} else {
flags |= 0x00030000UL; /* "warm bootstrap" */
- strncpy(cpup->ipc_buffer, restart_cmd,
+ strncpy((char *)cpup->ipc_buffer, restart_cmd,
sizeof(cpup->ipc_buffer));
}
}