Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86 idle: clarify AMD erratum 400 workaround

The workaround for AMD erratum 400 uses the term "c1e" falsely suggesting:
1. Intel C1E is somehow involved
2. All AMD processors with C1E are involved

Use the string "amd_c1e" instead of simply "c1e" to clarify that
this workaround is specific to AMD's version of C1E.
Use the string "e400" to clarify that the workaround is specific
to AMD processors with Erratum 400.

This patch is text-substitution only, with no functional change.

cc: x86@kernel.org
Acked-by: Borislav Petkov <borislav.petkov@amd.com>
Signed-off-by: Len Brown <len.brown@intel.com>

Len Brown 02c68a02 333c5ae9

+26 -26
+1 -1
arch/x86/include/asm/acpi.h
··· 138 138 boot_cpu_data.x86_model <= 0x05 && 139 139 boot_cpu_data.x86_mask < 0x0A) 140 140 return 1; 141 - else if (c1e_detected) 141 + else if (amd_e400_c1e_detected) 142 142 return 1; 143 143 else 144 144 return max_cstate;
+1 -1
arch/x86/include/asm/idle.h
··· 16 16 static inline void exit_idle(void) { } 17 17 #endif /* CONFIG_X86_64 */ 18 18 19 - void c1e_remove_cpu(int cpu); 19 + void amd_e400_remove_cpu(int cpu); 20 20 21 21 #endif /* _ASM_X86_IDLE_H */
+2 -2
arch/x86/include/asm/processor.h
··· 758 758 extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx); 759 759 760 760 extern void select_idle_routine(const struct cpuinfo_x86 *c); 761 - extern void init_c1e_mask(void); 761 + extern void init_amd_e400_c1e_mask(void); 762 762 763 763 extern unsigned long boot_option_idle_override; 764 - extern bool c1e_detected; 764 + extern bool amd_e400_c1e_detected; 765 765 766 766 enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_NOMWAIT, 767 767 IDLE_POLL, IDLE_FORCE_MWAIT};
+1 -1
arch/x86/kernel/cpu/common.c
··· 887 887 void __init identify_boot_cpu(void) 888 888 { 889 889 identify_cpu(&boot_cpu_data); 890 - init_c1e_mask(); 890 + init_amd_e400_c1e_mask(); 891 891 #ifdef CONFIG_X86_32 892 892 sysenter_setup(); 893 893 enable_sep_cpu();
+19 -19
arch/x86/kernel/process.c
··· 538 538 return (edx & MWAIT_EDX_C1); 539 539 } 540 540 541 - bool c1e_detected; 542 - EXPORT_SYMBOL(c1e_detected); 541 + bool amd_e400_c1e_detected; 542 + EXPORT_SYMBOL(amd_e400_c1e_detected); 543 543 544 - static cpumask_var_t c1e_mask; 544 + static cpumask_var_t amd_e400_c1e_mask; 545 545 546 - void c1e_remove_cpu(int cpu) 546 + void amd_e400_remove_cpu(int cpu) 547 547 { 548 - if (c1e_mask != NULL) 549 - cpumask_clear_cpu(cpu, c1e_mask); 548 + if (amd_e400_c1e_mask != NULL) 549 + cpumask_clear_cpu(cpu, amd_e400_c1e_mask); 550 550 } 551 551 552 552 /* 553 - * C1E aware idle routine. We check for C1E active in the interrupt 553 + * AMD Erratum 400 aware idle routine. We check for C1E active in the interrupt 554 554 * pending message MSR. If we detect C1E, then we handle it the same 555 555 * way as C3 power states (local apic timer and TSC stop) 556 556 */ 557 - static void c1e_idle(void) 557 + static void amd_e400_idle(void) 558 558 { 559 559 if (need_resched()) 560 560 return; 561 561 562 - if (!c1e_detected) { 562 + if (!amd_e400_c1e_detected) { 563 563 u32 lo, hi; 564 564 565 565 rdmsr(MSR_K8_INT_PENDING_MSG, lo, hi); 566 566 567 567 if (lo & K8_INTP_C1E_ACTIVE_MASK) { 568 - c1e_detected = true; 568 + amd_e400_c1e_detected = true; 569 569 if (!boot_cpu_has(X86_FEATURE_NONSTOP_TSC)) 570 570 mark_tsc_unstable("TSC halt in AMD C1E"); 571 571 printk(KERN_INFO "System has AMD C1E enabled\n"); 572 572 } 573 573 } 574 574 575 - if (c1e_detected) { 575 + if (amd_e400_c1e_detected) { 576 576 int cpu = smp_processor_id(); 577 577 578 - if (!cpumask_test_cpu(cpu, c1e_mask)) { 579 - cpumask_set_cpu(cpu, c1e_mask); 578 + if (!cpumask_test_cpu(cpu, amd_e400_c1e_mask)) { 579 + cpumask_set_cpu(cpu, amd_e400_c1e_mask); 580 580 /* 581 581 * Force broadcast so ACPI can not interfere. 582 582 */ ··· 619 619 pm_idle = mwait_idle; 620 620 } else if (cpu_has_amd_erratum(amd_erratum_400)) { 621 621 /* E400: APIC timer interrupt does not wake up CPU from C1e */ 622 - printk(KERN_INFO "using C1E aware idle routine\n"); 623 - pm_idle = c1e_idle; 622 + printk(KERN_INFO "using AMD E400 aware idle routine\n"); 623 + pm_idle = amd_e400_idle; 624 624 } else 625 625 pm_idle = default_idle; 626 626 } 627 627 628 - void __init init_c1e_mask(void) 628 + void __init init_amd_e400_c1e_mask(void) 629 629 { 630 - /* If we're using c1e_idle, we need to allocate c1e_mask. */ 631 - if (pm_idle == c1e_idle) 632 - zalloc_cpumask_var(&c1e_mask, GFP_KERNEL); 630 + /* If we're using amd_e400_idle, we need to allocate amd_e400_c1e_mask. */ 631 + if (pm_idle == amd_e400_idle) 632 + zalloc_cpumask_var(&amd_e400_c1e_mask, GFP_KERNEL); 633 633 } 634 634 635 635 static int __init idle_setup(char *str)
+1 -1
arch/x86/kernel/smpboot.c
··· 1379 1379 { 1380 1380 idle_task_exit(); 1381 1381 reset_lazy_tlbstate(); 1382 - c1e_remove_cpu(raw_smp_processor_id()); 1382 + amd_e400_remove_cpu(raw_smp_processor_id()); 1383 1383 1384 1384 mb(); 1385 1385 /* Ack it */
+1 -1
drivers/acpi/processor_idle.c
··· 161 161 if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT)) 162 162 return; 163 163 164 - if (c1e_detected) 164 + if (amd_e400_c1e_detected) 165 165 type = ACPI_STATE_C1; 166 166 167 167 /*