Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 109788
b: refs/heads/master
c: 4e74339
h: refs/heads/master
v: v3
  • Loading branch information
Li Zefan authored and Linus Torvalds committed Sep 13, 2008
1 parent fba841e commit 237feba
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dea420ce0e2973e8ef1fd11fde6804c8d03a82ad
refs/heads/master: 4e74339af6a59c061cf02f1ac497766bca1de19a
37 changes: 15 additions & 22 deletions trunk/kernel/cpuset.c
Original file line number Diff line number Diff line change
Expand Up @@ -843,37 +843,25 @@ static void cpuset_change_cpumask(struct task_struct *tsk,
/**
* update_tasks_cpumask - Update the cpumasks of tasks in the cpuset.
* @cs: the cpuset in which each task's cpus_allowed mask needs to be changed
* @heap: if NULL, defer allocating heap memory to cgroup_scan_tasks()
*
* Called with cgroup_mutex held
*
* The cgroup_scan_tasks() function will scan all the tasks in a cgroup,
* calling callback functions for each.
*
* Return 0 if successful, -errno if not.
* No return value. It's guaranteed that cgroup_scan_tasks() always returns 0
* if @heap != NULL.
*/
static int update_tasks_cpumask(struct cpuset *cs)
static void update_tasks_cpumask(struct cpuset *cs, struct ptr_heap *heap)
{
struct cgroup_scanner scan;
struct ptr_heap heap;
int retval;

/*
* cgroup_scan_tasks() will initialize heap->gt for us.
* heap_init() is still needed here for we should not change
* cs->cpus_allowed when heap_init() fails.
*/
retval = heap_init(&heap, PAGE_SIZE, GFP_KERNEL, NULL);
if (retval)
return retval;

scan.cg = cs->css.cgroup;
scan.test_task = cpuset_test_cpumask;
scan.process_task = cpuset_change_cpumask;
scan.heap = &heap;
retval = cgroup_scan_tasks(&scan);

heap_free(&heap);
return retval;
scan.heap = heap;
cgroup_scan_tasks(&scan);
}

/**
Expand All @@ -883,6 +871,7 @@ static int update_tasks_cpumask(struct cpuset *cs)
*/
static int update_cpumask(struct cpuset *cs, const char *buf)
{
struct ptr_heap heap;
struct cpuset trialcs;
int retval;
int is_load_balanced;
Expand Down Expand Up @@ -917,6 +906,10 @@ static int update_cpumask(struct cpuset *cs, const char *buf)
if (cpus_equal(cs->cpus_allowed, trialcs.cpus_allowed))
return 0;

retval = heap_init(&heap, PAGE_SIZE, GFP_KERNEL, NULL);
if (retval)
return retval;

is_load_balanced = is_sched_load_balance(&trialcs);

mutex_lock(&callback_mutex);
Expand All @@ -927,9 +920,9 @@ static int update_cpumask(struct cpuset *cs, const char *buf)
* Scan tasks in the cpuset, and update the cpumasks of any
* that need an update.
*/
retval = update_tasks_cpumask(cs);
if (retval < 0)
return retval;
update_tasks_cpumask(cs, &heap);

heap_free(&heap);

if (is_load_balanced)
async_rebuild_sched_domains();
Expand Down Expand Up @@ -1965,7 +1958,7 @@ static void scan_for_empty_cpusets(const struct cpuset *root)
nodes_empty(cp->mems_allowed))
remove_tasks_in_empty_cpuset(cp);
else {
update_tasks_cpumask(cp);
update_tasks_cpumask(cp, NULL);
update_tasks_nodemask(cp, &oldmems);
}
}
Expand Down

0 comments on commit 237feba

Please sign in to comment.