Commit c3c9897c authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-fixes-for-linus' of...

Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  x86: fix section mismatch warning - apic_x2apic_phys
  x86: fix section mismatch warning - apic_x2apic_cluster
  x86: fix section mismatch warning - apic_x2apic_uv_x
  x86: fix section mismatch warning - apic_physflat
  x86: fix section mismatch warning - apic_flat
  x86: memtest fix use of reserve_early()
  x86 syscall.h: fix argument order
  x86/tlb_uv: remove strange mc146818rtc include
  x86: remove redundant KERN_DEBUG on pr_debug
  x86: do_boot_cpu - check if we have ESR register
  x86: MAINTAINERS change for AMD microcode patch loader
  x86/proc: fix /proc/cpuinfo cpu offline bug
  x86: call dmi-quirks for HP Laptops after early-quirks are executed
  x86, kexec: fix hang on i386 when panic occurs while console_sem is held
  MCE: Don't run 32bit machine checks with interrupts on
  x86: SB600: skip IRQ0 override if it is not routed to INT2 of IOAPIC
  x86: make variables static
parents d2441183 3cfba089
...@@ -378,8 +378,9 @@ T: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git ...@@ -378,8 +378,9 @@ T: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
S: Supported S: Supported
AMD MICROCODE UPDATE SUPPORT AMD MICROCODE UPDATE SUPPORT
P: Peter Oruba P: Andreas Herrmann
M: peter.oruba@amd.com M: andeas.herrmann3@amd.com
L: amd64-microcode@amd64.org
S: Supported S: Supported
AMS (Apple Motion Sensor) DRIVER AMS (Apple Motion Sensor) DRIVER
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include "boot.h" #include "boot.h"
#include "video.h" #include "video.h"
__videocard video_bios; static __videocard video_bios;
/* Set a conventional BIOS mode */ /* Set a conventional BIOS mode */
static int set_bios_mode(u8 mode); static int set_bios_mode(u8 mode);
...@@ -119,7 +119,7 @@ static int bios_probe(void) ...@@ -119,7 +119,7 @@ static int bios_probe(void)
return nmodes; return nmodes;
} }
__videocard video_bios = static __videocard video_bios =
{ {
.card_name = "BIOS", .card_name = "BIOS",
.probe = bios_probe, .probe = bios_probe,
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
static struct vesa_general_info vginfo; static struct vesa_general_info vginfo;
static struct vesa_mode_info vminfo; static struct vesa_mode_info vminfo;
__videocard video_vesa; static __videocard video_vesa;
#ifndef _WAKEUP #ifndef _WAKEUP
static void vesa_store_mode_params_graphics(void); static void vesa_store_mode_params_graphics(void);
...@@ -293,7 +293,7 @@ void vesa_store_edid(void) ...@@ -293,7 +293,7 @@ void vesa_store_edid(void)
#endif /* not _WAKEUP */ #endif /* not _WAKEUP */
__videocard video_vesa = static __videocard video_vesa =
{ {
.card_name = "VESA", .card_name = "VESA",
.probe = vesa_probe, .probe = vesa_probe,
......
...@@ -93,26 +93,26 @@ static inline void syscall_get_arguments(struct task_struct *task, ...@@ -93,26 +93,26 @@ static inline void syscall_get_arguments(struct task_struct *task,
{ {
# ifdef CONFIG_IA32_EMULATION # ifdef CONFIG_IA32_EMULATION
if (task_thread_info(task)->status & TS_COMPAT) if (task_thread_info(task)->status & TS_COMPAT)
switch (i + n) { switch (i) {
case 6: case 0:
if (!n--) break; if (!n--) break;
*args++ = regs->bp; *args++ = regs->bx;
case 5: case 1:
if (!n--) break; if (!n--) break;
*args++ = regs->di; *args++ = regs->cx;
case 4: case 2:
if (!n--) break; if (!n--) break;
*args++ = regs->si; *args++ = regs->dx;
case 3: case 3:
if (!n--) break; if (!n--) break;
*args++ = regs->dx; *args++ = regs->si;
case 2: case 4:
if (!n--) break; if (!n--) break;
*args++ = regs->cx; *args++ = regs->di;
case 1: case 5:
if (!n--) break; if (!n--) break;
*args++ = regs->bx; *args++ = regs->bp;
case 0: case 6:
if (!n--) break; if (!n--) break;
default: default:
BUG(); BUG();
...@@ -120,26 +120,26 @@ static inline void syscall_get_arguments(struct task_struct *task, ...@@ -120,26 +120,26 @@ static inline void syscall_get_arguments(struct task_struct *task,
} }
else else
# endif # endif
switch (i + n) { switch (i) {
case 6: case 0:
if (!n--) break; if (!n--) break;
*args++ = regs->r9; *args++ = regs->di;
case 5: case 1:
if (!n--) break; if (!n--) break;
*args++ = regs->r8; *args++ = regs->si;
case 4: case 2:
if (!n--) break; if (!n--) break;
*args++ = regs->r10; *args++ = regs->dx;
case 3: case 3:
if (!n--) break; if (!n--) break;
*args++ = regs->dx; *args++ = regs->r10;
case 2: case 4:
if (!n--) break; if (!n--) break;
*args++ = regs->si; *args++ = regs->r8;
case 1: case 5:
if (!n--) break; if (!n--) break;
*args++ = regs->di; *args++ = regs->r9;
case 0: case 6:
if (!n--) break; if (!n--) break;
default: default:
BUG(); BUG();
...@@ -154,55 +154,57 @@ static inline void syscall_set_arguments(struct task_struct *task, ...@@ -154,55 +154,57 @@ static inline void syscall_set_arguments(struct task_struct *task,
{ {
# ifdef CONFIG_IA32_EMULATION # ifdef CONFIG_IA32_EMULATION
if (task_thread_info(task)->status & TS_COMPAT) if (task_thread_info(task)->status & TS_COMPAT)
switch (i + n) { switch (i) {
case 6: case 0:
if (!n--) break; if (!n--) break;
regs->bp = *args++; regs->bx = *args++;
case 5: case 1:
if (!n--) break; if (!n--) break;
regs->di = *args++; regs->cx = *args++;
case 4: case 2:
if (!n--) break; if (!n--) break;
regs->si = *args++; regs->dx = *args++;
case 3: case 3:
if (!n--) break; if (!n--) break;
regs->dx = *args++; regs->si = *args++;
case 2: case 4:
if (!n--) break; if (!n--) break;
regs->cx = *args++; regs->di = *args++;
case 1: case 5:
if (!n--) break; if (!n--) break;
regs->bx = *args++; regs->bp = *args++;
case 0: case 6:
if (!n--) break; if (!n--) break;
default: default:
BUG(); BUG();
break;
} }
else else
# endif # endif
switch (i + n) { switch (i) {
case 6: case 0:
if (!n--) break; if (!n--) break;
regs->r9 = *args++; regs->di = *args++;
case 5: case 1:
if (!n--) break; if (!n--) break;
regs->r8 = *args++; regs->si = *args++;
case 4: case 2:
if (!n--) break; if (!n--) break;
regs->r10 = *args++; regs->dx = *args++;
case 3: case 3:
if (!n--) break; if (!n--) break;
regs->dx = *args++; regs->r10 = *args++;
case 2: case 4:
if (!n--) break; if (!n--) break;
regs->si = *args++; regs->r8 = *args++;
case 1: case 5:
if (!n--) break; if (!n--) break;
regs->di = *args++; regs->r9 = *args++;
case 0: case 6:
if (!n--) break; if (!n--) break;
default: default:
BUG(); BUG();
break;
} }
} }
......
...@@ -1137,7 +1137,7 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity) ...@@ -1137,7 +1137,7 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity)
return gsi; return gsi;
} }
if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) { if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) {
pr_debug(KERN_DEBUG "Pin %d-%d already programmed\n", pr_debug("Pin %d-%d already programmed\n",
mp_ioapic_routing[ioapic].apic_id, ioapic_pin); mp_ioapic_routing[ioapic].apic_id, ioapic_pin);
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
return (gsi < IRQ_COMPRESSION_START ? gsi : gsi_to_irq[gsi]); return (gsi < IRQ_COMPRESSION_START ? gsi : gsi_to_irq[gsi]);
...@@ -1599,6 +1599,11 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = { ...@@ -1599,6 +1599,11 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"), DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
}, },
}, },
{}
};
/* second table for DMI checks that should run after early-quirks */
static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
/* /*
* HP laptops which use a DSDT reporting as HP/SB400/10000, * HP laptops which use a DSDT reporting as HP/SB400/10000,
* which includes some code which overrides all temperature * which includes some code which overrides all temperature
...@@ -1727,6 +1732,9 @@ int __init early_acpi_boot_init(void) ...@@ -1727,6 +1732,9 @@ int __init early_acpi_boot_init(void)
int __init acpi_boot_init(void) int __init acpi_boot_init(void)
{ {
/* those are executed after early-quirks are executed */
dmi_check_system(acpi_dmi_table_late);
/* /*
* If acpi_disabled, bail out * If acpi_disabled, bail out
* One exception: acpi=ht continues far enough to enumerate LAPICs * One exception: acpi=ht continues far enough to enumerate LAPICs
......
...@@ -160,14 +160,16 @@ static void *c_start(struct seq_file *m, loff_t *pos) ...@@ -160,14 +160,16 @@ static void *c_start(struct seq_file *m, loff_t *pos)
{ {
if (*pos == 0) /* just in case, cpu 0 is not the first */ if (*pos == 0) /* just in case, cpu 0 is not the first */
*pos = first_cpu(cpu_online_map); *pos = first_cpu(cpu_online_map);
if ((*pos) < nr_cpu_ids && cpu_online(*pos)) else
*pos = next_cpu_nr(*pos - 1, cpu_online_map);
if ((*pos) < nr_cpu_ids)
return &cpu_data(*pos); return &cpu_data(*pos);
return NULL; return NULL;
} }
static void *c_next(struct seq_file *m, void *v, loff_t *pos) static void *c_next(struct seq_file *m, void *v, loff_t *pos)
{ {
*pos = next_cpu(*pos, cpu_online_map); (*pos)++;
return c_start(m, pos); return c_start(m, pos);
} }
......
...@@ -405,7 +405,6 @@ die_nmi(char *str, struct pt_regs *regs, int do_panic) ...@@ -405,7 +405,6 @@ die_nmi(char *str, struct pt_regs *regs, int do_panic)
panic("Non maskable interrupt"); panic("Non maskable interrupt");
console_silent(); console_silent();
spin_unlock(&nmi_print_lock); spin_unlock(&nmi_print_lock);
bust_spinlocks(0);
/* /*
* If we are in kernel we are probably nested up pretty bad * If we are in kernel we are probably nested up pretty bad
...@@ -416,6 +415,7 @@ die_nmi(char *str, struct pt_regs *regs, int do_panic) ...@@ -416,6 +415,7 @@ die_nmi(char *str, struct pt_regs *regs, int do_panic)
crash_kexec(regs); crash_kexec(regs);
} }
bust_spinlocks(0);
do_exit(SIGSEGV); do_exit(SIGSEGV);
} }
......
...@@ -1024,7 +1024,7 @@ ENTRY(machine_check) ...@@ -1024,7 +1024,7 @@ ENTRY(machine_check)
RING0_INT_FRAME RING0_INT_FRAME
pushl $0 pushl $0
CFI_ADJUST_CFA_OFFSET 4 CFI_ADJUST_CFA_OFFSET 4
pushl $do_machine_check pushl machine_check_vector
CFI_ADJUST_CFA_OFFSET 4 CFI_ADJUST_CFA_OFFSET 4
jmp error_code jmp error_code
CFI_ENDPROC CFI_ENDPROC
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <acpi/acpi_bus.h> #include <acpi/acpi_bus.h>
#endif #endif
static int __init flat_acpi_madt_oem_check(char *oem_id, char *oem_table_id) static int flat_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{ {
return 1; return 1;
} }
...@@ -170,7 +170,7 @@ struct genapic apic_flat = { ...@@ -170,7 +170,7 @@ struct genapic apic_flat = {
* We cannot use logical delivery in this case because the mask * We cannot use logical delivery in this case because the mask
* overflows, so use physical mode. * overflows, so use physical mode.
*/ */
static int __init physflat_acpi_madt_oem_check(char *oem_id, char *oem_table_id) static int physflat_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{ {
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
/* /*
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
DEFINE_PER_CPU(u32, x86_cpu_to_logical_apicid); DEFINE_PER_CPU(u32, x86_cpu_to_logical_apicid);
static int __init x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{ {
if (cpu_has_x2apic) if (cpu_has_x2apic)
return 1; return 1;
......
...@@ -19,7 +19,7 @@ static int set_x2apic_phys_mode(char *arg) ...@@ -19,7 +19,7 @@ static int set_x2apic_phys_mode(char *arg)
} }
early_param("x2apic_phys", set_x2apic_phys_mode); early_param("x2apic_phys", set_x2apic_phys_mode);
static int __init x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{ {
if (cpu_has_x2apic && x2apic_phys) if (cpu_has_x2apic && x2apic_phys)
return 1; return 1;
......
...@@ -30,7 +30,7 @@ DEFINE_PER_CPU(int, x2apic_extra_bits); ...@@ -30,7 +30,7 @@ DEFINE_PER_CPU(int, x2apic_extra_bits);
static enum uv_system_type uv_system_type; static enum uv_system_type uv_system_type;
static int __init uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id) static int uv_acpi_madt_oem_check(char *oem_id, char *oem_table_id)
{ {
if (!strcmp(oem_id, "SGI")) { if (!strcmp(oem_id, "SGI")) {
if (!strcmp(oem_table_id, "UVL")) if (!strcmp(oem_table_id, "UVL"))
......
...@@ -218,7 +218,7 @@ static void __init setup_node_to_cpumask_map(void) ...@@ -218,7 +218,7 @@ static void __init setup_node_to_cpumask_map(void)
/* allocate the map */ /* allocate the map */
map = alloc_bootmem_low(nr_node_ids * sizeof(cpumask_t)); map = alloc_bootmem_low(nr_node_ids * sizeof(cpumask_t));
pr_debug(KERN_DEBUG "Node to cpumask map at %p for %d nodes\n", pr_debug("Node to cpumask map at %p for %d nodes\n",
map, nr_node_ids); map, nr_node_ids);
/* node_to_cpumask() will now work */ /* node_to_cpumask() will now work */
......
...@@ -893,9 +893,11 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu) ...@@ -893,9 +893,11 @@ static int __cpuinit do_boot_cpu(int apicid, int cpu)
smpboot_setup_warm_reset_vector(start_ip); smpboot_setup_warm_reset_vector(start_ip);
/* /*
* Be paranoid about clearing APIC errors. * Be paranoid about clearing APIC errors.
*/ */
apic_write(APIC_ESR, 0); if (APIC_INTEGRATED(apic_version[boot_cpu_physical_apicid])) {
apic_read(APIC_ESR); apic_write(APIC_ESR, 0);
apic_read(APIC_ESR);
}
} }
/* /*
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* This code is released under the GNU General Public License version 2 or * This code is released under the GNU General Public License version 2 or
* later. * later.
*/ */
#include <linux/mc146818rtc.h> #include <linux/seq_file.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/kernel.h> #include <linux/kernel.h>
......
...@@ -931,14 +931,6 @@ do_device_not_available(struct pt_regs *regs, long error) ...@@ -931,14 +931,6 @@ do_device_not_available(struct pt_regs *regs, long error)
} }
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
#ifdef CONFIG_X86_MCE
dotraplinkage void __kprobes do_machine_check(struct pt_regs *regs, long error)
{
conditional_sti(regs);
machine_check_vector(regs, error);
}
#endif
dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code) dotraplinkage void do_iret_error(struct pt_regs *regs, long error_code)
{ {
siginfo_t info; siginfo_t info;
......
...@@ -248,7 +248,7 @@ int restore_i387_xstate(void __user *buf) ...@@ -248,7 +248,7 @@ int restore_i387_xstate(void __user *buf)
* This will be saved when ever the FP and extended state context is * This will be saved when ever the FP and extended state context is
* saved on the user stack during the signal handler delivery to the user. * saved on the user stack during the signal handler delivery to the user.
*/ */
void prepare_fx_sw_frame(void) static void prepare_fx_sw_frame(void)
{ {
int size_extended = (xstate_size - sizeof(struct i387_fxsave_struct)) + int size_extended = (xstate_size - sizeof(struct i387_fxsave_struct)) +
FP_XSTATE_MAGIC2_SIZE; FP_XSTATE_MAGIC2_SIZE;
......
...@@ -61,9 +61,9 @@ static void __init memtest(unsigned long start_phys, unsigned long size, ...@@ -61,9 +61,9 @@ static void __init memtest(unsigned long start_phys, unsigned long size,
last_bad += incr; last_bad += incr;
} else { } else {
if (start_bad) { if (start_bad) {
printk(KERN_CONT "\n %010lx bad mem addr %010lx - %010lx reserved", printk(KERN_CONT "\n %016lx bad mem addr %010lx - %010lx reserved",
val, start_bad, last_bad + incr); val, start_bad, last_bad + incr);
reserve_early(start_bad, last_bad - start_bad, "BAD RAM"); reserve_early(start_bad, last_bad + incr, "BAD RAM");
} }
start_bad = last_bad = start_phys_aligned; start_bad = last_bad = start_phys_aligned;
} }
...@@ -72,9 +72,8 @@ static void __init memtest(unsigned long start_phys, unsigned long size, ...@@ -72,9 +72,8 @@ static void __init memtest(unsigned long start_phys, unsigned long size,
if (start_bad) { if (start_bad) {
printk(KERN_CONT "\n %016lx bad mem addr %010lx - %010lx reserved", printk(KERN_CONT "\n %016lx bad mem addr %010lx - %010lx reserved",
val, start_bad, last_bad + incr); val, start_bad, last_bad + incr);
reserve_early(start_bad, last_bad - start_bad, "BAD RAM"); reserve_early(start_bad, last_bad + incr, "BAD RAM");
} }
} }
/* default is disabled */ /* default is disabled */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment