作者tassader (ppp)
看板LinuxDev
标题Re: [问题] Linux Kernel 的 preempt 问题
时间Sat Sep 19 18:58:18 2009
※ 引述《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
1F:推 sk2:感谢解答 09/22 01:43
2F:→ zwai:SA_INTERRUPT现在已经改用IRQF_DISABLED罗~ 09/22 23:09
3F:→ tassader:感谢楼上指正 09/23 18:17