|
@@ -449,6 +449,13 @@ static ssize_t rdtgroup_cpus_write(struct kernfs_open_file *of,
|
|
|
goto unlock;
|
|
|
}
|
|
|
|
|
|
+ if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED ||
|
|
|
+ rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ rdt_last_cmd_puts("pseudo-locking in progress\n");
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
+
|
|
|
if (is_cpu_list(of))
|
|
|
ret = cpulist_parse(buf, newmask);
|
|
|
else
|
|
@@ -651,13 +658,22 @@ static ssize_t rdtgroup_tasks_write(struct kernfs_open_file *of,
|
|
|
if (kstrtoint(strstrip(buf), 0, &pid) || pid < 0)
|
|
|
return -EINVAL;
|
|
|
rdtgrp = rdtgroup_kn_lock_live(of->kn);
|
|
|
+ if (!rdtgrp) {
|
|
|
+ rdtgroup_kn_unlock(of->kn);
|
|
|
+ return -ENOENT;
|
|
|
+ }
|
|
|
rdt_last_cmd_clear();
|
|
|
|
|
|
- if (rdtgrp)
|
|
|
- ret = rdtgroup_move_task(pid, rdtgrp, of);
|
|
|
- else
|
|
|
- ret = -ENOENT;
|
|
|
+ if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKED ||
|
|
|
+ rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ rdt_last_cmd_puts("pseudo-locking in progress\n");
|
|
|
+ goto unlock;
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = rdtgroup_move_task(pid, rdtgrp, of);
|
|
|
|
|
|
+unlock:
|
|
|
rdtgroup_kn_unlock(of->kn);
|
|
|
|
|
|
return ret ?: nbytes;
|
|
@@ -2315,6 +2331,14 @@ static int mkdir_rdt_prepare(struct kernfs_node *parent_kn,
|
|
|
goto out_unlock;
|
|
|
}
|
|
|
|
|
|
+ if (rtype == RDTMON_GROUP &&
|
|
|
+ (prdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP ||
|
|
|
+ prdtgrp->mode == RDT_MODE_PSEUDO_LOCKED)) {
|
|
|
+ ret = -EINVAL;
|
|
|
+ rdt_last_cmd_puts("pseudo-locking in progress\n");
|
|
|
+ goto out_unlock;
|
|
|
+ }
|
|
|
+
|
|
|
/* allocate the rdtgroup. */
|
|
|
rdtgrp = kzalloc(sizeof(*rdtgrp), GFP_KERNEL);
|
|
|
if (!rdtgrp) {
|