硬件时钟中断,需要处理非紧急时钟事务时,调度softclock,以便在响应完硬件时钟中断后运行softclock。
代码:
/* * The real-time timer, interrupting hz times per second. */ void hardclock(frame) register struct clockframe *frame; { ......
if (need_softclock) swi_sched(softclock_ih, 0);
...... }
/* * Schedule a heavyweight software interrupt process. */ void swi_sched(void *cookie, int flags) { struct intrhand *ih = (struct intrhand *)cookie; struct ithd *it = ih->ih_ithread; int error;
atomic_add_int(&cnt.v_intr, 1); /* one more global interrupt */ CTR3(KTR_INTR, "swi_sched pid %d(%s) need=%d", it->it_td->td_proc->p_pid, it->it_td->td_proc->p_comm, it->it_need);
/* * Set ih_need for this handler so that if the ithread is already * running it will execute this handler on the next pass. Otherwise, * it will execute it the next time it runs. */ atomic_store_rel_int(&ih->ih_need, 1); if (!(flags & SWI_DELAY)) { error = ithread_schedule(it, !cold && !dumping); KASSERT(error == 0, ("stray software interrupt")); } }
|
阅读(1654) | 评论(0) | 转发(0) |