diff options
author | Siddha, Suresh B <suresh.b.siddha@intel.com> | 2007-05-08 12:22:47 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2007-05-08 13:01:25 -0400 |
commit | bb8416bf8b93d88e23cbbfde962ef85acda5bd5f (patch) | |
tree | 50b2f20f3fda534027d0fba0fa9e0eac28bb3f48 /arch | |
parent | 9d1d4cc89f3f6952978d37c29607c2d89d350767 (diff) |
[IA64] save and restore cpus_allowed in cpu_idle_wait
Save and Restore the task's cpus_allowed mask, across the set_cpus_allowed()
in cpu_idle_wait(). Without this, we will endup corrupting task's cpu affinity.
Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/ia64/kernel/process.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index ae96d4176995..cba6ac398736 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -237,6 +237,7 @@ void cpu_idle_wait(void) | |||
237 | { | 237 | { |
238 | unsigned int cpu, this_cpu = get_cpu(); | 238 | unsigned int cpu, this_cpu = get_cpu(); |
239 | cpumask_t map; | 239 | cpumask_t map; |
240 | cpumask_t tmp = current->cpus_allowed; | ||
240 | 241 | ||
241 | set_cpus_allowed(current, cpumask_of_cpu(this_cpu)); | 242 | set_cpus_allowed(current, cpumask_of_cpu(this_cpu)); |
242 | put_cpu(); | 243 | put_cpu(); |
@@ -258,6 +259,7 @@ void cpu_idle_wait(void) | |||
258 | } | 259 | } |
259 | cpus_and(map, map, cpu_online_map); | 260 | cpus_and(map, map, cpu_online_map); |
260 | } while (!cpus_empty(map)); | 261 | } while (!cpus_empty(map)); |
262 | set_cpus_allowed(current, tmp); | ||
261 | } | 263 | } |
262 | EXPORT_SYMBOL_GPL(cpu_idle_wait); | 264 | EXPORT_SYMBOL_GPL(cpu_idle_wait); |
263 | 265 | ||