summaryrefslogtreecommitdiff
path: root/src/cpu/x86/pae/pgtbl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/x86/pae/pgtbl.c')
-rw-r--r--src/cpu/x86/pae/pgtbl.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/cpu/x86/pae/pgtbl.c b/src/cpu/x86/pae/pgtbl.c
index 814c5f161f..7aa17c220d 100644
--- a/src/cpu/x86/pae/pgtbl.c
+++ b/src/cpu/x86/pae/pgtbl.c
@@ -3,8 +3,10 @@
*/
#include <console/console.h>
+#include <device/device.h>
#include <cpu/cpu.h>
#include <cpu/x86/pae.h>
+#include <cpu/x86/lapic.h>
#include <string.h>
static void paging_off(void)
@@ -43,6 +45,14 @@ static void paging_on(void *pdp)
);
}
+static int cpu_index(void)
+{
+ device_t dev = dev_find_lapic(lapicid());
+ if (!dev)
+ return -1;
+ return dev->path.apic.index;
+}
+
void *map_2M_page(unsigned long page)
{
struct pde {
@@ -60,7 +70,9 @@ void *map_2M_page(unsigned long page)
unsigned long window;
void *result;
int i;
+
index = cpu_index();
+
if ((index < 0) || (index >= CONFIG_MAX_CPUS)) {
return MAPPING_ERROR;
}