|
@@ -89,12 +89,12 @@ struct static_key sched_feat_keys[__SCHED_FEAT_NR] = {
|
|
|
|
|
|
static void sched_feat_disable(int i)
|
|
static void sched_feat_disable(int i)
|
|
{
|
|
{
|
|
- static_key_disable(&sched_feat_keys[i]);
|
|
|
|
|
|
+ static_key_disable_cpuslocked(&sched_feat_keys[i]);
|
|
}
|
|
}
|
|
|
|
|
|
static void sched_feat_enable(int i)
|
|
static void sched_feat_enable(int i)
|
|
{
|
|
{
|
|
- static_key_enable(&sched_feat_keys[i]);
|
|
|
|
|
|
+ static_key_enable_cpuslocked(&sched_feat_keys[i]);
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
static void sched_feat_disable(int i) { };
|
|
static void sched_feat_disable(int i) { };
|
|
@@ -146,9 +146,11 @@ sched_feat_write(struct file *filp, const char __user *ubuf,
|
|
|
|
|
|
/* Ensure the static_key remains in a consistent state */
|
|
/* Ensure the static_key remains in a consistent state */
|
|
inode = file_inode(filp);
|
|
inode = file_inode(filp);
|
|
|
|
+ cpus_read_lock();
|
|
inode_lock(inode);
|
|
inode_lock(inode);
|
|
ret = sched_feat_set(cmp);
|
|
ret = sched_feat_set(cmp);
|
|
inode_unlock(inode);
|
|
inode_unlock(inode);
|
|
|
|
+ cpus_read_unlock();
|
|
if (ret < 0)
|
|
if (ret < 0)
|
|
return ret;
|
|
return ret;
|
|
|
|
|