作者alongalone (沿着孤单的路)
看板LinuxDev
标题Re: [问题] 关於interrupt是否需要lock的问题
时间Sun Feb 21 11:50:03 2010
※ 引述《musicguitar ()》之铭言:
: ※ 引述《roylee17 (把我id还我阿......)》之铭言:
: : 需要 lock 与否,是取决你要存取的资料是否共享
: : 而不是因为 irq 是不是共用
: : ^^^^^^^^^^^^^^^^^^
: : 除了你的 ISR 外,有其他的 code flow 会存取这个暂存器吗?
: 抱歉!!
: 刚刚确认一下我的程式.更新两个讯息.
: 1. 我的kernel是2.6.31
: 2. ISR的动作
: 因为是透过SCI发出的中断.
: ISR中会做的事是读取GPE暂存器.确认是否是我要撷取的interrup.
: 基本上.这个站存器只有我去读取.如果是我的讯号.会将interrupt flag清掉.
: 没有其他code flow会处里这个暂存器了.
: : 另外,ISR 中,不适用 semaphore
: : 或是其他需要 process context 的同步机制
: 不好意思.semaphore跟spinlock印象已经有点久远了!(好像还有mutex)
: 不太记得这两个用法上的差异.什麽时候该用哪种.
: 我会再去查查资料.
: 可以请问.ISR为何不适用semaphore???
: : spin lock 应该是没问题的(需不需要是另外一回事)
: 初始化没问题.我都有做到.
: : 如果你的 lock 是自己建的,记得初始化
: : 如果是 lock 系统中现有的某个 lock,
: : 那要检查一下整个 lock 的使用情况,
: : 你有没有 double lock/unlock
: : error message 可以贴上来
: error message要等我一下.手边目前没办法得到!!
: 另外一个问题.在kernel 2.6.31中多出一个lock的方式.
: DECLARE_RWSEM(isrlock);
: down_write(&isrlock);
: up_write(&isrlock);
: 不知跟semaphore有没有差别?
: 我之前有用过mutex, spinlock,跟这个semaphore.
: 使用这三种都会当机!!!出现error!
推文 james大大有说明过了, 我只是补充一下
实际上 spin_lock的实作是用while loop (busy waitting)
而sem实作是类似 sleep 的做法, 因为是sleep() 才会有context switch 的可能
ISR 基本上是不允许 context switch的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.131.190
1F:推 musicguitar:soga!!清楚明了!!!多谢!! 也谢谢J大!! 02/22 23:24