lkml.org 
[lkml]   [2023]   [Oct]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch V4 16/30] x86/microcode: Get rid of the schedule work indirection
    Date
    Scheduling work on all CPUs to collect the microcode information is just
    another extra step for no value. Let the CPU hotplug callback registration
    do it.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    ---
    V2: New patch
    ---
    arch/x86/kernel/cpu/microcode/core.c | 29 ++++++++++-------------------
    1 file changed, 10 insertions(+), 19 deletions(-)

    --- a/arch/x86/kernel/cpu/microcode/core.c
    +++ b/arch/x86/kernel/cpu/microcode/core.c
    @@ -510,8 +510,16 @@ static struct syscore_ops mc_syscore_ops

    static int mc_cpu_online(unsigned int cpu)
    {
    + struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
    struct device *dev = get_cpu_device(cpu);

    + memset(uci, 0, sizeof(*uci));
    +
    + microcode_ops->collect_cpu_info(cpu, &uci->cpu_sig);
    + cpu_data(cpu).microcode = uci->cpu_sig.rev;
    + if (!cpu)
    + boot_cpu_data.microcode = uci->cpu_sig.rev;
    +
    if (sysfs_create_group(&dev->kobj, &mc_attr_group))
    pr_err("Failed to create group for CPU%d\n", cpu);
    return 0;
    @@ -532,20 +540,6 @@ static int mc_cpu_down_prep(unsigned int
    return 0;
    }

    -static void setup_online_cpu(struct work_struct *work)
    -{
    - int cpu = smp_processor_id();
    - struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
    -
    - memset(uci, 0, sizeof(*uci));
    -
    - microcode_ops->collect_cpu_info(cpu, &uci->cpu_sig);
    - cpu_data(cpu).microcode = uci->cpu_sig.rev;
    - if (!cpu)
    - boot_cpu_data.microcode = uci->cpu_sig.rev;
    - mc_cpu_online(cpu);
    -}
    -
    static struct attribute *cpu_root_microcode_attrs[] = {
    #ifdef CONFIG_MICROCODE_LATE_LOADING
    &dev_attr_reload.attr,
    @@ -591,12 +585,9 @@ static int __init microcode_init(void)
    }
    }

    - /* Do per-CPU setup */
    - schedule_on_each_cpu(setup_online_cpu);
    -
    register_syscore_ops(&mc_syscore_ops);
    - cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "x86/microcode:online",
    - mc_cpu_online, mc_cpu_down_prep);
    + cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "x86/microcode:online",
    + mc_cpu_online, mc_cpu_down_prep);

    pr_info("Microcode Update Driver: v%s.", DRIVER_VERSION);

    \
     
     \ /
      Last update: 2023-10-02 14:01    [W:5.399 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site