• Yury Norov's avatar
    powerpc/64: don't refer nr_cpu_ids in asm code when it's undefined · 546a073d
    Yury Norov authored
    generic_secondary_common_init() calls LOAD_REG_ADDR(r7, nr_cpu_ids)
    conditionally on CONFIG_SMP. However, if 'NR_CPUS == 1', kernel doesn't
    use the nr_cpu_ids, and in C code, it's just:
      #if NR_CPUS == 1
      #define nr_cpu_ids
      ...
    
    This series makes declaration of nr_cpu_ids conditional on NR_CPUS == 1,
    and that reveals the issue, because compiler can't link the
    LOAD_REG_ADDR(r7, nr_cpu_ids) against nonexisting symbol.
    
    Current code looks unsafe for those who build kernel with CONFIG_SMP=y and
    NR_CPUS == 1. This is weird configuration, but not disallowed.
    
    Fix the linker error by replacing LOAD_REG_ADDR() with LOAD_REG_IMMEDIATE()
    conditionally on NR_CPUS == 1.
    
    As the following patch adds CONFIG_FORCE_NR_CPUS option that has the
    similar effect on nr_cpu_ids, make the generic_secondary_common_init()
    conditional on it too.
    Reported-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
    Signed-off-by: default avatarYury Norov <yury.norov@gmail.com>
    546a073d
head_64.S 25 KB