init_intel_misc_features(c);
- if (!c->cpu_index) {
- if (boot_cpu_has(X86_FEATURE_SPEC_CTRL)) {
- printk(KERN_INFO "FEATURE SPEC_CTRL Present\n");
- set_ibrs_supported();
- set_ibpb_supported();
- if (ibrs_inuse)
- sysctl_ibrs_enabled = 1;
- if (ibpb_inuse)
- sysctl_ibpb_enabled = 1;
- } else {
- printk(KERN_INFO "FEATURE SPEC_CTRL Not Present\n");
- }
+ if (boot_cpu_has(X86_FEATURE_SPEC_CTRL)) {
+ printk_once(KERN_INFO "FEATURE SPEC_CTRL Present\n");
+ set_ibrs_supported();
+ set_ibpb_supported();
+ if (ibrs_inuse)
+ sysctl_ibrs_enabled = 1;
+ if (ibpb_inuse)
+ sysctl_ibpb_enabled = 1;
+ } else {
+ printk_once(KERN_INFO "FEATURE SPEC_CTRL Not Present\n");
}
}
#include <linux/mount.h>
#include <linux/uaccess.h>
-#include <linux/mutex.h>
#include <asm/processor.h>
#ifdef CONFIG_X86
int proc_dointvec_ibrs_dump(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
- int ret, orig_inuse;
+ int ret;
unsigned int cpu;
-
ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
printk("sysctl_ibrs_enabled = %u, sysctl_ibpb_enabled = %u\n", sysctl_ibrs_enabled, sysctl_ibpb_enabled);
printk("use_ibrs = %d, use_ibpb = %d\n", use_ibrs, use_ibpb);
- mutex_lock(&spec_ctrl_mutex);
- orig_inuse = use_ibrs;
- /* temporary halt to ibrs usage to dump ibrs values */
- clear_ibrs_inuse();
for_each_online_cpu(cpu) {
u64 val;
val = 0;
printk("read cpu %d ibrs val %lu\n", cpu, (unsigned long) val);
}
- use_ibrs = orig_inuse;
- mutex_unlock(&spec_ctrl_mutex);
return ret;
}
ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
pr_debug("sysctl_ibrs_enabled = %u, sysctl_ibpb_enabled = %u\n", sysctl_ibrs_enabled, sysctl_ibpb_enabled);
pr_debug("before:use_ibrs = %d, use_ibpb = %d\n", use_ibrs, use_ibpb);
- mutex_lock(&spec_ctrl_mutex);
if (sysctl_ibrs_enabled == 0) {
/* always set IBRS off */
set_ibrs_disabled();
/* platform don't support ibrs */
sysctl_ibrs_enabled = 0;
}
- mutex_unlock(&spec_ctrl_mutex);
pr_debug("after:use_ibrs = %d, use_ibpb = %d\n", use_ibrs, use_ibpb);
return ret;
}
ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
pr_debug("sysctl_ibrs_enabled = %u, sysctl_ibpb_enabled = %u\n", sysctl_ibrs_enabled, sysctl_ibpb_enabled);
pr_debug("before:use_ibrs = %d, use_ibpb = %d\n", use_ibrs, use_ibpb);
- mutex_lock(&spec_ctrl_mutex);
if (sysctl_ibpb_enabled == 0)
set_ibpb_disabled();
else if (sysctl_ibpb_enabled == 1) {
/* platform don't support ibpb */
sysctl_ibpb_enabled = 0;
}
- mutex_unlock(&spec_ctrl_mutex);
pr_debug("after:use_ibrs = %d, use_ibpb = %d\n", use_ibrs, use_ibpb);
return ret;
}