Re: [PATCH] set_cpus_allowed() for 2.4

Mikael Pettersson (mikpe@csd.uu.se)
Mon, 2 Dec 2002 18:12:05 +0100


On November 4, Christoph Hellwig wrote:
> +void set_cpus_allowed(struct task_struct *p, unsigned long new_mask)
> +{
> + new_mask &= cpu_online_map;
> + BUG_ON(!new_mask);
> +
> + p->cpus_allowed = new_mask;
> +
> + /*
> + * If the task is on a no-longer-allowed processor, we need to move
> + * it. If the task is not current, then set need_resched and send
> + * its processor an IPI to reschedule.
> + */
> + if (!(p->cpus_runnable & p->cpus_allowed)) {
> + if (p != current) {
> + p->need_resched = 1;
> + smp_send_reschedule(p->processor);
> + }
> + /*
> + * Wait until we are on a legal processor. If the task is
> + * current, then we should be on a legal processor the next
> + * time we reschedule. Otherwise, we need to wait for the IPI.
> + */
> + while (!(p->cpus_runnable & p->cpus_allowed))
> + schedule();
> + }
> +}

Is this implementation of set_cpus_allowed() Ok for all 2.4 kernels,
even if they (like RH8.0's) use a non-vanilla scheduler?

I'm asking because I need to put a set_cpus_allowed() implementation
in my performance counters driver's compat layer. If it makes any
difference, I'll only use set_cpus_allowed(p, new_mask) when p == current
or p is stopped and under ptrace() control by current.

/Mikael
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/