Commit 9805a683 authored by Linus Torvalds's avatar Linus Torvalds

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

Pull x86 fixes from Thomas Gleixner:
 "A small set of fixes for x86:

   - Make the tsc=reliable/nowatchdog command line parameter work again.
     It was broken with the introduction of the early TSC clocksource.

   - Prevent the evaluation of exception stacks before they are set up.
     This causes a crash in dumpstack because the stack walk termination
     gets screwed up.

   - Prevent a NULL pointer dereference in the rescource control file
     system.

   - Avoid bogus warnings about APIC id mismatch related to the LDR
     which can happen when the LDR is not in use and therefore not
     initialized. Only evaluate that when the APIC is in logical
     destination mode"

* 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/tsc: Respect tsc command line paraemeter for clocksource_tsc_early
  x86/dumpstack/64: Don't evaluate exception stacks before setup
  x86/apic/32: Avoid bogus LDR warnings
  x86/resctrl: Prevent NULL pointer dereference when reading mondata
parents 621084cd 63ec58b4
...@@ -1586,9 +1586,6 @@ static void setup_local_APIC(void) ...@@ -1586,9 +1586,6 @@ static void setup_local_APIC(void)
{ {
int cpu = smp_processor_id(); int cpu = smp_processor_id();
unsigned int value; unsigned int value;
#ifdef CONFIG_X86_32
int logical_apicid, ldr_apicid;
#endif
if (disable_apic) { if (disable_apic) {
disable_ioapic_support(); disable_ioapic_support();
...@@ -1626,16 +1623,21 @@ static void setup_local_APIC(void) ...@@ -1626,16 +1623,21 @@ static void setup_local_APIC(void)
apic->init_apic_ldr(); apic->init_apic_ldr();
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
/* if (apic->dest_logical) {
* APIC LDR is initialized. If logical_apicid mapping was int logical_apicid, ldr_apicid;
* initialized during get_smp_config(), make sure it matches the
* actual value. /*
*/ * APIC LDR is initialized. If logical_apicid mapping was
logical_apicid = early_per_cpu(x86_cpu_to_logical_apicid, cpu); * initialized during get_smp_config(), make sure it matches
ldr_apicid = GET_APIC_LOGICAL_ID(apic_read(APIC_LDR)); * the actual value.
WARN_ON(logical_apicid != BAD_APICID && logical_apicid != ldr_apicid); */
/* always use the value from LDR */ logical_apicid = early_per_cpu(x86_cpu_to_logical_apicid, cpu);
early_per_cpu(x86_cpu_to_logical_apicid, cpu) = ldr_apicid; ldr_apicid = GET_APIC_LOGICAL_ID(apic_read(APIC_LDR));
if (logical_apicid != BAD_APICID)
WARN_ON(logical_apicid != ldr_apicid);
/* Always use the value from LDR. */
early_per_cpu(x86_cpu_to_logical_apicid, cpu) = ldr_apicid;
}
#endif #endif
/* /*
......
...@@ -522,6 +522,10 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg) ...@@ -522,6 +522,10 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
int ret = 0; int ret = 0;
rdtgrp = rdtgroup_kn_lock_live(of->kn); rdtgrp = rdtgroup_kn_lock_live(of->kn);
if (!rdtgrp) {
ret = -ENOENT;
goto out;
}
md.priv = of->kn->priv; md.priv = of->kn->priv;
resid = md.u.rid; resid = md.u.rid;
......
...@@ -94,6 +94,13 @@ static bool in_exception_stack(unsigned long *stack, struct stack_info *info) ...@@ -94,6 +94,13 @@ static bool in_exception_stack(unsigned long *stack, struct stack_info *info)
BUILD_BUG_ON(N_EXCEPTION_STACKS != 6); BUILD_BUG_ON(N_EXCEPTION_STACKS != 6);
begin = (unsigned long)__this_cpu_read(cea_exception_stacks); begin = (unsigned long)__this_cpu_read(cea_exception_stacks);
/*
* Handle the case where stack trace is collected _before_
* cea_exception_stacks had been initialized.
*/
if (!begin)
return false;
end = begin + sizeof(struct cea_exception_stacks); end = begin + sizeof(struct cea_exception_stacks);
/* Bail if @stack is outside the exception stack area. */ /* Bail if @stack is outside the exception stack area. */
if (stk < begin || stk >= end) if (stk < begin || stk >= end)
......
...@@ -1505,6 +1505,9 @@ void __init tsc_init(void) ...@@ -1505,6 +1505,9 @@ void __init tsc_init(void)
return; return;
} }
if (tsc_clocksource_reliable || no_tsc_watchdog)
clocksource_tsc_early.flags &= ~CLOCK_SOURCE_MUST_VERIFY;
clocksource_register_khz(&clocksource_tsc_early, tsc_khz); clocksource_register_khz(&clocksource_tsc_early, tsc_khz);
detect_art(); detect_art();
} }
......
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