lkml.org 
[lkml]   [2012]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH 2/2] x86, microcode: Make reload interface per system
    Date
    > From: Borislav Petkov <bp@amd64.org>
    > Date: Tue, 19 Jun 2012 18:03:31 +0200
    > Subject: [PATCH 2/2] x86, microcode: Make reload interface per system
    > To: X86-ML <x86@kernel.org>
    > Cc: "H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@kernel.org>,
    > Thomas Gleixner <tglx@linutronix.de>, LKML
    > <linux-kernel@vger.kernel.org>, Andreas Herrmann
    > <andreas.herrmann3@amd.com>, Borislav Petkov
    > <borislav.petkov@amd.com>, Henrique de Moraes Holschuh
    > <hmh@hmh.eng.br>, Peter Zijlstra <peterz@infradead.org>
    >
    > From: Borislav Petkov <borislav.petkov@amd.com>
    >
    > The reload interface should be per-system so that a full system ucode
    > reload happens (on each core) when doing
    >
    > echo 1 > /sys/devices/system/cpu/microcode/reload
    >
    > Move it to the cpu subsys directory instead of it being per-cpu.
    >
    > Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
    > Cc: Peter Zijlstra <peterz@infradead.org>
    > Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
    > ---
    > arch/x86/kernel/microcode_core.c | 32 ++++++++++++++++++++++++++++----
    > 1 file changed, 28 insertions(+), 4 deletions(-)
    >
    > diff --git a/arch/x86/kernel/microcode_core.c
    > b/arch/x86/kernel/microcode_core.c
    > index 24b852b61be3..4c6f3b37ed3c 100644
    > --- a/arch/x86/kernel/microcode_core.c
    > +++ b/arch/x86/kernel/microcode_core.c
    > @@ -351,7 +351,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
    > @@ -528,6 +527,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);
    > @@ -559,9 +568,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;
    >
    If you put sysfs_create_group() after microcode_dev_init(), out_ucode_group is unnecessary and code is a bit simpler. Microcode_dev_init() doesn't rely on sysfs_create_group() and it's a NULL function any way.

    > register_syscore_ops(&mc_syscore_ops);
    > register_hotcpu_notifier(&mc_cpu_notifier);
    > @@ -571,7 +588,11 @@ static int __init microcode_init(void)
    >
    > return 0;
    >
    > -out_driver:
    > + out_ucode_group:
    > + sysfs_remove_group(&cpu_subsys.dev_root->kobj,
    > + &cpu_root_microcode_group);
    > +
    > + out_driver:
    > get_online_cpus();
    > mutex_lock(&microcode_mutex);
    >
    > @@ -580,7 +601,7 @@ out_driver:
    > mutex_unlock(&microcode_mutex);
    > put_online_cpus();
    >
    > -out_pdev:
    > + out_pdev:
    > platform_device_unregister(microcode_pdev);
    > return error;
    >
    > @@ -596,6 +617,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(&microcode_mutex);


    \
     
     \ /
      Last update: 2012-06-20 02:01    [W:0.031 / U:0.820 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site