diff options
author | Borislav Petkov <bp@suse.de> | 2014-11-22 11:35:26 +0100 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2014-11-25 13:09:42 +0100 |
commit | b18f3864bfb4ef2af0e25b6ed5e1292f2ac36878 (patch) | |
tree | af5cbfd24c8e6dcfae31c6a6046ff645138ce6cb /drivers/edac | |
parent | 21690934d93408bb7247943f886b960cf30ecd19 (diff) |
EDAC, mce_amd_inj: Add hw-injection attributes
Expose struct mce->inject_flags.
Signed-off-by: Borislav Petkov <bp@suse.de>
Diffstat (limited to 'drivers/edac')
-rw-r--r-- | drivers/edac/mce_amd_inj.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/edac/mce_amd_inj.c b/drivers/edac/mce_amd_inj.c index 9b5ca92737a2..5a758d63a8cc 100644 --- a/drivers/edac/mce_amd_inj.c +++ b/drivers/edac/mce_amd_inj.c @@ -78,6 +78,44 @@ static int toggle_hw_mce_inject(unsigned int cpu, bool enable) return err; } +static int flags_get(void *data, u64 *val) +{ + struct mce *m = (struct mce *)data; + + *val = m->inject_flags; + + return 0; +} + +static int flags_set(void *data, u64 val) +{ + struct mce *m = (struct mce *)data; + + m->inject_flags = (u8)val; + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(flags_fops, flags_get, flags_set, "%llu\n"); + +/* + * On which CPU to inject? + */ +MCE_INJECT_GET(extcpu); + +static int inj_extcpu_set(void *data, u64 val) +{ + struct mce *m = (struct mce *)data; + + if (val >= nr_cpu_ids || !cpu_online(val)) { + pr_err("%s: Invalid CPU: %llu\n", __func__, val); + return -EINVAL; + } + m->extcpu = val; + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(extcpu_fops, inj_extcpu_get, inj_extcpu_set, "%llu\n"); + /* * This denotes into which bank we're injecting and triggers * the injection, at the same time. @@ -119,6 +157,8 @@ struct dfs_node { { .name = "misc", .fops = &misc_fops }, { .name = "addr", .fops = &addr_fops }, { .name = "bank", .fops = &bank_fops }, + { .name = "flags", .fops = &flags_fops }, + { .name = "cpu", .fops = &extcpu_fops }, }; static int __init init_mce_inject(void) |