Re: [RFC][PATCH 14/26] sched, numa: Numa balancer

Peter Zijlstra
2012-07-09T12:25:28Z

On Sun, 2012-07-08 at 14:35 -0400, Rik van Riel wrote:
>
> This looks like something that should be fixed before the
> code is submitted for merging upstream.

static bool __task_can_migrate(struct task_struct *t, u64 *runtime, int node)
{
#ifdef CONFIG_CPUSETS
if (!node_isset(node, t->mems_allowed))
return false;
#endif

if (!cpumask_intersects(cpumask_of_node(node), tsk_cpus_allowed(t)))
return false;

*runtime += t->se.sum_exec_runtime; // @#$#@ 32bit

return true;
}

static bool process_can_migrate(struct numa_entity *ne, int node)
{
struct task_struct *p, *t;
bool allowed = false;
u64 runtime = 0;

rcu_read_lock();
t = p = ne_owner(ne);
if (p) do {
allowed = __task_can_migrate(t, &runtime, node);
if (!allowed)
break;
} while ((t = next_thread(t)) != p);
rcu_read_unlock();

/*
* Don't bother migrating memory if there's less than 1 second
* of runtime on the tasks.
*/
return allowed && runtime > NSEC_PER_SEC;
}

is what it looks like..