Can I use yield in this way

From: 夏亮
Date: Thu Jun 26 2008 - 09:27:29 EST


Hello,

I'd like to ask a question about the use of a kernel function, yield(); I am working on Intel Core Duo, running Linux 2.6.21 I want to let current process be off the cpu when the temperature of cpu is too high. I add a function called thermal_balance in the timer interrupt. My program is as following,

scheduler_tick()
{
static int count = 0;
count++;
if(count % 100 == 0)
thermal_balance();
}

static int thermal_balance(void)
{
int cpu = smp_processor_id();
struct task_struct* task;
Get CPU temperature.

if (temperature is too high){
task = cpu_rq(cpu)->curr;
yield();
Move task to other cpu.
}
}

Can yield() be used as above. After I compile the kernel and run again. Kernel is not working just as it meets deadlock. And if I comment yield(), it runs ok. Could anyone help me?Thanks!

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