RE: Intel x86-64 support patch breaks amd64
From: Siddha, Suresh B
Date: Thu Feb 19 2004 - 15:49:31 EST
> > After #if 0 out some parts to make it compile, it fails to
> boot with no
> > output at all. Sorry, don't have low level debugging or
> serial console on
> > this machine configured, let me know if you need further
> information.
>
> It works for me with this patch both UP and SMP. Maybe you
> commented out
> too much?
>
> -Andi
Andi, Appended patch should fix the problem reported by Tony.
thanks,
suresh
diff -Nru linux/arch/x86_64/kernel/head.S linux~/arch/x86_64/kernel/head.S
--- linux/arch/x86_64/kernel/head.S 2004-02-19 03:10:55.000000000 -0800
+++ linux~/arch/x86_64/kernel/head.S 2004-02-19 04:21:51.000000000 -0800
@@ -358,7 +358,7 @@
/* asm/segment.h:GDT_ENTRIES must match this */
/* This should be a multiple of the cache line size */
/* GDTs of other CPUs: */
- .fill (L1_CACHE_BYTES * NR_CPUS) - (gdt_end - cpu_gdt_table)
+ .fill (GDT_SIZE * NR_CPUS) - (gdt_end - cpu_gdt_table)
.align L1_CACHE_BYTES
ENTRY(idt_table)
diff -Nru linux/arch/x86_64/kernel/setup.c linux~/arch/x86_64/kernel/setup.c
--- linux/arch/x86_64/kernel/setup.c 2004-02-19 03:10:55.000000000 -0800
+++ linux~/arch/x86_64/kernel/setup.c 2004-02-19 03:18:58.000000000 -0800
@@ -586,6 +586,7 @@
return r;
}
+#ifdef CONFIG_X86_HT
static void __init detect_ht(void)
{
extern int phys_proc_id[NR_CPUS];
@@ -632,6 +633,7 @@
phys_proc_id[cpu]);
}
}
+#endif
#define LVL_1_INST 1
#define LVL_1_DATA 2
@@ -761,8 +763,10 @@
c->x86_cache_size = l2 ? l2 : (l1i+l1d);
}
+#ifdef CONFIG_X86_HT
if (cpu_has(c, X86_FEATURE_HT))
detect_ht();
+#endif
n = cpuid_eax(0x80000000);
if (n >= 0x80000008) {
diff -Nru linux/arch/x86_64/kernel/x8664_ksyms.c linux~/arch/x86_64/kernel/x8664_ksyms.c
--- linux/arch/x86_64/kernel/x8664_ksyms.c 2004-02-19 03:10:55.000000000 -0800
+++ linux~/arch/x86_64/kernel/x8664_ksyms.c 2004-02-19 03:20:04.000000000 -0800
@@ -194,7 +194,10 @@
EXPORT_SYMBOL(die_chain);
+#ifdef CONFIG_X86_HT
+EXPORT_SYMBOL(smp_num_siblings);
EXPORT_SYMBOL(cpu_sibling_map);
+#endif
extern void do_softirq_thunk(void);
EXPORT_SYMBOL_NOVERS(do_softirq_thunk);
diff -Nru linux/include/asm-x86_64/segment.h linux~/include/asm-x86_64/segment.h
--- linux/include/asm-x86_64/segment.h 2004-02-19 03:11:05.000000000 -0800
+++ linux~/include/asm-x86_64/segment.h 2004-02-19 04:21:17.000000000 -0800
@@ -40,7 +40,7 @@
#define FS_TLS_SEL ((GDT_ENTRY_TLS_MIN+FS_TLS)*8 + 3)
#define IDT_ENTRIES 256
-#define GDT_ENTRIES (L1_CACHE_BYTES / 8)
+#define GDT_ENTRIES 16
#define GDT_SIZE (GDT_ENTRIES * 8)
#define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8)
Attachment:
gdt+ht-fix.patch
Description: gdt+ht-fix.patch