我在linux看着調度代碼:什麼時候是preempt_count()&PREEMPT_ACTIVE == 0?
if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
if (unlikely(signal_pending_state(prev->state, prev))) {
prev->state = TASK_RUNNING;
} else {
deactivate_task(rq, prev, DEQUEUE_SLEEP);
prev->on_rq = 0;
按我的理解,如果prev
任務不間斷,這個代碼將停用任務(從運行隊列中刪除)提供
preempt_count() & PREEMPT_ACTIVE == 0
能有人向我解釋什麼是preempt_count
thread_info
什麼時候這個條件滿足或不?
preempt_counts高位用於像IRQ計數這樣的事情,其中一個位用於指示PREEMPT是否處於活動狀態,這是線路正在檢查的內容。 –
但我認爲schedule()不能在IRQ處理程序中調用,因爲日程安排可以睡眠。 (你只是被中斷權搶佔了嗎?否則你會安排好嗎?) –