aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kern/machine.c13
-rw-r--r--kern/processor.c3
-rw-r--r--kern/processor.h3
3 files changed, 18 insertions, 1 deletions
diff --git a/kern/machine.c b/kern/machine.c
index 87fbc4d1..f757d146 100644
--- a/kern/machine.c
+++ b/kern/machine.c
@@ -84,6 +84,9 @@ void cpu_up(int cpu)
processor = cpu_to_processor(cpu);
pset_lock(&default_pset);
+#if MACH_HOST
+ pset_lock(slave_pset);
+#endif
s = splsched();
processor_lock(processor);
#if NCPUS > 1
@@ -92,10 +95,18 @@ void cpu_up(int cpu)
ms = &machine_slot[cpu];
ms->running = TRUE;
machine_info.avail_cpus++;
- pset_add_processor(&default_pset, processor);
+#if MACH_HOST
+ if (cpu != 0)
+ pset_add_processor(slave_pset, processor);
+ else
+#endif
+ pset_add_processor(&default_pset, processor);
processor->state = PROCESSOR_RUNNING;
processor_unlock(processor);
splx(s);
+#if MACH_HOST
+ pset_unlock(slave_pset);
+#endif
pset_unlock(&default_pset);
}
diff --git a/kern/processor.c b/kern/processor.c
index 76735381..f06b5d62 100644
--- a/kern/processor.c
+++ b/kern/processor.c
@@ -51,6 +51,7 @@
#if MACH_HOST
#include <kern/slab.h>
struct kmem_cache pset_cache;
+struct processor_set *slave_pset;
#endif /* MACH_HOST */
@@ -124,6 +125,8 @@ void pset_sys_init(void)
ipc_processor_init(processor);
}
}
+
+ processor_set_create(&realhost, &slave_pset, &slave_pset);
}
#endif /* MACH_HOST */
diff --git a/kern/processor.h b/kern/processor.h
index fc204ffa..747badf2 100644
--- a/kern/processor.h
+++ b/kern/processor.h
@@ -85,6 +85,9 @@ struct processor_set {
long sched_load; /* load avg for scheduler */
};
extern struct processor_set default_pset;
+#if MACH_HOST
+extern struct processor_set *slave_pset;
+#endif
struct processor {
struct run_queue runq; /* local runq for this processor */