看板 LinuxDev 關於我們 聯絡資訊
※ 引述《sk2 (夏天來了)》之銘言: : ※ [本文轉錄自 C_and_CPP 看板] : 作者: sk2 (夏天來了) 看板: C_and_CPP : 標題: [問題] Linux Kernel 的 preempt 問題 : 時間: Sat Sep 19 16:04:33 2009 : 最近在寫 Linux kernel module 遇到了一些疑惑, : 想請教一下板上的各位先進, : 程式執行的環境是 embedded 的 Linux,只有一顆 ARM9 的 CPU : Kernel 的 Preemtible 選項是關閉的。 : 1. ISR (interrupt service routine) 會被同一個 IRQ 的 ISR 打斷嗎? : 2. ISR 會被不同 IRQ 的 ISR 打斷嗎? : 3. 一般的 Kernel Thread 在沒有 sleep 的狀態下會被 ISR 打斷嗎? : 4. 由 User 層呼叫 ioctl 或是 read/write,其在 Kernel 層執行的其間, : 在沒有 sleep 的狀態下,會被 ISR 打斷嗎? : 感謝各位 :) 中斷發生進入ISR是硬體的動作 如果沒去把他mask掉的話 無論什麼東西都有可能被ISR中斷 不過同一個IRQ的話 在開始進到各個driver的interrupt handler之前 該IRQ就會被mask掉了 所以ISR是不會被同IRQ的ISR再中斷的 不同IRQ的ISR的話 就要看註冊IRQ的時候 有沒有以SA_INTERRUPT的flag去註冊 如果有的話 就不會被不同IRQ的ISR中斷 反之 則有可能被其他IRQ中斷 (以該flag註冊IRQ 在進入interrupt handler之前 所有其他的IRQ都會被mask) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.25.4.157
sk2:感謝解答 09/22 01:43
zwai:SA_INTERRUPT現在已經改用IRQF_DISABLED囉~ 09/22 23:09
tassader:感謝樓上指正 09/23 18:17