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!