diff options
Diffstat (limited to 'arch/um/kernel/smp.c')
| -rw-r--r-- | arch/um/kernel/smp.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/arch/um/kernel/smp.c b/arch/um/kernel/smp.c index 72113b0a96e7..511116aebaf7 100644 --- a/arch/um/kernel/smp.c +++ b/arch/um/kernel/smp.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com) | 2 | * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com) |
| 3 | * Licensed under the GPL | 3 | * Licensed under the GPL |
| 4 | */ | 4 | */ |
| @@ -77,9 +77,9 @@ static int idle_proc(void *cpup) | |||
| 77 | if(err < 0) | 77 | if(err < 0) |
| 78 | panic("CPU#%d failed to create IPI pipe, err = %d", cpu, -err); | 78 | panic("CPU#%d failed to create IPI pipe, err = %d", cpu, -err); |
| 79 | 79 | ||
| 80 | activate_ipi(cpu_data[cpu].ipi_pipe[0], | 80 | os_set_fd_async(cpu_data[cpu].ipi_pipe[0], |
| 81 | current->thread.mode.tt.extern_pid); | 81 | current->thread.mode.tt.extern_pid); |
| 82 | 82 | ||
| 83 | wmb(); | 83 | wmb(); |
| 84 | if (cpu_test_and_set(cpu, cpu_callin_map)) { | 84 | if (cpu_test_and_set(cpu, cpu_callin_map)) { |
| 85 | printk("huh, CPU#%d already present??\n", cpu); | 85 | printk("huh, CPU#%d already present??\n", cpu); |
| @@ -106,7 +106,7 @@ static struct task_struct *idle_thread(int cpu) | |||
| 106 | panic("copy_process failed in idle_thread, error = %ld", | 106 | panic("copy_process failed in idle_thread, error = %ld", |
| 107 | PTR_ERR(new_task)); | 107 | PTR_ERR(new_task)); |
| 108 | 108 | ||
| 109 | cpu_tasks[cpu] = ((struct cpu_task) | 109 | cpu_tasks[cpu] = ((struct cpu_task) |
| 110 | { .pid = new_task->thread.mode.tt.extern_pid, | 110 | { .pid = new_task->thread.mode.tt.extern_pid, |
| 111 | .task = new_task } ); | 111 | .task = new_task } ); |
| 112 | idle_threads[cpu] = new_task; | 112 | idle_threads[cpu] = new_task; |
| @@ -134,16 +134,15 @@ void smp_prepare_cpus(unsigned int maxcpus) | |||
| 134 | if(err < 0) | 134 | if(err < 0) |
| 135 | panic("CPU#0 failed to create IPI pipe, errno = %d", -err); | 135 | panic("CPU#0 failed to create IPI pipe, errno = %d", -err); |
| 136 | 136 | ||
| 137 | activate_ipi(cpu_data[me].ipi_pipe[0], | 137 | os_set_fd_async(cpu_data[me].ipi_pipe[0], |
| 138 | current->thread.mode.tt.extern_pid); | 138 | current->thread.mode.tt.extern_pid); |
| 139 | 139 | ||
| 140 | for(cpu = 1; cpu < ncpus; cpu++){ | 140 | for(cpu = 1; cpu < ncpus; cpu++){ |
| 141 | printk("Booting processor %d...\n", cpu); | 141 | printk("Booting processor %d...\n", cpu); |
| 142 | 142 | ||
| 143 | idle = idle_thread(cpu); | 143 | idle = idle_thread(cpu); |
| 144 | 144 | ||
| 145 | init_idle(idle, cpu); | 145 | init_idle(idle, cpu); |
| 146 | unhash_process(idle); | ||
| 147 | 146 | ||
| 148 | waittime = 200000000; | 147 | waittime = 200000000; |
| 149 | while (waittime-- && !cpu_isset(cpu, cpu_callin_map)) | 148 | while (waittime-- && !cpu_isset(cpu, cpu_callin_map)) |
| @@ -223,7 +222,7 @@ void smp_call_function_slave(int cpu) | |||
| 223 | atomic_inc(&scf_finished); | 222 | atomic_inc(&scf_finished); |
| 224 | } | 223 | } |
| 225 | 224 | ||
| 226 | int smp_call_function(void (*_func)(void *info), void *_info, int nonatomic, | 225 | int smp_call_function(void (*_func)(void *info), void *_info, int nonatomic, |
| 227 | int wait) | 226 | int wait) |
| 228 | { | 227 | { |
| 229 | int cpus = num_online_cpus() - 1; | 228 | int cpus = num_online_cpus() - 1; |
