免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
51 [报告]
发表于 2009-04-29 16:07 |只看该作者
原帖由 sam58123 于 2009-4-29 09:42 发表
http://linux.chinaunix.net/bbs/viewthread.php?tid=988356  我看到本论坛也有人讨论类似的问题。
"在SMP情况,其它CPU的中断不是关闭的,当IOAPIC轮询到没有被mask的这条线时,可能再产生一个中断并route到其它CPU,这个时候另一个CPU就会产生一个PENDING。" 但他说的是在老版本的linux才有该问题。 我的外设使用的是INTx类型的中断,不是SMI


看了一下这个帖子,那里说的情况应该跟你的情况是不一样的。

你的情况是:同一个中断(同一次中断)被route到了两个cpu,两个cpu同时去运行这次中断处理函数。这里外设只产生了一次中断。

而那个帖子的意思是:第一次中断处理程序被cpu A运行的同时,外设又产生了同样的中断,然后被route到cpu B了。这里外设产生了两次中断。

论坛徽章:
0
52 [报告]
发表于 2009-04-30 14:26 |只看该作者

回复 #51 new_learner 的帖子

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

论坛徽章:
0
53 [报告]
发表于 2009-05-04 08:45 |只看该作者
原帖由 new_learner 于 2009-4-27 14:56 发表

看了下你的帖子,有一点不太明白,请指教


这里,"schedule()会打开中断"是什么意思?
你是指这段代码吗?,在schedule()中, 我的内核版本是2.6.18

        if (likely(prev != next)) {
                next->timestamp ...

可能看得代码版本不一致吧.我再仔细确认下schedule(),呵呵

从测试情况看,禁中断再调schedule(),会把中断又打开了   我是这么理解的

论坛徽章:
0
54 [报告]
发表于 2009-11-09 17:30 |只看该作者

回复 #35 wxc200 的帖子

make
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP