summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlmuHS <liberamenso10000@gmail.com>2018-07-07 21:43:41 +0200
committerAlmuHS <liberamenso10000@gmail.com>2018-07-07 21:43:41 +0200
commitc5be0cc4ab21c2306141ac3159a1c33d7ec6f6ec (patch)
treed94aebed806e6ee716ff618bf31a0f8411dc4a1b
parent8bb917f34a956d9c8912cf01f5ccf9f0cb5f1f11 (diff)
added kernel2apic vector
-rw-r--r--i386/i386/intel_startCPU.c9
-rw-r--r--kern/cpu_number.c3
2 files changed, 11 insertions, 1 deletions
diff --git a/i386/i386/intel_startCPU.c b/i386/i386/intel_startCPU.c
index 193a4dd1..0a418415 100644
--- a/i386/i386/intel_startCPU.c
+++ b/i386/i386/intel_startCPU.c
@@ -5,13 +5,20 @@
#include <i386/i386/pcb.h>
#include <i386/i386/tss.h>
+
static struct kmutex mp_cpu_boot_lock;
+extern int apic2kernel[];
+extern int kernel2apic[];
+
kern_return_t intel_startCPU(int slot_num)
{
- int lapic = cpu_to_lapic[slot_num];
+ /*int lapic = cpu_to_lapic[slot_num];*/
+ int lapic = kernel2apic[slot_num];
int eFlagsRegister;
+ kmutex_init(&mp_cpu_boot_lock);
+
assert(lapic != -1);
DBGLOG_CPU_INIT(slot_num);
diff --git a/kern/cpu_number.c b/kern/cpu_number.c
index aa092c00..21a2492a 100644
--- a/kern/cpu_number.c
+++ b/kern/cpu_number.c
@@ -1,5 +1,6 @@
#define MAX_CPUS 32 /* (8*sizeof(long)) */
+int kernel2apic[MAX_CPUS];
int apic2kernel[MAX_CPUS];
int cpu_number_start = 0, cpu_number_counter = 0;
@@ -11,6 +12,7 @@ int cpu_number(void) {
if (!cpu_number_start) {
for (i = 0; i < MAX_CPUS; i++) {
apic2kernel[i] = -1;
+ kernel2apic[i] = -1;
}
cpu_number_start = 1;
}
@@ -22,6 +24,7 @@ int cpu_number(void) {
return apic2kernel[apic_id];
} else {
apic2kernel[apic_id] = cpu_number_counter;
+ kernel2apic[cpu_number_counter] = apic_id;
cpu_number_counter++;
}