Skip to content
Snippets Groups Projects
Commit 4060994c authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge x86-64 update from Andi

parents 0174f72f d3ee871e
Branches
Tags
No related merge requests found
Showing
with 287 additions and 128 deletions
...@@ -7,10 +7,12 @@ Machine check ...@@ -7,10 +7,12 @@ Machine check
mce=off disable machine check mce=off disable machine check
mce=bootlog Enable logging of machine checks left over from booting. mce=bootlog Enable logging of machine checks left over from booting.
Disabled by default because some BIOS leave bogus ones. Disabled by default on AMD because some BIOS leave bogus ones.
If your BIOS doesn't do that it's a good idea to enable though If your BIOS doesn't do that it's a good idea to enable though
to make sure you log even machine check events that result to make sure you log even machine check events that result
in a reboot. in a reboot. On Intel systems it is enabled by default.
mce=nobootlog
Disable boot machine check logging.
mce=tolerancelevel (number) mce=tolerancelevel (number)
0: always panic, 1: panic if deadlock possible, 0: always panic, 1: panic if deadlock possible,
2: try to avoid panic, 3: never panic or exit (for testing) 2: try to avoid panic, 3: never panic or exit (for testing)
...@@ -122,6 +124,9 @@ SMP ...@@ -122,6 +124,9 @@ SMP
cpumask=MASK only use cpus with bits set in mask cpumask=MASK only use cpus with bits set in mask
additional_cpus=NUM Allow NUM more CPUs for hotplug
(defaults are specified by the BIOS or half the available CPUs)
NUMA NUMA
numa=off Only set up a single NUMA node spanning all memory. numa=off Only set up a single NUMA node spanning all memory.
...@@ -188,6 +193,9 @@ Debugging ...@@ -188,6 +193,9 @@ Debugging
kstack=N Print that many words from the kernel stack in oops dumps. kstack=N Print that many words from the kernel stack in oops dumps.
pagefaulttrace Dump all page faults. Only useful for extreme debugging
and will create a lot of output.
Misc Misc
noreplacement Don't replace instructions with more appropiate ones noreplacement Don't replace instructions with more appropiate ones
......
...@@ -6,7 +6,7 @@ Virtual memory map with 4 level page tables: ...@@ -6,7 +6,7 @@ Virtual memory map with 4 level page tables:
0000000000000000 - 00007fffffffffff (=47bits) user space, different per mm 0000000000000000 - 00007fffffffffff (=47bits) user space, different per mm
hole caused by [48:63] sign extension hole caused by [48:63] sign extension
ffff800000000000 - ffff80ffffffffff (=40bits) guard hole ffff800000000000 - ffff80ffffffffff (=40bits) guard hole
ffff810000000000 - ffffc0ffffffffff (=46bits) direct mapping of phys. memory ffff810000000000 - ffffc0ffffffffff (=46bits) direct mapping of all phys. memory
ffffc10000000000 - ffffc1ffffffffff (=40bits) hole ffffc10000000000 - ffffc1ffffffffff (=40bits) hole
ffffc20000000000 - ffffe1ffffffffff (=45bits) vmalloc/ioremap space ffffc20000000000 - ffffe1ffffffffff (=45bits) vmalloc/ioremap space
... unused hole ... ... unused hole ...
...@@ -14,6 +14,10 @@ ffffffff80000000 - ffffffff82800000 (=40MB) kernel text mapping, from phys 0 ...@@ -14,6 +14,10 @@ ffffffff80000000 - ffffffff82800000 (=40MB) kernel text mapping, from phys 0
... unused hole ... ... unused hole ...
ffffffff88000000 - fffffffffff00000 (=1919MB) module mapping space ffffffff88000000 - fffffffffff00000 (=1919MB) module mapping space
The direct mapping covers all memory in the system upto the highest
memory address (this means in some cases it can also include PCI memory
holes)
vmalloc space is lazily synchronized into the different PML4 pages of vmalloc space is lazily synchronized into the different PML4 pages of
the processes using the page fault handler, with init_level4_pgt as the processes using the page fault handler, with init_level4_pgt as
reference. reference.
......
...@@ -39,17 +39,14 @@ ...@@ -39,17 +39,14 @@
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
static inline void acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{
}
extern void __init clustered_apic_check(void); extern void __init clustered_apic_check(void);
static inline int ioapic_setup_disabled(void)
{
return 0;
}
extern int gsi_irq_sharing(int gsi);
#include <asm/proto.h> #include <asm/proto.h>
static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return 0; }
#else /* X86 */ #else /* X86 */
#ifdef CONFIG_X86_LOCAL_APIC #ifdef CONFIG_X86_LOCAL_APIC
...@@ -57,6 +54,8 @@ static inline int ioapic_setup_disabled(void) ...@@ -57,6 +54,8 @@ static inline int ioapic_setup_disabled(void)
#include <mach_mpparse.h> #include <mach_mpparse.h>
#endif /* CONFIG_X86_LOCAL_APIC */ #endif /* CONFIG_X86_LOCAL_APIC */
static inline int gsi_irq_sharing(int gsi) { return gsi; }
#endif /* X86 */ #endif /* X86 */
#define BAD_MADT_ENTRY(entry, end) ( \ #define BAD_MADT_ENTRY(entry, end) ( \
...@@ -459,7 +458,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq) ...@@ -459,7 +458,7 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irq)
*irq = IO_APIC_VECTOR(gsi); *irq = IO_APIC_VECTOR(gsi);
else else
#endif #endif
*irq = gsi; *irq = gsi_irq_sharing(gsi);
return 0; return 0;
} }
...@@ -543,7 +542,7 @@ acpi_scan_rsdp(unsigned long start, unsigned long length) ...@@ -543,7 +542,7 @@ acpi_scan_rsdp(unsigned long start, unsigned long length)
* RSDP signature. * RSDP signature.
*/ */
for (offset = 0; offset < length; offset += 16) { for (offset = 0; offset < length; offset += 16) {
if (strncmp((char *)(start + offset), "RSD PTR ", sig_len)) if (strncmp((char *)(phys_to_virt(start) + offset), "RSD PTR ", sig_len))
continue; continue;
return (start + offset); return (start + offset);
} }
......
...@@ -206,9 +206,9 @@ static void __init init_amd(struct cpuinfo_x86 *c) ...@@ -206,9 +206,9 @@ static void __init init_amd(struct cpuinfo_x86 *c)
display_cacheinfo(c); display_cacheinfo(c);
if (cpuid_eax(0x80000000) >= 0x80000008) { if (cpuid_eax(0x80000000) >= 0x80000008) {
c->x86_num_cores = (cpuid_ecx(0x80000008) & 0xff) + 1; c->x86_max_cores = (cpuid_ecx(0x80000008) & 0xff) + 1;
if (c->x86_num_cores & (c->x86_num_cores - 1)) if (c->x86_max_cores & (c->x86_max_cores - 1))
c->x86_num_cores = 1; c->x86_max_cores = 1;
} }
#ifdef CONFIG_X86_HT #ifdef CONFIG_X86_HT
...@@ -217,15 +217,15 @@ static void __init init_amd(struct cpuinfo_x86 *c) ...@@ -217,15 +217,15 @@ static void __init init_amd(struct cpuinfo_x86 *c)
* distingush the cores. Assumes number of cores is a power * distingush the cores. Assumes number of cores is a power
* of two. * of two.
*/ */
if (c->x86_num_cores > 1) { if (c->x86_max_cores > 1) {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
unsigned bits = 0; unsigned bits = 0;
while ((1 << bits) < c->x86_num_cores) while ((1 << bits) < c->x86_max_cores)
bits++; bits++;
cpu_core_id[cpu] = phys_proc_id[cpu] & ((1<<bits)-1); cpu_core_id[cpu] = phys_proc_id[cpu] & ((1<<bits)-1);
phys_proc_id[cpu] >>= bits; phys_proc_id[cpu] >>= bits;
printk(KERN_INFO "CPU %d(%d) -> Core %d\n", printk(KERN_INFO "CPU %d(%d) -> Core %d\n",
cpu, c->x86_num_cores, cpu_core_id[cpu]); cpu, c->x86_max_cores, cpu_core_id[cpu]);
} }
#endif #endif
} }
......
...@@ -231,10 +231,10 @@ static void __init early_cpu_detect(void) ...@@ -231,10 +231,10 @@ static void __init early_cpu_detect(void)
cpuid(0x00000001, &tfms, &misc, &junk, &cap0); cpuid(0x00000001, &tfms, &misc, &junk, &cap0);
c->x86 = (tfms >> 8) & 15; c->x86 = (tfms >> 8) & 15;
c->x86_model = (tfms >> 4) & 15; c->x86_model = (tfms >> 4) & 15;
if (c->x86 == 0xf) { if (c->x86 == 0xf)
c->x86 += (tfms >> 20) & 0xff; c->x86 += (tfms >> 20) & 0xff;
if (c->x86 >= 0x6)
c->x86_model += ((tfms >> 16) & 0xF) << 4; c->x86_model += ((tfms >> 16) & 0xF) << 4;
}
c->x86_mask = tfms & 15; c->x86_mask = tfms & 15;
if (cap0 & (1<<19)) if (cap0 & (1<<19))
c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8; c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
...@@ -333,7 +333,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c) ...@@ -333,7 +333,7 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
c->x86_model = c->x86_mask = 0; /* So far unknown... */ c->x86_model = c->x86_mask = 0; /* So far unknown... */
c->x86_vendor_id[0] = '\0'; /* Unset */ c->x86_vendor_id[0] = '\0'; /* Unset */
c->x86_model_id[0] = '\0'; /* Unset */ c->x86_model_id[0] = '\0'; /* Unset */
c->x86_num_cores = 1; c->x86_max_cores = 1;
memset(&c->x86_capability, 0, sizeof c->x86_capability); memset(&c->x86_capability, 0, sizeof c->x86_capability);
if (!have_cpuid_p()) { if (!have_cpuid_p()) {
...@@ -443,52 +443,44 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c) ...@@ -443,52 +443,44 @@ void __devinit identify_cpu(struct cpuinfo_x86 *c)
void __devinit detect_ht(struct cpuinfo_x86 *c) void __devinit detect_ht(struct cpuinfo_x86 *c)
{ {
u32 eax, ebx, ecx, edx; u32 eax, ebx, ecx, edx;
int index_msb, tmp; int index_msb, core_bits;
int cpu = smp_processor_id(); int cpu = smp_processor_id();
cpuid(1, &eax, &ebx, &ecx, &edx);
c->apicid = phys_pkg_id((ebx >> 24) & 0xFF, 0);
if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY)) if (!cpu_has(c, X86_FEATURE_HT) || cpu_has(c, X86_FEATURE_CMP_LEGACY))
return; return;
cpuid(1, &eax, &ebx, &ecx, &edx);
smp_num_siblings = (ebx & 0xff0000) >> 16; smp_num_siblings = (ebx & 0xff0000) >> 16;
if (smp_num_siblings == 1) { if (smp_num_siblings == 1) {
printk(KERN_INFO "CPU: Hyper-Threading is disabled\n"); printk(KERN_INFO "CPU: Hyper-Threading is disabled\n");
} else if (smp_num_siblings > 1 ) { } else if (smp_num_siblings > 1 ) {
index_msb = 31;
if (smp_num_siblings > NR_CPUS) { if (smp_num_siblings > NR_CPUS) {
printk(KERN_WARNING "CPU: Unsupported number of the siblings %d", smp_num_siblings); printk(KERN_WARNING "CPU: Unsupported number of the siblings %d", smp_num_siblings);
smp_num_siblings = 1; smp_num_siblings = 1;
return; return;
} }
tmp = smp_num_siblings;
while ((tmp & 0x80000000 ) == 0) { index_msb = get_count_order(smp_num_siblings);
tmp <<=1 ;
index_msb--;
}
if (smp_num_siblings & (smp_num_siblings - 1))
index_msb++;
phys_proc_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb); phys_proc_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb);
printk(KERN_INFO "CPU: Physical Processor ID: %d\n", printk(KERN_INFO "CPU: Physical Processor ID: %d\n",
phys_proc_id[cpu]); phys_proc_id[cpu]);
smp_num_siblings = smp_num_siblings / c->x86_num_cores; smp_num_siblings = smp_num_siblings / c->x86_max_cores;
tmp = smp_num_siblings; index_msb = get_count_order(smp_num_siblings) ;
index_msb = 31;
while ((tmp & 0x80000000) == 0) {
tmp <<=1 ;
index_msb--;
}
if (smp_num_siblings & (smp_num_siblings - 1)) core_bits = get_count_order(c->x86_max_cores);
index_msb++;
cpu_core_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb); cpu_core_id[cpu] = phys_pkg_id((ebx >> 24) & 0xFF, index_msb) &
((1 << core_bits) - 1);
if (c->x86_num_cores > 1) if (c->x86_max_cores > 1)
printk(KERN_INFO "CPU: Processor Core ID: %d\n", printk(KERN_INFO "CPU: Processor Core ID: %d\n",
cpu_core_id[cpu]); cpu_core_id[cpu]);
} }
......
...@@ -158,7 +158,7 @@ static void __devinit init_intel(struct cpuinfo_x86 *c) ...@@ -158,7 +158,7 @@ static void __devinit init_intel(struct cpuinfo_x86 *c)
if ( p ) if ( p )
strcpy(c->x86_model_id, p); strcpy(c->x86_model_id, p);
c->x86_num_cores = num_cpu_cores(c); c->x86_max_cores = num_cpu_cores(c);
detect_ht(c); detect_ht(c);
......
...@@ -293,29 +293,45 @@ static struct _cpuid4_info *cpuid4_info[NR_CPUS]; ...@@ -293,29 +293,45 @@ static struct _cpuid4_info *cpuid4_info[NR_CPUS];
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index) static void __cpuinit cache_shared_cpu_map_setup(unsigned int cpu, int index)
{ {
struct _cpuid4_info *this_leaf; struct _cpuid4_info *this_leaf, *sibling_leaf;
unsigned long num_threads_sharing; unsigned long num_threads_sharing;
#ifdef CONFIG_X86_HT int index_msb, i;
struct cpuinfo_x86 *c = cpu_data + cpu; struct cpuinfo_x86 *c = cpu_data;
#endif
this_leaf = CPUID4_INFO_IDX(cpu, index); this_leaf = CPUID4_INFO_IDX(cpu, index);
num_threads_sharing = 1 + this_leaf->eax.split.num_threads_sharing; num_threads_sharing = 1 + this_leaf->eax.split.num_threads_sharing;
if (num_threads_sharing == 1) if (num_threads_sharing == 1)
cpu_set(cpu, this_leaf->shared_cpu_map); cpu_set(cpu, this_leaf->shared_cpu_map);
#ifdef CONFIG_X86_HT else {
else if (num_threads_sharing == smp_num_siblings) index_msb = get_count_order(num_threads_sharing);
this_leaf->shared_cpu_map = cpu_sibling_map[cpu];
else if (num_threads_sharing == (c->x86_num_cores * smp_num_siblings)) for_each_online_cpu(i) {
this_leaf->shared_cpu_map = cpu_core_map[cpu]; if (c[i].apicid >> index_msb ==
else c[cpu].apicid >> index_msb) {
printk(KERN_DEBUG "Number of CPUs sharing cache didn't match " cpu_set(i, this_leaf->shared_cpu_map);
"any known set of CPUs\n"); if (i != cpu && cpuid4_info[i]) {
#endif sibling_leaf = CPUID4_INFO_IDX(i, index);
cpu_set(cpu, sibling_leaf->shared_cpu_map);
}
}
}
}
}
static void __devinit cache_remove_shared_cpu_map(unsigned int cpu, int index)
{
struct _cpuid4_info *this_leaf, *sibling_leaf;
int sibling;
this_leaf = CPUID4_INFO_IDX(cpu, index);
for_each_cpu_mask(sibling, this_leaf->shared_cpu_map) {
sibling_leaf = CPUID4_INFO_IDX(sibling, index);
cpu_clear(cpu, sibling_leaf->shared_cpu_map);
}
} }
#else #else
static void __init cache_shared_cpu_map_setup(unsigned int cpu, int index) {} static void __init cache_shared_cpu_map_setup(unsigned int cpu, int index) {}
static void __init cache_remove_shared_cpu_map(unsigned int cpu, int index) {}
#endif #endif
static void free_cache_attributes(unsigned int cpu) static void free_cache_attributes(unsigned int cpu)
...@@ -574,8 +590,10 @@ static void __cpuexit cache_remove_dev(struct sys_device * sys_dev) ...@@ -574,8 +590,10 @@ static void __cpuexit cache_remove_dev(struct sys_device * sys_dev)
unsigned int cpu = sys_dev->id; unsigned int cpu = sys_dev->id;
unsigned long i; unsigned long i;
for (i = 0; i < num_cache_leaves; i++) for (i = 0; i < num_cache_leaves; i++) {
cache_remove_shared_cpu_map(cpu, i);
kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj)); kobject_unregister(&(INDEX_KOBJECT_PTR(cpu,i)->kobj));
}
kobject_unregister(cache_kobject[cpu]); kobject_unregister(cache_kobject[cpu]);
cpuid4_cache_sysfs_exit(cpu); cpuid4_cache_sysfs_exit(cpu);
return; return;
......
...@@ -626,6 +626,14 @@ void __init mtrr_bp_init(void) ...@@ -626,6 +626,14 @@ void __init mtrr_bp_init(void)
if (cpuid_eax(0x80000000) >= 0x80000008) { if (cpuid_eax(0x80000000) >= 0x80000008) {
u32 phys_addr; u32 phys_addr;
phys_addr = cpuid_eax(0x80000008) & 0xff; phys_addr = cpuid_eax(0x80000008) & 0xff;
/* CPUID workaround for Intel 0F33/0F34 CPU */
if (boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
boot_cpu_data.x86 == 0xF &&
boot_cpu_data.x86_model == 0x3 &&
(boot_cpu_data.x86_mask == 0x3 ||
boot_cpu_data.x86_mask == 0x4))
phys_addr = 36;
size_or_mask = ~((1 << (phys_addr - PAGE_SHIFT)) - 1); size_or_mask = ~((1 << (phys_addr - PAGE_SHIFT)) - 1);
size_and_mask = ~size_or_mask & 0xfff00000; size_and_mask = ~size_or_mask & 0xfff00000;
} else if (boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR && } else if (boot_cpu_data.x86_vendor == X86_VENDOR_CENTAUR &&
......
...@@ -94,12 +94,11 @@ static int show_cpuinfo(struct seq_file *m, void *v) ...@@ -94,12 +94,11 @@ static int show_cpuinfo(struct seq_file *m, void *v)
if (c->x86_cache_size >= 0) if (c->x86_cache_size >= 0)
seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size); seq_printf(m, "cache size\t: %d KB\n", c->x86_cache_size);
#ifdef CONFIG_X86_HT #ifdef CONFIG_X86_HT
if (c->x86_num_cores * smp_num_siblings > 1) { if (c->x86_max_cores * smp_num_siblings > 1) {
seq_printf(m, "physical id\t: %d\n", phys_proc_id[n]); seq_printf(m, "physical id\t: %d\n", phys_proc_id[n]);
seq_printf(m, "siblings\t: %d\n", seq_printf(m, "siblings\t: %d\n", cpus_weight(cpu_core_map[n]));
c->x86_num_cores * smp_num_siblings);
seq_printf(m, "core id\t\t: %d\n", cpu_core_id[n]); seq_printf(m, "core id\t\t: %d\n", cpu_core_id[n]);
seq_printf(m, "cpu cores\t: %d\n", c->x86_num_cores); seq_printf(m, "cpu cores\t: %d\n", c->booted_cores);
} }
#endif #endif
......
...@@ -72,9 +72,11 @@ int phys_proc_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID}; ...@@ -72,9 +72,11 @@ int phys_proc_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
/* Core ID of each logical CPU */ /* Core ID of each logical CPU */
int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID}; int cpu_core_id[NR_CPUS] __read_mostly = {[0 ... NR_CPUS-1] = BAD_APICID};
/* representing HT siblings of each logical CPU */
cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly; cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
EXPORT_SYMBOL(cpu_sibling_map); EXPORT_SYMBOL(cpu_sibling_map);
/* representing HT and core siblings of each logical CPU */
cpumask_t cpu_core_map[NR_CPUS] __read_mostly; cpumask_t cpu_core_map[NR_CPUS] __read_mostly;
EXPORT_SYMBOL(cpu_core_map); EXPORT_SYMBOL(cpu_core_map);
...@@ -442,36 +444,61 @@ static void __devinit smp_callin(void) ...@@ -442,36 +444,61 @@ static void __devinit smp_callin(void)
static int cpucount; static int cpucount;
/* representing cpus for which sibling maps can be computed */
static cpumask_t cpu_sibling_setup_map;
static inline void static inline void
set_cpu_sibling_map(int cpu) set_cpu_sibling_map(int cpu)
{ {
int i; int i;
struct cpuinfo_x86 *c = cpu_data;
cpu_set(cpu, cpu_sibling_setup_map);
if (smp_num_siblings > 1) { if (smp_num_siblings > 1) {
for (i = 0; i < NR_CPUS; i++) { for_each_cpu_mask(i, cpu_sibling_setup_map) {
if (!cpu_isset(i, cpu_callout_map)) if (phys_proc_id[cpu] == phys_proc_id[i] &&
continue; cpu_core_id[cpu] == cpu_core_id[i]) {
if (cpu_core_id[cpu] == cpu_core_id[i]) {
cpu_set(i, cpu_sibling_map[cpu]); cpu_set(i, cpu_sibling_map[cpu]);
cpu_set(cpu, cpu_sibling_map[i]); cpu_set(cpu, cpu_sibling_map[i]);
cpu_set(i, cpu_core_map[cpu]);
cpu_set(cpu, cpu_core_map[i]);
} }
} }
} else { } else {
cpu_set(cpu, cpu_sibling_map[cpu]); cpu_set(cpu, cpu_sibling_map[cpu]);
} }
if (current_cpu_data.x86_num_cores > 1) { if (current_cpu_data.x86_max_cores == 1) {
for (i = 0; i < NR_CPUS; i++) { cpu_core_map[cpu] = cpu_sibling_map[cpu];
if (!cpu_isset(i, cpu_callout_map)) c[cpu].booted_cores = 1;
continue; return;
}
for_each_cpu_mask(i, cpu_sibling_setup_map) {
if (phys_proc_id[cpu] == phys_proc_id[i]) { if (phys_proc_id[cpu] == phys_proc_id[i]) {
cpu_set(i, cpu_core_map[cpu]); cpu_set(i, cpu_core_map[cpu]);
cpu_set(cpu, cpu_core_map[i]); cpu_set(cpu, cpu_core_map[i]);
/*
* Does this new cpu bringup a new core?
*/
if (cpus_weight(cpu_sibling_map[cpu]) == 1) {
/*
* for each core in package, increment
* the booted_cores for this new cpu
*/
if (first_cpu(cpu_sibling_map[i]) == i)
c[cpu].booted_cores++;
/*
* increment the core count for all
* the other cpus in this package
*/
if (i != cpu)
c[i].booted_cores++;
} else if (i != cpu && !c[cpu].booted_cores)
c[cpu].booted_cores = c[i].booted_cores;
} }
} }
} else {
cpu_core_map[cpu] = cpu_sibling_map[cpu];
}
} }
/* /*
...@@ -1095,11 +1122,8 @@ static void __init smp_boot_cpus(unsigned int max_cpus) ...@@ -1095,11 +1122,8 @@ static void __init smp_boot_cpus(unsigned int max_cpus)
current_thread_info()->cpu = 0; current_thread_info()->cpu = 0;
smp_tune_scheduling(); smp_tune_scheduling();
cpus_clear(cpu_sibling_map[0]);
cpu_set(0, cpu_sibling_map[0]);
cpus_clear(cpu_core_map[0]); set_cpu_sibling_map(0);
cpu_set(0, cpu_core_map[0]);
/* /*
* If we couldn't find an SMP configuration at boot time, * If we couldn't find an SMP configuration at boot time,
...@@ -1278,15 +1302,24 @@ static void ...@@ -1278,15 +1302,24 @@ static void
remove_siblinginfo(int cpu) remove_siblinginfo(int cpu)
{ {
int sibling; int sibling;
struct cpuinfo_x86 *c = cpu_data;
for_each_cpu_mask(sibling, cpu_core_map[cpu]) {
cpu_clear(cpu, cpu_core_map[sibling]);
/*
* last thread sibling in this cpu core going down
*/
if (cpus_weight(cpu_sibling_map[cpu]) == 1)
c[sibling].booted_cores--;
}
for_each_cpu_mask(sibling, cpu_sibling_map[cpu]) for_each_cpu_mask(sibling, cpu_sibling_map[cpu])
cpu_clear(cpu, cpu_sibling_map[sibling]); cpu_clear(cpu, cpu_sibling_map[sibling]);
for_each_cpu_mask(sibling, cpu_core_map[cpu])
cpu_clear(cpu, cpu_core_map[sibling]);
cpus_clear(cpu_sibling_map[cpu]); cpus_clear(cpu_sibling_map[cpu]);
cpus_clear(cpu_core_map[cpu]); cpus_clear(cpu_core_map[cpu]);
phys_proc_id[cpu] = BAD_APICID; phys_proc_id[cpu] = BAD_APICID;
cpu_core_id[cpu] = BAD_APICID; cpu_core_id[cpu] = BAD_APICID;
cpu_clear(cpu, cpu_sibling_setup_map);
} }
int __cpu_disable(void) int __cpu_disable(void)
......
...@@ -137,8 +137,8 @@ static void __init parse_memory_affinity_structure (char *sratp) ...@@ -137,8 +137,8 @@ static void __init parse_memory_affinity_structure (char *sratp)
"enabled and removable" : "enabled" ) ); "enabled and removable" : "enabled" ) );
} }
#if MAX_NR_ZONES != 3 #if MAX_NR_ZONES != 4
#error "MAX_NR_ZONES != 3, chunk_to_zone requires review" #error "MAX_NR_ZONES != 4, chunk_to_zone requires review"
#endif #endif
/* Take a chunk of pages from page frame cstart to cend and count the number /* Take a chunk of pages from page frame cstart to cend and count the number
* of pages in each zone, returned via zones[]. * of pages in each zone, returned via zones[].
......
...@@ -58,6 +58,10 @@ config IA64_UNCACHED_ALLOCATOR ...@@ -58,6 +58,10 @@ config IA64_UNCACHED_ALLOCATOR
bool bool
select GENERIC_ALLOCATOR select GENERIC_ALLOCATOR
config ZONE_DMA_IS_DMA32
bool
default y
choice choice
prompt "System type" prompt "System type"
default IA64_GENERIC default IA64_GENERIC
......
...@@ -226,22 +226,42 @@ config SCHED_SMT ...@@ -226,22 +226,42 @@ config SCHED_SMT
source "kernel/Kconfig.preempt" source "kernel/Kconfig.preempt"
config K8_NUMA config NUMA
bool "K8 NUMA support" bool "Non Uniform Memory Access (NUMA) Support"
select NUMA
depends on SMP depends on SMP
help help
Enable NUMA (Non Unified Memory Architecture) support for Enable NUMA (Non Uniform Memory Access) support. The kernel
AMD Opteron Multiprocessor systems. The kernel will try to allocate will try to allocate memory used by a CPU on the local memory
memory used by a CPU on the local memory controller of the CPU controller of the CPU and add some more NUMA awareness to the kernel.
and add some more NUMA awareness to the kernel. This code is recommended on all multiprocessor Opteron systems.
This code is recommended on all multiprocessor Opteron systems If the system is EM64T, you should say N unless your system is EM64T
and normally doesn't hurt on others. NUMA.
config K8_NUMA
bool "Old style AMD Opteron NUMA detection"
depends on NUMA
default y
help
Enable K8 NUMA node topology detection. You should say Y here if
you have a multi processor AMD K8 system. This uses an old
method to read the NUMA configurtion directly from the builtin
Northbridge of Opteron. It is recommended to use X86_64_ACPI_NUMA
instead, which also takes priority if both are compiled in.
# Dummy CONFIG option to select ACPI_NUMA from drivers/acpi/Kconfig.
config X86_64_ACPI_NUMA
bool "ACPI NUMA detection"
depends on NUMA
select ACPI
select ACPI_NUMA
default y
help
Enable ACPI SRAT based node topology detection.
config NUMA_EMU config NUMA_EMU
bool "NUMA emulation support" bool "NUMA emulation"
select NUMA depends on NUMA
depends on SMP
help help
Enable NUMA emulation. A flat machine will be split Enable NUMA emulation. A flat machine will be split
into virtual nodes when booted with "numa=fake=N", where N is the into virtual nodes when booted with "numa=fake=N", where N is the
...@@ -252,9 +272,6 @@ config ARCH_DISCONTIGMEM_ENABLE ...@@ -252,9 +272,6 @@ config ARCH_DISCONTIGMEM_ENABLE
depends on NUMA depends on NUMA
default y default y
config NUMA
bool
default n
config ARCH_DISCONTIGMEM_ENABLE config ARCH_DISCONTIGMEM_ENABLE
def_bool y def_bool y
...@@ -374,6 +391,14 @@ config X86_MCE_INTEL ...@@ -374,6 +391,14 @@ config X86_MCE_INTEL
Additional support for intel specific MCE features such as Additional support for intel specific MCE features such as
the thermal monitor. the thermal monitor.
config X86_MCE_AMD
bool "AMD MCE features"
depends on X86_MCE && X86_LOCAL_APIC
default y
help
Additional support for AMD specific MCE features such as
the DRAM Error Threshold.
config PHYSICAL_START config PHYSICAL_START
hex "Physical address where the kernel is loaded" if EMBEDDED hex "Physical address where the kernel is loaded" if EMBEDDED
default "0x100000" default "0x100000"
...@@ -502,7 +527,7 @@ config IA32_EMULATION ...@@ -502,7 +527,7 @@ config IA32_EMULATION
left. left.
config IA32_AOUT config IA32_AOUT
bool "IA32 a.out support" tristate "IA32 a.out support"
depends on IA32_EMULATION depends on IA32_EMULATION
help help
Support old a.out binaries in the 32bit emulation. Support old a.out binaries in the 32bit emulation.
......
...@@ -2,15 +2,6 @@ menu "Kernel hacking" ...@@ -2,15 +2,6 @@ menu "Kernel hacking"
source "lib/Kconfig.debug" source "lib/Kconfig.debug"
# !SMP for now because the context switch early causes GPF in segment reloading
# and the GS base checking does the wrong thing then, causing a hang.
config CHECKING
bool "Additional run-time checks"
depends on DEBUG_KERNEL && !SMP
help
Enables some internal consistency checks for kernel debugging.
You should normally say N.
config INIT_DEBUG config INIT_DEBUG
bool "Debug __init statements" bool "Debug __init statements"
depends on DEBUG_KERNEL depends on DEBUG_KERNEL
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.13-git11 # Linux kernel version: 2.6.14-git7
# Mon Sep 12 16:16:16 2005 # Sat Nov 5 15:55:50 2005
# #
CONFIG_X86_64=y CONFIG_X86_64=y
CONFIG_64BIT=y CONFIG_64BIT=y
...@@ -35,7 +35,7 @@ CONFIG_POSIX_MQUEUE=y ...@@ -35,7 +35,7 @@ CONFIG_POSIX_MQUEUE=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set # CONFIG_AUDIT is not set
# CONFIG_HOTPLUG is not set CONFIG_HOTPLUG=y
CONFIG_KOBJECT_UEVENT=y CONFIG_KOBJECT_UEVENT=y
CONFIG_IKCONFIG=y CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y CONFIG_IKCONFIG_PROC=y
...@@ -93,10 +93,11 @@ CONFIG_PREEMPT_NONE=y ...@@ -93,10 +93,11 @@ CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set # CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set # CONFIG_PREEMPT is not set
CONFIG_PREEMPT_BKL=y CONFIG_PREEMPT_BKL=y
CONFIG_NUMA=y
CONFIG_K8_NUMA=y CONFIG_K8_NUMA=y
CONFIG_X86_64_ACPI_NUMA=y
# CONFIG_NUMA_EMU is not set # CONFIG_NUMA_EMU is not set
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
CONFIG_NUMA=y
CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_SELECT_MEMORY_MODEL=y CONFIG_SELECT_MEMORY_MODEL=y
...@@ -107,9 +108,10 @@ CONFIG_DISCONTIGMEM=y ...@@ -107,9 +108,10 @@ CONFIG_DISCONTIGMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_NEED_MULTIPLE_NODES=y CONFIG_NEED_MULTIPLE_NODES=y
# CONFIG_SPARSEMEM_STATIC is not set # CONFIG_SPARSEMEM_STATIC is not set
CONFIG_SPLIT_PTLOCK_CPUS=4
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
CONFIG_HAVE_DEC_LOCK=y
CONFIG_NR_CPUS=32 CONFIG_NR_CPUS=32
CONFIG_HOTPLUG_CPU=y
CONFIG_HPET_TIMER=y CONFIG_HPET_TIMER=y
CONFIG_X86_PM_TIMER=y CONFIG_X86_PM_TIMER=y
CONFIG_HPET_EMULATE_RTC=y CONFIG_HPET_EMULATE_RTC=y
...@@ -117,6 +119,7 @@ CONFIG_GART_IOMMU=y ...@@ -117,6 +119,7 @@ CONFIG_GART_IOMMU=y
CONFIG_SWIOTLB=y CONFIG_SWIOTLB=y
CONFIG_X86_MCE=y CONFIG_X86_MCE=y
CONFIG_X86_MCE_INTEL=y CONFIG_X86_MCE_INTEL=y
CONFIG_X86_MCE_AMD=y
CONFIG_PHYSICAL_START=0x100000 CONFIG_PHYSICAL_START=0x100000
# CONFIG_KEXEC is not set # CONFIG_KEXEC is not set
CONFIG_SECCOMP=y CONFIG_SECCOMP=y
...@@ -136,11 +139,15 @@ CONFIG_PM=y ...@@ -136,11 +139,15 @@ CONFIG_PM=y
# CONFIG_PM_DEBUG is not set # CONFIG_PM_DEBUG is not set
CONFIG_SOFTWARE_SUSPEND=y CONFIG_SOFTWARE_SUSPEND=y
CONFIG_PM_STD_PARTITION="" CONFIG_PM_STD_PARTITION=""
CONFIG_SUSPEND_SMP=y
# #
# ACPI (Advanced Configuration and Power Interface) Support # ACPI (Advanced Configuration and Power Interface) Support
# #
CONFIG_ACPI=y CONFIG_ACPI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SLEEP_PROC_FS=y
CONFIG_ACPI_SLEEP_PROC_SLEEP=y
CONFIG_ACPI_AC=y CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y CONFIG_ACPI_BUTTON=y
...@@ -148,6 +155,7 @@ CONFIG_ACPI_BUTTON=y ...@@ -148,6 +155,7 @@ CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_HOTKEY=m CONFIG_ACPI_HOTKEY=m
CONFIG_ACPI_FAN=y CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=y CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_NUMA=y CONFIG_ACPI_NUMA=y
# CONFIG_ACPI_ASUS is not set # CONFIG_ACPI_ASUS is not set
...@@ -158,7 +166,7 @@ CONFIG_ACPI_BLACKLIST_YEAR=2001 ...@@ -158,7 +166,7 @@ CONFIG_ACPI_BLACKLIST_YEAR=2001
CONFIG_ACPI_EC=y CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y CONFIG_ACPI_POWER=y
CONFIG_ACPI_SYSTEM=y CONFIG_ACPI_SYSTEM=y
# CONFIG_ACPI_CONTAINER is not set CONFIG_ACPI_CONTAINER=y
# #
# CPU Frequency scaling # CPU Frequency scaling
...@@ -293,7 +301,6 @@ CONFIG_IPV6=y ...@@ -293,7 +301,6 @@ CONFIG_IPV6=y
# Network testing # Network testing
# #
# CONFIG_NET_PKTGEN is not set # CONFIG_NET_PKTGEN is not set
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_HAMRADIO is not set # CONFIG_HAMRADIO is not set
# CONFIG_IRDA is not set # CONFIG_IRDA is not set
# CONFIG_BT is not set # CONFIG_BT is not set
...@@ -311,6 +318,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y ...@@ -311,6 +318,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
# CONFIG_FW_LOADER is not set # CONFIG_FW_LOADER is not set
# CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DRIVER is not set
#
# Connector - unified userspace <-> kernelspace linker
#
# CONFIG_CONNECTOR is not set
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
# #
...@@ -354,6 +366,11 @@ CONFIG_IOSCHED_NOOP=y ...@@ -354,6 +366,11 @@ CONFIG_IOSCHED_NOOP=y
# CONFIG_IOSCHED_AS is not set # CONFIG_IOSCHED_AS is not set
CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_AS is not set
CONFIG_DEFAULT_DEADLINE=y
# CONFIG_DEFAULT_CFQ is not set
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_ATA_OVER_ETH is not set # CONFIG_ATA_OVER_ETH is not set
# #
...@@ -450,6 +467,7 @@ CONFIG_BLK_DEV_SD=y ...@@ -450,6 +467,7 @@ CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_SPI_ATTRS=y CONFIG_SCSI_SPI_ATTRS=y
# CONFIG_SCSI_FC_ATTRS is not set # CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set # CONFIG_SCSI_ISCSI_ATTRS is not set
# CONFIG_SCSI_SAS_ATTRS is not set
# #
# SCSI low-level drivers # SCSI low-level drivers
...@@ -469,20 +487,24 @@ CONFIG_AIC79XX_DEBUG_MASK=0 ...@@ -469,20 +487,24 @@ CONFIG_AIC79XX_DEBUG_MASK=0
# CONFIG_AIC79XX_REG_PRETTY_PRINT is not set # CONFIG_AIC79XX_REG_PRETTY_PRINT is not set
# CONFIG_MEGARAID_NEWGEN is not set # CONFIG_MEGARAID_NEWGEN is not set
# CONFIG_MEGARAID_LEGACY is not set # CONFIG_MEGARAID_LEGACY is not set
# CONFIG_MEGARAID_SAS is not set
CONFIG_SCSI_SATA=y CONFIG_SCSI_SATA=y
# CONFIG_SCSI_SATA_AHCI is not set # CONFIG_SCSI_SATA_AHCI is not set
# CONFIG_SCSI_SATA_SVW is not set # CONFIG_SCSI_SATA_SVW is not set
CONFIG_SCSI_ATA_PIIX=y CONFIG_SCSI_ATA_PIIX=y
# CONFIG_SCSI_SATA_MV is not set # CONFIG_SCSI_SATA_MV is not set
# CONFIG_SCSI_SATA_NV is not set CONFIG_SCSI_SATA_NV=y
# CONFIG_SCSI_SATA_PROMISE is not set # CONFIG_SCSI_PDC_ADMA is not set
# CONFIG_SCSI_SATA_QSTOR is not set # CONFIG_SCSI_SATA_QSTOR is not set
# CONFIG_SCSI_SATA_PROMISE is not set
# CONFIG_SCSI_SATA_SX4 is not set # CONFIG_SCSI_SATA_SX4 is not set
# CONFIG_SCSI_SATA_SIL is not set # CONFIG_SCSI_SATA_SIL is not set
# CONFIG_SCSI_SATA_SIL24 is not set
# CONFIG_SCSI_SATA_SIS is not set # CONFIG_SCSI_SATA_SIS is not set
# CONFIG_SCSI_SATA_ULI is not set # CONFIG_SCSI_SATA_ULI is not set
CONFIG_SCSI_SATA_VIA=y CONFIG_SCSI_SATA_VIA=y
# CONFIG_SCSI_SATA_VITESSE is not set # CONFIG_SCSI_SATA_VITESSE is not set
CONFIG_SCSI_SATA_INTEL_COMBINED=y
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set # CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
...@@ -525,6 +547,7 @@ CONFIG_BLK_DEV_DM=y ...@@ -525,6 +547,7 @@ CONFIG_BLK_DEV_DM=y
CONFIG_FUSION=y CONFIG_FUSION=y
CONFIG_FUSION_SPI=y CONFIG_FUSION_SPI=y
# CONFIG_FUSION_FC is not set # CONFIG_FUSION_FC is not set
# CONFIG_FUSION_SAS is not set
CONFIG_FUSION_MAX_SGE=128 CONFIG_FUSION_MAX_SGE=128
# CONFIG_FUSION_CTL is not set # CONFIG_FUSION_CTL is not set
...@@ -564,6 +587,7 @@ CONFIG_NET_ETHERNET=y ...@@ -564,6 +587,7 @@ CONFIG_NET_ETHERNET=y
CONFIG_MII=y CONFIG_MII=y
# CONFIG_HAPPYMEAL is not set # CONFIG_HAPPYMEAL is not set
# CONFIG_SUNGEM is not set # CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
CONFIG_NET_VENDOR_3COM=y CONFIG_NET_VENDOR_3COM=y
CONFIG_VORTEX=y CONFIG_VORTEX=y
# CONFIG_TYPHOON is not set # CONFIG_TYPHOON is not set
...@@ -740,7 +764,43 @@ CONFIG_LEGACY_PTY_COUNT=256 ...@@ -740,7 +764,43 @@ CONFIG_LEGACY_PTY_COUNT=256
# #
# Watchdog Cards # Watchdog Cards
# #
# CONFIG_WATCHDOG is not set CONFIG_WATCHDOG=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
#
# Watchdog Device Drivers
#
CONFIG_SOFT_WATCHDOG=y
# CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set
# CONFIG_ALIM1535_WDT is not set
# CONFIG_ALIM7101_WDT is not set
# CONFIG_SC520_WDT is not set
# CONFIG_EUROTECH_WDT is not set
# CONFIG_IB700_WDT is not set
# CONFIG_IBMASR is not set
# CONFIG_WAFER_WDT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_I8XX_TCO is not set
# CONFIG_SC1200_WDT is not set
# CONFIG_60XX_WDT is not set
# CONFIG_SBC8360_WDT is not set
# CONFIG_CPU5_WDT is not set
# CONFIG_W83627HF_WDT is not set
# CONFIG_W83877F_WDT is not set
# CONFIG_W83977F_WDT is not set
# CONFIG_MACHZ_WDT is not set
#
# PCI-based Watchdog Cards
#
# CONFIG_PCIPCWATCHDOG is not set
# CONFIG_WDTPCI is not set
#
# USB-based Watchdog Cards
#
# CONFIG_USBPCWATCHDOG is not set
CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM=y
# CONFIG_NVRAM is not set # CONFIG_NVRAM is not set
CONFIG_RTC=y CONFIG_RTC=y
...@@ -767,6 +827,7 @@ CONFIG_MAX_RAW_DEVS=256 ...@@ -767,6 +827,7 @@ CONFIG_MAX_RAW_DEVS=256
# TPM devices # TPM devices
# #
# CONFIG_TCG_TPM is not set # CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
# #
# I2C support # I2C support
...@@ -783,6 +844,7 @@ CONFIG_MAX_RAW_DEVS=256 ...@@ -783,6 +844,7 @@ CONFIG_MAX_RAW_DEVS=256
# #
CONFIG_HWMON=y CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set # CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_HDAPS is not set
# CONFIG_HWMON_DEBUG_CHIP is not set # CONFIG_HWMON_DEBUG_CHIP is not set
# #
...@@ -886,12 +948,15 @@ CONFIG_USB_UHCI_HCD=y ...@@ -886,12 +948,15 @@ CONFIG_USB_UHCI_HCD=y
# USB Device Class drivers # USB Device Class drivers
# #
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set # CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
# CONFIG_USB_BLUETOOTH_TTY is not set
# CONFIG_USB_ACM is not set # CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=y CONFIG_USB_PRINTER=y
# #
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
#
# may also be needed; see USB_STORAGE Help for more information
# #
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set # CONFIG_USB_STORAGE_DEBUG is not set
...@@ -924,6 +989,7 @@ CONFIG_USB_HIDINPUT=y ...@@ -924,6 +989,7 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_XPAD is not set # CONFIG_USB_XPAD is not set
# CONFIG_USB_ATI_REMOTE is not set # CONFIG_USB_ATI_REMOTE is not set
# CONFIG_USB_KEYSPAN_REMOTE is not set # CONFIG_USB_KEYSPAN_REMOTE is not set
# CONFIG_USB_APPLETOUCH is not set
# #
# USB Imaging devices # USB Imaging devices
...@@ -1005,7 +1071,7 @@ CONFIG_USB_MON=y ...@@ -1005,7 +1071,7 @@ CONFIG_USB_MON=y
# #
# CONFIG_EDD is not set # CONFIG_EDD is not set
# CONFIG_DELL_RBU is not set # CONFIG_DELL_RBU is not set
CONFIG_DCDBAS=m # CONFIG_DCDBAS is not set
# #
# File systems # File systems
...@@ -1037,7 +1103,7 @@ CONFIG_INOTIFY=y ...@@ -1037,7 +1103,7 @@ CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set # CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y CONFIG_DNOTIFY=y
CONFIG_AUTOFS_FS=y CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set # CONFIG_FUSE_FS is not set
# #
...@@ -1068,7 +1134,7 @@ CONFIG_TMPFS=y ...@@ -1068,7 +1134,7 @@ CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y CONFIG_HUGETLB_PAGE=y
CONFIG_RAMFS=y CONFIG_RAMFS=y
# CONFIG_RELAYFS_FS is not set CONFIG_RELAYFS_FS=y
# #
# Miscellaneous filesystems # Miscellaneous filesystems
...@@ -1186,7 +1252,9 @@ CONFIG_DETECT_SOFTLOCKUP=y ...@@ -1186,7 +1252,9 @@ CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_DEBUG_KOBJECT is not set # CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_FS=y CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_VM is not set
# CONFIG_FRAME_POINTER is not set # CONFIG_FRAME_POINTER is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_INIT_DEBUG=y CONFIG_INIT_DEBUG=y
# CONFIG_IOMMU_DEBUG is not set # CONFIG_IOMMU_DEBUG is not set
CONFIG_KPROBES=y CONFIG_KPROBES=y
......
...@@ -36,9 +36,6 @@ ...@@ -36,9 +36,6 @@
#undef WARN_OLD #undef WARN_OLD
#undef CORE_DUMP /* probably broken */ #undef CORE_DUMP /* probably broken */
extern int ia32_setup_arg_pages(struct linux_binprm *bprm,
unsigned long stack_top, int exec_stack);
static int load_aout_binary(struct linux_binprm *, struct pt_regs * regs); static int load_aout_binary(struct linux_binprm *, struct pt_regs * regs);
static int load_aout_library(struct file*); static int load_aout_library(struct file*);
......
...@@ -335,7 +335,8 @@ static void elf32_init(struct pt_regs *regs) ...@@ -335,7 +335,8 @@ static void elf32_init(struct pt_regs *regs)
me->thread.es = __USER_DS; me->thread.es = __USER_DS;
} }
int setup_arg_pages(struct linux_binprm *bprm, unsigned long stack_top, int executable_stack) int ia32_setup_arg_pages(struct linux_binprm *bprm, unsigned long stack_top,
int executable_stack)
{ {
unsigned long stack_base; unsigned long stack_base;
struct vm_area_struct *mpnt; struct vm_area_struct *mpnt;
...@@ -389,6 +390,7 @@ int setup_arg_pages(struct linux_binprm *bprm, unsigned long stack_top, int exec ...@@ -389,6 +390,7 @@ int setup_arg_pages(struct linux_binprm *bprm, unsigned long stack_top, int exec
return 0; return 0;
} }
EXPORT_SYMBOL(ia32_setup_arg_pages);
static unsigned long static unsigned long
elf32_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type) elf32_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type)
......
...@@ -11,6 +11,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \ ...@@ -11,6 +11,7 @@ obj-y := process.o signal.o entry.o traps.o irq.o \
obj-$(CONFIG_X86_MCE) += mce.o obj-$(CONFIG_X86_MCE) += mce.o
obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o obj-$(CONFIG_X86_MCE_INTEL) += mce_intel.o
obj-$(CONFIG_X86_MCE_AMD) += mce_amd.o
obj-$(CONFIG_MTRR) += ../../i386/kernel/cpu/mtrr/ obj-$(CONFIG_MTRR) += ../../i386/kernel/cpu/mtrr/
obj-$(CONFIG_ACPI) += acpi/ obj-$(CONFIG_ACPI) += acpi/
obj-$(CONFIG_X86_MSR) += msr.o obj-$(CONFIG_X86_MSR) += msr.o
......
...@@ -196,7 +196,7 @@ static __u32 __init search_agp_bridge(u32 *order, int *valid_agp) ...@@ -196,7 +196,7 @@ static __u32 __init search_agp_bridge(u32 *order, int *valid_agp)
void __init iommu_hole_init(void) void __init iommu_hole_init(void)
{ {
int fix, num; int fix, num;
u32 aper_size, aper_alloc = 0, aper_order, last_aper_order = 0; u32 aper_size, aper_alloc = 0, aper_order = 0, last_aper_order = 0;
u64 aper_base, last_aper_base = 0; u64 aper_base, last_aper_base = 0;
int valid_agp = 0; int valid_agp = 0;
......
...@@ -833,6 +833,16 @@ int setup_profiling_timer(unsigned int multiplier) ...@@ -833,6 +833,16 @@ int setup_profiling_timer(unsigned int multiplier)
return 0; return 0;
} }
#ifdef CONFIG_X86_MCE_AMD
void setup_threshold_lvt(unsigned long lvt_off)
{
unsigned int v = 0;
unsigned long reg = (lvt_off << 4) + 0x500;
v |= THRESHOLD_APIC_VECTOR;
apic_write(reg, v);
}
#endif /* CONFIG_X86_MCE_AMD */
#undef APIC_DIVISOR #undef APIC_DIVISOR
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment