X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fi386%2Fkernel%2Fhead.S;h=95fe2fdf466056b81540e42208f483bfebb2d33a;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=f7867f4b8e6f7ea6dbf8aaa49c3f456c92fbf94a;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/i386/kernel/head.S b/arch/i386/kernel/head.S index f7867f4b8..95fe2fdf4 100644 --- a/arch/i386/kernel/head.S +++ b/arch/i386/kernel/head.S @@ -24,15 +24,14 @@ * References to members of the new_cpu_data structure. */ -#define CPU_PARAMS new_cpu_data -#define X86 CPU_PARAMS+0 -#define X86_VENDOR CPU_PARAMS+1 -#define X86_MODEL CPU_PARAMS+2 -#define X86_MASK CPU_PARAMS+3 -#define X86_HARD_MATH CPU_PARAMS+6 -#define X86_CPUID CPU_PARAMS+8 -#define X86_CAPABILITY CPU_PARAMS+12 -#define X86_VENDOR_ID CPU_PARAMS+36 /* offset dependent on NCAPINTS */ +#define X86 new_cpu_data+CPUINFO_x86 +#define X86_VENDOR new_cpu_data+CPUINFO_x86_vendor +#define X86_MODEL new_cpu_data+CPUINFO_x86_model +#define X86_MASK new_cpu_data+CPUINFO_x86_mask +#define X86_HARD_MATH new_cpu_data+CPUINFO_hard_math +#define X86_CPUID new_cpu_data+CPUINFO_cpuid_level +#define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability +#define X86_VENDOR_ID new_cpu_data+CPUINFO_x86_vendor_id /* * This is how much memory *in addition to the memory covered up to @@ -154,6 +153,32 @@ ENTRY(startup_32_smp) orl %edx,%eax movl %eax,%cr4 + btl $5, %eax # check if PAE is enabled + jnc 6f + + /* Check if extended functions are implemented */ + movl $0x80000000, %eax + cpuid + cmpl $0x80000000, %eax + jbe 6f + mov $0x80000001, %eax + cpuid + /* Execute Disable bit supported? */ + btl $20, %edx + jnc 6f + + /* Setup EFER (Extended Feature Enable Register) */ + movl $0xc0000080, %ecx + rdmsr + + btsl $11, %eax + /* Make changes effective */ + wrmsr + +6: + /* cpuid clobbered ebx, set it up again: */ + xorl %ebx,%ebx + incl %ebx 3: #endif /* CONFIG_SMP */ @@ -496,6 +521,3 @@ ENTRY(cpu_gdt_table) .quad 0x0000000000000000 /* 0xf0 - unused */ .quad 0x0000000000000000 /* 0xf8 - GDT entry 31: double-fault TSS */ -#ifdef CONFIG_SMP - .fill (NR_CPUS-1)*GDT_ENTRIES,8,0 /* other CPU's GDT */ -#endif