ARM和Linux spin_lock_irqsave关注

时间:2013-07-14 08:10:55

标签: linux kernel arm spinlock

这是我在堆栈交换中的第一个查询,请耐心等待。我想到的几乎所有问题都已经从论坛中解决了,但我无法找到这个问题。

我在Linux中创建了一个简单的设备驱动程序,在my_init()函数中我编写了以下代码: -

spinlock_t mylock = SPIN_LOCK_UNLOCKED
static int __init my_init()
{
     unsigned long flags;
     printk("Testing spinlock\n");
     spin_lock_irqsave(&mylock, flag);
     printk("Grabbing spinlock and return\n");
}

因此,我只是在不释放自旋锁的情况下返回。根据理论和Linux源代码,中断在ARM中被禁用。所以我看到ARM的CPSR寄存器使用调试器,'I'位被屏蔽,因此IRQ被禁用。但令我惊讶的是,Linux提示符甚至schedule()函数正常工作。

所以我的查询是在Linux中我们只对某些外设使用IRQ模式吗?如果是这种情况,我们怎样才能保证线程上下文和中断上下文之间的完美同步?

关于我的目标的一些细节:TI81xx Soc,Linux 3.2,Lauterbach Debugger。

谢谢

0 个答案:

没有答案