- 论坛徽章:
- 0
|
尝试用spin_lock_irqsave(),发现没有禁掉时钟中断,不知道我哪里理解错了?
kernel版本:
- uname -a 结果:
- Linux localhost.localdomain 2.6.18 #1 Sat Jul 19 13:06:00 EDT 2008 i686 i686 i386 GNU/Linux
复制代码
我的代码:
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/spinlock.h>
- static spinlock_t my_spinlock;
- static int __init init_test()
- {
- unsigned long flags;
- spin_lock_init(&my_spinlock);
- spin_lock_irqsave(&my_spinlock, flags);
- return 0;
- }
- static void __exit init_exit()
- {
- return;
- }
- module_init(init_test);
- module_exit(init_exit);
复制代码
加载module以后,通过这样的命令查看墙上时钟:
- #date; sleep 2; date
- 输出结果:
- Sun Apr 19 12:59:42 EDT 2009
- Sun Apr 19 12:59:44 EDT 2009
复制代码
墙上时钟仍然在变化,说明时钟中断没有被禁掉。
但我理解的spin_lock_irqsave()会通过cli关掉所有IRQ,并且我在module中也没有spin_unlock_irqrestore(),所以按理说在加载了这个module之后,系统就不会响应任何外部可屏蔽中断了。但实际结果却不是这样。
我哪里理解错了呢?请各位指点,多谢!
[ 本帖最后由 new_learner 于 2009-4-20 01:03 编辑 ] |
|