void add_timer(long jiffies, void (*fn)(void))
{
struct timer_list * p;
if (!fn)
return;
cli();
if (jiffies <= 0)
(fn)();
else {
for (p = timer_list ; p < timer_list + TIME_REQUESTS ; p++)
if (!p->fn)
break;
if (p >= timer_list + TIME_REQUESTS) {
printk("No more time requests free\n");
return;
}
p->fn = fn;
p->jiffies = jiffies;
p->next = next_timer;
next_timer = p;
while (p->next && p->next->jiffies < p->jiffies) {
p->jiffies -= p->next->jiffies;
fn = p->fn;
p->fn = p->next->fn;
p->next->fn = fn;
jiffies = p->jiffies;
p->jiffies = p->next->jiffies;
p->next->jiffies = jiffies;
p = p->next;
}
}
sti();
}
void save_esp(void)
{
current->current_esp = get_eax();
}
void restore_esp(void)
{
set_eax(current->current_esp);
}
void refresh_sleep_time(void)
{
int i;
task_tbl_t *p;
for( i = 0; i <= MAX_TASK_NUMBER;i++) {
p = &g_task_tbl[i];
if( p->sleep_time > 0 ) {
p->sleep_time--;
if( p->sleep_time == 0) {
p->counter = p->budget;
}
}
}
return;
}
我的学习之旅(35)sched.c
最新推荐文章于 2023-09-11 00:15:00 发布