免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: new_learner
打印 上一主题 下一主题

为什么我的spin_lock_irqsave()没有锁住时钟中断? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-04-28 19:17 |显示全部楼层
那么对于多处理器系统,如果我只想让其中一个cpu响应外设中断,该如何屏蔽另一个cpu呢?
我遇到一个问题,在驱动模块中触发中断后,总是两个cpu同时响应这个中断,就等于中断处理函数被执行了两次,而我只需要执行一次就可以了。尝试过在中断处理函数中使用spin_lock_irqsave,但中断就有点乱了,有时候是cpu0执行,有时候是cpu1执行,甚至有时候cpu0执行两次。我的内核是:2.6.27.7-9

[ 本帖最后由 sam58123 于 2009-4-28 19:34 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-04-29 09:42 |显示全部楼层

回复 #47 new_learner 的帖子

http://linux.chinaunix.net/bbs/viewthread.php?tid=988356  我看到本论坛也有人讨论类似的问题。
"在SMP情况,其它CPU的中断不是关闭的,当IOAPIC轮询到没有被mask的这条线时,可能再产生一个中断并route到其它CPU,这个时候另一个CPU就会产生一个PENDING。" 但他说的是在老版本的linux才有该问题。 我的外设使用的是INTx类型的中断,不是SMI

论坛徽章:
0
3 [报告]
发表于 2009-04-30 14:26 |显示全部楼层

回复 #51 new_learner 的帖子

恩,再仔细看了那个帖子,情况真的与我的不一样,多谢提醒!
现在我在中断处理函数里加上一个“下半部”,没有用任何锁,每次中断就就只要一个cpu响应了。虽然问题解决了,但原因还是不清楚啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP