[lkml]   [2007]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH] task containersv11 add tasks file interface fix for cpusets
    On Sat, 6 Oct 2007, Paul Jackson wrote:

    > This isn't working for me.
    > The key kernel routine for updating a tasks cpus_allowed
    > cannot be called while holding a spinlock.
    > But the above loop holds a spinlock, css_set_lock, between
    > the cgroup_iter_start and the cgroup_iter_end.
    > I end up generating complaints of:
    > BUG: scheduling while atomic
    > when I invoke the set_cpus_allowed() above.
    > Should css_set_lock be a mutex? Locking changes like that
    > can be risky.

    It would probably be better to just save references to the tasks.

    struct cgroup_iter it;
    struct task_struct *p, **tasks;
    int i = 0;

    cgroup_iter_start(cs->css.cgroup, &it);
    while ((p = cgroup_iter_next(cs->css.cgroup, &it))) {
    tasks[i++] = p;
    cgroup_iter_end(cs->css.cgroup, &it);

    while (--i >= 0) {
    set_cpus_allowed(tasks[i], cs->cpus_allowed);

    The getting and putting of the tasks will prevent them from exiting or
    being deallocated prematurely. But this is also a critical section that
    will need to be protected by some mutex so it doesn't race with other

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-10-06 19:59    [W:0.021 / U:105.688 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site