aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-11-12 13:12:41 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2017-11-12 13:12:41 -0500
commit152bbb43b30ced1b32e9ed6f5ba2ac448de725b6 (patch)
treee000f3cc8b82bc48531ce417cfe97e9b7c51239e
parent69581c74721f40b2e21667197a135120844c03b7 (diff)
parentb8347c2196492f4e1cccde3d92fda1cc2cc7de7e (diff)
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 set of small fixes: - make KGDB work again which got broken by the conversion of WARN() to #UD. The WARN fixup needs to run before the notifier callchain, otherwise KGDB tries to handle it and crashes. - disable KASAN in the ORC unwinder to prevent false positive KASAN warnings - prevent default mapping above 47bit when 5 level page tables are enabled - make the delay calibration optimization work correctly, which had the conditionals the wrong way around and was operating on data which was not yet updated. - remove the bogus X86_TRAP_BP trap init from the default IDT init table, which broke 32bit int3 handling by overwriting the correct int3 setup. - replace this_cpu* with boot_cpu_data access in the preemptible oprofile init code" * 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/debug: Handle warnings before the notifier chain, to fix KGDB crash x86/mm: Fix ELF_ET_DYN_BASE for 5-level paging x86/idt: Remove X86_TRAP_BP initialization in idt_setup_traps() x86/oprofile/ppro: Do not use __this_cpu*() in preemptible context x86/unwind: Disable KASAN checking in the ORC unwinder x86/smpboot: Make optimization of delay calibration work correctly
-rw-r--r--arch/x86/include/asm/elf.h2
-rw-r--r--arch/x86/kernel/idt.c2
-rw-r--r--arch/x86/kernel/smpboot.c11
-rw-r--r--arch/x86/kernel/traps.c10
-rw-r--r--arch/x86/kernel/tsc.c8
-rw-r--r--arch/x86/kernel/unwind_orc.c2
-rw-r--r--arch/x86/oprofile/op_model_ppro.c4
7 files changed, 20 insertions, 19 deletions
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h
index c1a125e47ff3..3a091cea36c5 100644
--- a/arch/x86/include/asm/elf.h
+++ b/arch/x86/include/asm/elf.h
@@ -253,7 +253,7 @@ extern int force_personality32;
253 * space open for things that want to use the area for 32-bit pointers. 253 * space open for things that want to use the area for 32-bit pointers.
254 */ 254 */
255#define ELF_ET_DYN_BASE (mmap_is_ia32() ? 0x000400000UL : \ 255#define ELF_ET_DYN_BASE (mmap_is_ia32() ? 0x000400000UL : \
256 (TASK_SIZE / 3 * 2)) 256 (DEFAULT_MAP_WINDOW / 3 * 2))
257 257
258/* This yields a mask that user programs can use to figure out what 258/* This yields a mask that user programs can use to figure out what
259 instruction set this CPU supports. This could be done in user space, 259 instruction set this CPU supports. This could be done in user space,
diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
index 6107ee1cb8d5..014cb2fc47ff 100644
--- a/arch/x86/kernel/idt.c
+++ b/arch/x86/kernel/idt.c
@@ -92,8 +92,6 @@ static const __initdata struct idt_data def_idts[] = {
92 INTG(X86_TRAP_DF, double_fault), 92 INTG(X86_TRAP_DF, double_fault),
93#endif 93#endif
94 INTG(X86_TRAP_DB, debug), 94 INTG(X86_TRAP_DB, debug),
95 INTG(X86_TRAP_NMI, nmi),
96 INTG(X86_TRAP_BP, int3),
97 95
98#ifdef CONFIG_X86_MCE 96#ifdef CONFIG_X86_MCE
99 INTG(X86_TRAP_MC, &machine_check), 97 INTG(X86_TRAP_MC, &machine_check),
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index ad59edd84de7..65a0ccdc3050 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -194,6 +194,12 @@ static void smp_callin(void)
194 smp_store_cpu_info(cpuid); 194 smp_store_cpu_info(cpuid);
195 195
196 /* 196 /*
197 * The topology information must be up to date before
198 * calibrate_delay() and notify_cpu_starting().
199 */
200 set_cpu_sibling_map(raw_smp_processor_id());
201
202 /*
197 * Get our bogomips. 203 * Get our bogomips.
198 * Update loops_per_jiffy in cpu_data. Previous call to 204 * Update loops_per_jiffy in cpu_data. Previous call to
199 * smp_store_cpu_info() stored a value that is close but not as 205 * smp_store_cpu_info() stored a value that is close but not as
@@ -203,11 +209,6 @@ static void smp_callin(void)
203 cpu_data(cpuid).loops_per_jiffy = loops_per_jiffy; 209 cpu_data(cpuid).loops_per_jiffy = loops_per_jiffy;
204 pr_debug("Stack at about %p\n", &cpuid); 210 pr_debug("Stack at about %p\n", &cpuid);
205 211
206 /*
207 * This must be done before setting cpu_online_mask
208 * or calling notify_cpu_starting.
209 */
210 set_cpu_sibling_map(raw_smp_processor_id());
211 wmb(); 212 wmb();
212 213
213 notify_cpu_starting(cpuid); 214 notify_cpu_starting(cpuid);
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index 67db4f43309e..5a6b8f809792 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -209,9 +209,6 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str,
209 if (fixup_exception(regs, trapnr)) 209 if (fixup_exception(regs, trapnr))
210 return 0; 210 return 0;
211 211
212 if (fixup_bug(regs, trapnr))
213 return 0;
214
215 tsk->thread.error_code = error_code; 212 tsk->thread.error_code = error_code;
216 tsk->thread.trap_nr = trapnr; 213 tsk->thread.trap_nr = trapnr;
217 die(str, regs, error_code); 214 die(str, regs, error_code);
@@ -292,6 +289,13 @@ static void do_error_trap(struct pt_regs *regs, long error_code, char *str,
292 289
293 RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU"); 290 RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU");
294 291
292 /*
293 * WARN*()s end up here; fix them up before we call the
294 * notifier chain.
295 */
296 if (!user_mode(regs) && fixup_bug(regs, trapnr))
297 return;
298
295 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) != 299 if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) !=
296 NOTIFY_STOP) { 300 NOTIFY_STOP) {
297 cond_local_irq_enable(regs); 301 cond_local_irq_enable(regs);
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 796d96bb0821..ad2b925a808e 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -1346,12 +1346,10 @@ void __init tsc_init(void)
1346unsigned long calibrate_delay_is_known(void) 1346unsigned long calibrate_delay_is_known(void)
1347{ 1347{
1348 int sibling, cpu = smp_processor_id(); 1348 int sibling, cpu = smp_processor_id();
1349 struct cpumask *mask = topology_core_cpumask(cpu); 1349 int constant_tsc = cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC);
1350 const struct cpumask *mask = topology_core_cpumask(cpu);
1350 1351
1351 if (!tsc_disabled && !cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC)) 1352 if (tsc_disabled || !constant_tsc || !mask)
1352 return 0;
1353
1354 if (!mask)
1355 return 0; 1353 return 0;
1356 1354
1357 sibling = cpumask_any_but(mask, cpu); 1355 sibling = cpumask_any_but(mask, cpu);
diff --git a/arch/x86/kernel/unwind_orc.c b/arch/x86/kernel/unwind_orc.c
index b95007e7c1b3..a3f973b2c97a 100644
--- a/arch/x86/kernel/unwind_orc.c
+++ b/arch/x86/kernel/unwind_orc.c
@@ -279,7 +279,7 @@ static bool deref_stack_reg(struct unwind_state *state, unsigned long addr,
279 if (!stack_access_ok(state, addr, sizeof(long))) 279 if (!stack_access_ok(state, addr, sizeof(long)))
280 return false; 280 return false;
281 281
282 *val = READ_ONCE_TASK_STACK(state->task, *(unsigned long *)addr); 282 *val = READ_ONCE_NOCHECK(*(unsigned long *)addr);
283 return true; 283 return true;
284} 284}
285 285
diff --git a/arch/x86/oprofile/op_model_ppro.c b/arch/x86/oprofile/op_model_ppro.c
index 350f7096baac..7913b6921959 100644
--- a/arch/x86/oprofile/op_model_ppro.c
+++ b/arch/x86/oprofile/op_model_ppro.c
@@ -212,8 +212,8 @@ static void arch_perfmon_setup_counters(void)
212 eax.full = cpuid_eax(0xa); 212 eax.full = cpuid_eax(0xa);
213 213
214 /* Workaround for BIOS bugs in 6/15. Taken from perfmon2 */ 214 /* Workaround for BIOS bugs in 6/15. Taken from perfmon2 */
215 if (eax.split.version_id == 0 && __this_cpu_read(cpu_info.x86) == 6 && 215 if (eax.split.version_id == 0 && boot_cpu_data.x86 == 6 &&
216 __this_cpu_read(cpu_info.x86_model) == 15) { 216 boot_cpu_data.x86_model == 15) {
217 eax.split.version_id = 2; 217 eax.split.version_id = 2;
218 eax.split.num_counters = 2; 218 eax.split.num_counters = 2;
219 eax.split.bit_width = 40; 219 eax.split.bit_width = 40;