From f9f51f18139bf5c14673f9d4ced6b14e9ba7ed8a Mon Sep 17 00:00:00 2001 From: Stephen Rothwell Date: Wed, 30 Nov 2011 15:39:14 +1100 Subject: [PATCH] Revert "cpusets: stall when updating mems_allowed for mempolicy or disjoint nodemask" This reverts commit abf5d6d23d8308427481eb0ca122f3232d130987. --- kernel/cpuset.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/kernel/cpuset.c b/kernel/cpuset.c index d3163e52fb2c..00b3430db294 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c @@ -949,7 +949,7 @@ static void cpuset_migrate_mm(struct mm_struct *mm, const nodemask_t *from, static void cpuset_change_task_nodemask(struct task_struct *tsk, nodemask_t *newmems) { - bool need_loop; + bool masks_disjoint = !nodes_intersects(*newmems, tsk->mems_allowed); repeat: /* @@ -962,14 +962,6 @@ repeat: return; task_lock(tsk); - /* - * Determine if a loop is necessary if another thread is doing - * get_mems_allowed(). If at least one node remains unchanged and - * tsk does not have a mempolicy, then an empty nodemask will not be - * possible when mems_allowed is larger than a word. - */ - need_loop = tsk->mempolicy || - !nodes_intersects(*newmems, tsk->mems_allowed); nodes_or(tsk->mems_allowed, tsk->mems_allowed, *newmems); mpol_rebind_task(tsk, newmems, MPOL_REBIND_STEP1); @@ -989,9 +981,11 @@ repeat: /* * Allocation of memory is very fast, we needn't sleep when waiting - * for the read-side. + * for the read-side. No wait is necessary, however, if at least one + * node remains unchanged. */ - while (need_loop && ACCESS_ONCE(tsk->mems_allowed_change_disable)) { + while (masks_disjoint && + ACCESS_ONCE(tsk->mems_allowed_change_disable)) { task_unlock(tsk); if (!task_curr(tsk)) yield(); -- 2.39.5