LTP cpuset_hotplug_test.sh was failing with the following error message cpuset_hotplug 1 TFAIL: root group's cpus isn't expected(Result: 0-5, Expect: 0,2-5). Which is due to a race condition between cpu hotplug operation and reading cpuset.cpus file. When a cpu is onlined/offlined, cpuset schedules a workqueue to sync its internal data structures with the new values. If a read happens during this window, the user will read a stale value, hence triggering the failure above. To fix the issue make sure cpuset_wait_for_hotplug() is called before allowing any value to be read, hence forcing the synchronization to happen before the read. I ran 500 iterations with this fix applied with no failure triggered. Signed-off-by: Qais Yousef <qais.yousef@xxxxxxx> --- I think it's okay to flush the workqueue from the read context? We do it on the write, so I assumed it's okay on the read too. But it'd be good to confirm it doesn't break any rule I'm not aware of. kernel/cgroup/cpuset.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c index 58f5073acff7..593055522626 100644 --- a/kernel/cgroup/cpuset.c +++ b/kernel/cgroup/cpuset.c @@ -2405,6 +2405,9 @@ static int cpuset_common_seq_show(struct seq_file *sf, void *v) cpuset_filetype_t type = seq_cft(sf)->private; int ret = 0; + /* Ensure all hotplug ops were done before reading any value */ + cpuset_wait_for_hotplug(); + spin_lock_irq(&callback_lock); switch (type) { -- 2.17.1