lkml.org 
[lkml]   [2012]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:x86/microcode] x86, microcode: Make reload interface per system
    Commit-ID:  3d8986bc7f309483ee09c7a02888bab09072c19b
    Gitweb: http://git.kernel.org/tip/3d8986bc7f309483ee09c7a02888bab09072c19b
    Author: Borislav Petkov <borislav.petkov@amd.com>
    AuthorDate: Thu, 21 Jun 2012 14:07:17 +0200
    Committer: H. Peter Anvin <hpa@zytor.com>
    CommitDate: Sun, 1 Jul 2012 10:24:09 -0700

    x86, microcode: Make reload interface per system

    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>
    Link: http://lkml.kernel.org/r/1340280437-7718-3-git-send-email-bp@amd64.org
    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    ---
    arch/x86/kernel/microcode_core.c | 36 ++++++++++++++++++++++++++++--------
    1 files changed, 28 insertions(+), 8 deletions(-)

    diff --git a/arch/x86/kernel/microcode_core.c b/arch/x86/kernel/microcode_core.c
    index 24b852b..947e4c6 100644
    --- a/arch/x86/kernel/microcode_core.c
    +++ b/arch/x86/kernel/microcode_core.c
    @@ -301,10 +301,6 @@ static ssize_t reload_store(struct device *dev,
    int cpu;
    ssize_t ret = 0, tmp_ret;

    - /* allow reload only from the BSP */
    - if (boot_cpu_data.cpu_index != dev->id)
    - return -EINVAL;
    -
    ret = kstrtoul(buf, 0, &val);
    if (ret)
    return ret;
    @@ -351,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
    @@ -528,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);
    @@ -559,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);
    @@ -571,7 +584,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 +597,7 @@ out_driver:
    mutex_unlock(&microcode_mutex);
    put_online_cpus();

    -out_pdev:
    + out_pdev:
    platform_device_unregister(microcode_pdev);
    return error;

    @@ -596,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(&microcode_mutex);


    \
     
     \ /
      Last update: 2012-07-01 22:21    [W:0.031 / U:1.348 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site