diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-09-19 19:15:08 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-09-19 19:15:08 +0000 |
commit | 03ba4131783cc9e872f8bb26a03f15bc11f27564 (patch) | |
tree | 88db8dba75ae06ba3bad08e42c5e52efc162535c /arch/alpha/kernel/process.c | |
parent | 257730f99381dd26e10b832fce4c94cae7ac1176 (diff) |
- Merge with Linux 2.1.121.
- Bugfixes.
Diffstat (limited to 'arch/alpha/kernel/process.c')
-rw-r--r-- | arch/alpha/kernel/process.c | 56 |
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)); } } |