- 论坛徽章:
- 16
|
本帖最后由 tc1989tc 于 2015-06-17 12:12 编辑
自旋锁的代码调用流程大致如下,
但是只看见其中local_irq_disable()将本地中断关闭,
但是下面的preempt_disable();
spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
代码看不懂。个人理解既然关闭啦中断。那么为啥还要执行下面的do_raw_spin_lock
函数啊?
函数调用流程如下:
spin_lock_irq -> raw_spin_lock_irq->__raw_spin_lock_irq
static inline void spin_lock_irq(spinlock_t *lock)
{
raw_spin_lock_irq(&lock->rlock);
}
#define raw_spin_lock_irq(lock) _raw_spin_lock_irq(lock)
void __lockfunc _raw_spin_lock_irq(raw_spinlock_t *lock)
{
__raw_spin_lock_irq(lock);
}
static inline void __raw_spin_lock_irq(raw_spinlock_t *lock)
{
local_irq_disable();
preempt_disable();
spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
}
请问忙等待那段代码在哪个函数呢 我没有找到。谁知道啊 |
|