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

x86/mtrr: Let cache_aps_delayed_init replace mtrr_aps_delayed_init

In order to prepare decoupling MTRR and PAT replace the MTRR-specific
mtrr_aps_delayed_init flag with a more generic cache_aps_delayed_init
one.

Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lore.kernel.org/r/20221102074713.21493-12-jgross@suse.com
Signed-off-by: Borislav Petkov <bp@suse.de>

authored by

Juergen Gross and committed by
Borislav Petkov
955d0e08 2c15679e

+22 -17
+2
arch/x86/include/asm/cacheinfo.h
··· 13 13 void cache_disable(void); 14 14 void cache_enable(void); 15 15 void cache_cpu_init(void); 16 + void set_cache_aps_delayed_init(bool val); 17 + bool get_cache_aps_delayed_init(void); 16 18 17 19 #endif /* _ASM_X86_CACHEINFO_H */
-2
arch/x86/include/asm/mtrr.h
··· 43 43 extern int mtrr_del_page(int reg, unsigned long base, unsigned long size); 44 44 extern void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi); 45 45 extern void mtrr_ap_init(void); 46 - extern void set_mtrr_aps_delayed_init(void); 47 46 extern void mtrr_aps_init(void); 48 47 extern void mtrr_bp_restore(void); 49 48 extern int mtrr_trim_uncached_memory(unsigned long end_pfn); ··· 86 87 { 87 88 } 88 89 #define mtrr_ap_init() do {} while (0) 89 - #define set_mtrr_aps_delayed_init() do {} while (0) 90 90 #define mtrr_aps_init() do {} while (0) 91 91 #define mtrr_bp_restore() do {} while (0) 92 92 #define mtrr_disable() do {} while (0)
+12
arch/x86/kernel/cpu/cacheinfo.c
··· 1137 1137 cache_enable(); 1138 1138 local_irq_restore(flags); 1139 1139 } 1140 + 1141 + static bool cache_aps_delayed_init; 1142 + 1143 + void set_cache_aps_delayed_init(bool val) 1144 + { 1145 + cache_aps_delayed_init = val; 1146 + } 1147 + 1148 + bool get_cache_aps_delayed_init(void) 1149 + { 1150 + return cache_aps_delayed_init; 1151 + }
+5 -13
arch/x86/kernel/cpu/mtrr/mtrr.c
··· 68 68 static DEFINE_MUTEX(mtrr_mutex); 69 69 70 70 u64 size_or_mask, size_and_mask; 71 - static bool mtrr_aps_delayed_init; 72 71 73 72 static const struct mtrr_ops *mtrr_ops[X86_VENDOR_NUM] __ro_after_init; 74 73 ··· 174 175 if (data->smp_reg != ~0U) { 175 176 mtrr_if->set(data->smp_reg, data->smp_base, 176 177 data->smp_size, data->smp_type); 177 - } else if (mtrr_aps_delayed_init || !cpu_online(smp_processor_id())) { 178 + } else if (get_cache_aps_delayed_init() || 179 + !cpu_online(smp_processor_id())) { 178 180 cache_cpu_init(); 179 181 } 180 182 return 0; ··· 782 782 783 783 void mtrr_ap_init(void) 784 784 { 785 - if (!memory_caching_control || mtrr_aps_delayed_init) 785 + if (!memory_caching_control || get_cache_aps_delayed_init()) 786 786 return; 787 787 788 788 /* ··· 816 816 smp_call_function_single(first_cpu, mtrr_save_fixed_ranges, NULL, 1); 817 817 } 818 818 819 - void set_mtrr_aps_delayed_init(void) 820 - { 821 - if (!memory_caching_control) 822 - return; 823 - 824 - mtrr_aps_delayed_init = true; 825 - } 826 - 827 819 /* 828 820 * Delayed MTRR initialization for all AP's 829 821 */ ··· 829 837 * by doing set_mtrr_aps_delayed_init(), prior to this point. If not, 830 838 * then we are done. 831 839 */ 832 - if (!mtrr_aps_delayed_init) 840 + if (!get_cache_aps_delayed_init()) 833 841 return; 834 842 835 843 set_mtrr(~0U, 0, 0, 0); 836 - mtrr_aps_delayed_init = false; 844 + set_cache_aps_delayed_init(false); 837 845 } 838 846 839 847 void mtrr_bp_restore(void)
+3 -2
arch/x86/kernel/smpboot.c
··· 58 58 #include <linux/overflow.h> 59 59 60 60 #include <asm/acpi.h> 61 + #include <asm/cacheinfo.h> 61 62 #include <asm/desc.h> 62 63 #include <asm/nmi.h> 63 64 #include <asm/irq.h> ··· 1429 1428 1430 1429 uv_system_init(); 1431 1430 1432 - set_mtrr_aps_delayed_init(); 1431 + set_cache_aps_delayed_init(true); 1433 1432 1434 1433 smp_quirk_init_udelay(); 1435 1434 ··· 1440 1439 1441 1440 void arch_thaw_secondary_cpus_begin(void) 1442 1441 { 1443 - set_mtrr_aps_delayed_init(); 1442 + set_cache_aps_delayed_init(true); 1444 1443 } 1445 1444 1446 1445 void arch_thaw_secondary_cpus_end(void)