#define X86_FEATURE_IBPB              ( 7*32+26) /* Indirect Branch Prediction Barrier */
  #define X86_FEATURE_STIBP             ( 7*32+27) /* Single Thread Indirect Branch Predictors */
  #define X86_FEATURE_ZEN                       ( 7*32+28) /* "" CPU is AMD family 0x17 (Zen) */
- #define X86_FEATURE_IBRS_ENHANCED     ( 7*32+29) /* Enhanced IBRS */
+ #define X86_FEATURE_L1TF_PTEINV               ( 7*32+29) /* "" L1TF workaround PTE inversion */
++#define X86_FEATURE_IBRS_ENHANCED     ( 7*32+30) /* Enhanced IBRS */
  
  /* Virtualization flags: Linux defined, word 8 */
  #define X86_FEATURE_TPR_SHADOW                ( 8*32+ 0) /* Intel TPR Shadow */
 
                return;
  
        setup_force_cpu_bug(X86_BUG_CPU_MELTDOWN);
+ 
+       if (x86_match_cpu(cpu_no_l1tf))
+               return;
+ 
+       setup_force_cpu_bug(X86_BUG_L1TF);
  }
  
 +/*
 + * The NOPL instruction is supposed to exist on all CPUs of family >= 6;
 + * unfortunately, that's not true in practice because of early VIA
 + * chips and (more importantly) broken virtualizers that are not easy
 + * to detect. In the latter case it doesn't even *fail* reliably, so
 + * probing for it doesn't even work. Disable it completely on 32-bit
 + * unless we can find a reliable way to detect all the broken cases.
 + * Enable it explicitly on 64-bit for non-constant inputs of cpu_has().
 + */
 +static void detect_nopl(void)
 +{
 +#ifdef CONFIG_X86_32
 +      setup_clear_cpu_cap(X86_FEATURE_NOPL);
 +#else
 +      setup_force_cpu_cap(X86_FEATURE_NOPL);
 +#endif
 +}
 +
  /*
   * Do minimum CPU detection early.
   * Fields really needed: vendor, cpuid_level, family, model, mask,
 
  #include <asm/apic.h>
  #include <linux/percpu.h>
  #include <linux/hardirq.h>
 -#include <linux/memblock.h>
 +#include <linux/cpuhotplug.h>
  #include <linux/sched.h>
  #include <linux/sched/clock.h>
 +#include <linux/mm.h>
++#include <linux/slab.h>
  
 +#include <asm/hypervisor.h>
  #include <asm/mem_encrypt.h>
  #include <asm/x86_init.h>
  #include <asm/reboot.h>
 
  /*
   * Must be called _AFTER_ setting up the per_cpu areas
   */
 -void __init boot_cpu_state_init(void)
 +void __init boot_cpu_hotplug_init(void)
  {
-       per_cpu_ptr(&cpuhp_state, smp_processor_id())->state = CPUHP_ONLINE;
+       this_cpu_write(cpuhp_state.booted_once, true);
+       this_cpu_write(cpuhp_state.state, CPUHP_ONLINE);
  }