• Andreas Herrmann's avatar
    x86, ucode-amd: Ensure ucode update on suspend/resume after CPU off/online cycle · 9f15226e
    Andreas Herrmann authored
    When switching a CPU offline/online and then doing
    suspend/resume, ucode is not updated on this CPU.
    
    This is due to the microcode_fini_cpu() call which frees uci->mc
    when setting the CPU offline:
    
      static void microcode_fini_cpu_amd(int cpu)
      {
              struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
    
              vfree(uci->mc);
              uci->mc = NULL;
      }
    
    When the CPU is set online uci->mc is still NULL because no
    ucode update is required.
    
    Finally this prevents ucode update when resuming after suspend:
    
      static enum ucode_state microcode_resume_cpu(int cpu)
      {
            struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
    
            if (!uci->mc)
                    return UCODE_NFOUND;
    
            ...
      }
    
    Fix is to check whether uci->mc is valid before
    microcode_resume_cpu() is called.
    Signed-off-by: default avatarAndreas Herrmann <andreas.herrmann3@amd.com>
    Cc: dimm <dmitry.adamushko@gmail.com>
    LKML-Reference: <20091111190329.GF18592@alberich.amd.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    9f15226e
microcode_core.c 13.9 KB