• Thomas Gleixner's avatar
    x86/percpu: Cure per CPU madness on UP · 71eb4893
    Thomas Gleixner authored
    On UP builds Sparse complains rightfully about accesses to cpu_info with
    per CPU accessors:
    
      cacheinfo.c:282:30: sparse: warning: incorrect type in initializer (different address spaces)
      cacheinfo.c:282:30: sparse:    expected void const [noderef] __percpu *__vpp_verify
      cacheinfo.c:282:30: sparse:    got unsigned int *
    
    The reason is that on UP builds cpu_info which is a per CPU variable on SMP
    is mapped to boot_cpu_info which is a regular variable. There is a hideous
    accessor cpu_data() which tries to hide this, but it's not sufficient as
    some places require raw accessors and generates worse code than the regular
    per CPU accessors.
    
    Waste sizeof(struct x86_cpuinfo) memory on UP and provide the per CPU
    cpu_info unconditionally. This requires to update the CPU info on the boot
    CPU as SMP does. (Ab)use the weakly defined smp_prepare_boot_cpu() function
    and implement exactly that.
    
    This allows to use regular per CPU accessors uncoditionally and paves the
    way to remove the cpu_data() hackery.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20240304005104.622511517@linutronix.de
    71eb4893
smpboot.c 41.6 KB