2 #include <arch/intel.h>
3 #include <cpu/x86/mtrr.h>
4 #include <cpu/x86/lapic_def.h>
6 .globl _secondary_start
12 movl %eax, %cr3 /* Invalidate TLB*/
14 /* On hyper threaded cpus, invalidating the cache here is
15 * very very bad. Don't.
18 /* setup the data segment */
22 data32 lgdt gdtaddr - _secondary_start
25 andl $0x7FFAFFD1, %eax /* PG,AM,WP,NE,TS,EM,MP = 0 */
26 orl $0x60000001, %eax /* CD, NW, PE = 1 */
39 /* Set the stack pointer, and flag that we are done */
41 movl secondary_stack, %esp
42 movl %eax, secondary_stack
44 call secondary_cpu_init
49 .word gdt_limit /* the table limit */
50 .long gdt /* we know the offset */