linux/arch/x86/kernel/cpu
Rik van Riel cb6075bc62 x86/mm: Fix early boot use of INVPLGB
The INVLPGB instruction has limits on how many pages it can invalidate
at once. That limit is enumerated in CPUID, read by the kernel, and
stored in 'invpgb_count_max'. Ranged invalidation, like
invlpgb_kernel_range_flush() break up their invalidations so
that they do not exceed the limit.

However, early boot code currently attempts to do ranged
invalidation before populating 'invlpgb_count_max'. There is a
for loop which is basically:

	for (...; addr < end; addr += invlpgb_count_max*PAGE_SIZE)

If invlpgb_kernel_range_flush is called before the kernel has read
the value of invlpgb_count_max from the hardware, the normally
bounded loop can become an infinite loop if invlpgb_count_max is
initialized to zero.

Fix that issue by initializing invlpgb_count_max to 1.

This way INVPLGB at early boot time will be a little bit slower
than normal (with initialized invplgb_count_max), and not an
instant hang at bootup time.

Fixes: b7aa05cbdc ("x86/mm: Add INVLPGB support code")
Signed-off-by: Rik van Riel <riel@surriel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Link: https://lore.kernel.org/all/20250606171112.4013261-3-riel%40surriel.com
2025-06-17 16:36:58 -07:00
..
mce Merge branch 'x86/msr' into x86/core, to resolve conflicts 2025-05-13 10:42:06 +02:00
microcode x86/cpuid: Rename have_cpuid_p() to cpuid_feature() 2025-05-15 18:23:55 +02:00
mtrr x86/mtrr: Check if fixed-range MTRRs exist in mtrr_save_fixed_ranges() 2025-05-12 13:04:40 +02:00
resctrl x86,fs/resctrl: Remove inappropriate references to cacheinfo in the resctrl subsystem 2025-06-16 21:06:12 +02:00
sgx * Make SGX less likely to induce fatal machine checks 2025-05-29 21:13:17 -07:00
.gitignore
acrn.c x86/traps: Add sysvec_install() to install a system interrupt handler 2024-01-31 22:02:36 +01:00
amd_cache_disable.c x86/platform/amd: Move the <asm/amd_nb.h> header to <asm/amd/nb.h> 2025-04-14 09:34:14 +02:00
amd.c x86/mm: Fix early boot use of INVPLGB 2025-06-17 16:36:58 -07:00
aperfmperf.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
bugs.c x86/bugs: Fix spectre_v2 mitigation default on Intel 2025-05-21 11:51:32 +02:00
bus_lock.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
cacheinfo.c x86/cacheinfo: Rename CPUID(0x2) descriptors iterator parameter 2025-05-16 10:49:55 +02:00
centaur.c x86/cpu: Use common topology code for Centaur and Zhaoxin 2024-02-15 22:07:37 +01:00
common.c x86/cpuid: Rename have_cpuid_p() to cpuid_feature() 2025-05-15 18:23:55 +02:00
cpu.h x86/cacheinfo: Move AMD cache_disable_0/1 handling to separate file 2025-03-25 10:22:39 +01:00
cpuid_0x2_table.c x86/cpu: Consolidate CPUID leaf 0x2 tables 2025-03-25 10:23:04 +01:00
cpuid-deps.c x86/cpufeatures: Add X86_FEATURE_APX 2025-04-16 09:44:13 +02:00
cyrix.c x86/CPU: Fix warm boot hang regression on AMD SC1100 SoC systems 2025-02-25 22:44:01 +01:00
debugfs.c x86/cpu: Prefix hexadecimal values with 0x in cpu_debug_show() 2025-02-27 13:26:53 +01:00
feat_ctl.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
hygon.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
hypervisor.c
intel_epb.c x86/msr: Rename 'wrmsrl_on_cpu()' to 'wrmsrq_on_cpu()' 2025-04-10 11:59:05 +02:00
intel.c x86/cpu/intel: Rename CPUID(0x2) descriptors iterator parameter 2025-05-16 10:49:55 +02:00
Makefile x86/cpu: Consolidate CPUID leaf 0x2 tables 2025-03-25 10:23:04 +01:00
match.c x86/cpu: Update x86_match_cpu() to also use cpu-type 2025-03-19 11:17:11 +01:00
mkcapflags.sh x86/cpufeatures: Flip the /proc/cpuinfo appearance logic 2024-06-20 21:04:22 +02:00
mshyperv.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
perfctr-watchdog.c
powerflags.c
proc.c cpufreq: Allow arch_freq_get_on_cpu to return an error 2025-02-17 18:09:20 +00:00
rdrand.c x86/msr: Prepare for including <linux/percpu.h> into <asm/msr.h> 2024-03-04 12:01:39 +01:00
scattered.c x86/cpufeatures: Add X86_FEATURE_APX 2025-04-16 09:44:13 +02:00
topology_amd.c Merge branch 'x86/msr' into x86/core, to resolve conflicts 2025-05-13 10:42:06 +02:00
topology_common.c x86/topology: Introduce topology_logical_core_id() 2024-12-02 12:01:35 +01:00
topology_ext.c x86/cpu/topology: Add support for the AMD 0x80000026 leaf 2024-03-22 11:22:14 +01:00
topology.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
topology.h x86/cpu/topology: Retrieve cores per package from topology bitmaps 2024-02-15 22:07:45 +01:00
transmeta.c
tsx.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00
umc.c
umwait.c x86/msr: Replace wrmsr(msr, low, 0) with wrmsrq(msr, low) 2025-05-02 10:36:36 +02:00
vmware.c x86/vmware: Parse MP tables for SEV-SNP enabled guests under VMware hypervisors 2025-03-13 19:01:09 +01:00
vortex.c
zhaoxin.c x86/msr: Add explicit includes of <asm/msr.h> 2025-05-02 10:23:47 +02:00