Loading arch/x86/kernel/microcode_core.c +43 −11 Original line number Diff line number Diff line Loading @@ -298,19 +298,27 @@ static ssize_t reload_store(struct device *dev, const char *buf, size_t size) { unsigned long val; int cpu = dev->id; ssize_t ret = 0; int cpu; ssize_t ret = 0, tmp_ret; ret = kstrtoul(buf, 0, &val); if (ret) return ret; if (val == 1) { if (val != 1) return size; get_online_cpus(); if (cpu_online(cpu)) ret = reload_for_cpu(cpu); put_online_cpus(); for_each_online_cpu(cpu) { tmp_ret = reload_for_cpu(cpu); if (tmp_ret != 0) pr_warn("Error reloading microcode on CPU %d\n", cpu); /* save retval of the first encountered reload error */ if (!ret) ret = tmp_ret; } put_online_cpus(); if (!ret) ret = size; Loading Loading @@ -339,7 +347,6 @@ static DEVICE_ATTR(version, 0400, version_show, NULL); static DEVICE_ATTR(processor_flags, 0400, pf_show, NULL); static struct attribute *mc_default_attrs[] = { &dev_attr_reload.attr, &dev_attr_version.attr, &dev_attr_processor_flags.attr, NULL Loading Loading @@ -516,6 +523,16 @@ static const struct x86_cpu_id microcode_id[] = { MODULE_DEVICE_TABLE(x86cpu, microcode_id); #endif static struct attribute *cpu_root_microcode_attrs[] = { &dev_attr_reload.attr, NULL }; static struct attribute_group cpu_root_microcode_group = { .name = "microcode", .attrs = cpu_root_microcode_attrs, }; static int __init microcode_init(void) { struct cpuinfo_x86 *c = &cpu_data(0); Loading Loading @@ -547,9 +564,17 @@ static int __init microcode_init(void) if (error) goto out_pdev; error = sysfs_create_group(&cpu_subsys.dev_root->kobj, &cpu_root_microcode_group); if (error) { pr_err("Error creating microcode group!\n"); goto out_driver; } error = microcode_dev_init(); if (error) goto out_driver; goto out_ucode_group; register_syscore_ops(&mc_syscore_ops); register_hotcpu_notifier(&mc_cpu_notifier); Loading @@ -559,6 +584,10 @@ static int __init microcode_init(void) return 0; out_ucode_group: sysfs_remove_group(&cpu_subsys.dev_root->kobj, &cpu_root_microcode_group); out_driver: get_online_cpus(); mutex_lock(µcode_mutex); Loading @@ -584,6 +613,9 @@ static void __exit microcode_exit(void) unregister_hotcpu_notifier(&mc_cpu_notifier); unregister_syscore_ops(&mc_syscore_ops); sysfs_remove_group(&cpu_subsys.dev_root->kobj, &cpu_root_microcode_group); get_online_cpus(); mutex_lock(µcode_mutex); Loading Loading
arch/x86/kernel/microcode_core.c +43 −11 Original line number Diff line number Diff line Loading @@ -298,19 +298,27 @@ static ssize_t reload_store(struct device *dev, const char *buf, size_t size) { unsigned long val; int cpu = dev->id; ssize_t ret = 0; int cpu; ssize_t ret = 0, tmp_ret; ret = kstrtoul(buf, 0, &val); if (ret) return ret; if (val == 1) { if (val != 1) return size; get_online_cpus(); if (cpu_online(cpu)) ret = reload_for_cpu(cpu); put_online_cpus(); for_each_online_cpu(cpu) { tmp_ret = reload_for_cpu(cpu); if (tmp_ret != 0) pr_warn("Error reloading microcode on CPU %d\n", cpu); /* save retval of the first encountered reload error */ if (!ret) ret = tmp_ret; } put_online_cpus(); if (!ret) ret = size; Loading Loading @@ -339,7 +347,6 @@ static DEVICE_ATTR(version, 0400, version_show, NULL); static DEVICE_ATTR(processor_flags, 0400, pf_show, NULL); static struct attribute *mc_default_attrs[] = { &dev_attr_reload.attr, &dev_attr_version.attr, &dev_attr_processor_flags.attr, NULL Loading Loading @@ -516,6 +523,16 @@ static const struct x86_cpu_id microcode_id[] = { MODULE_DEVICE_TABLE(x86cpu, microcode_id); #endif static struct attribute *cpu_root_microcode_attrs[] = { &dev_attr_reload.attr, NULL }; static struct attribute_group cpu_root_microcode_group = { .name = "microcode", .attrs = cpu_root_microcode_attrs, }; static int __init microcode_init(void) { struct cpuinfo_x86 *c = &cpu_data(0); Loading Loading @@ -547,9 +564,17 @@ static int __init microcode_init(void) if (error) goto out_pdev; error = sysfs_create_group(&cpu_subsys.dev_root->kobj, &cpu_root_microcode_group); if (error) { pr_err("Error creating microcode group!\n"); goto out_driver; } error = microcode_dev_init(); if (error) goto out_driver; goto out_ucode_group; register_syscore_ops(&mc_syscore_ops); register_hotcpu_notifier(&mc_cpu_notifier); Loading @@ -559,6 +584,10 @@ static int __init microcode_init(void) return 0; out_ucode_group: sysfs_remove_group(&cpu_subsys.dev_root->kobj, &cpu_root_microcode_group); out_driver: get_online_cpus(); mutex_lock(µcode_mutex); Loading @@ -584,6 +613,9 @@ static void __exit microcode_exit(void) unregister_hotcpu_notifier(&mc_cpu_notifier); unregister_syscore_ops(&mc_syscore_ops); sysfs_remove_group(&cpu_subsys.dev_root->kobj, &cpu_root_microcode_group); get_online_cpus(); mutex_lock(µcode_mutex); Loading