免费注册 查看新帖 |

Chinaunix

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

周日回来加班,小声问个关于workqueue问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-02-21 10:51 |只看该作者
只屏蔽S2/S3中断源,其他中断都开放;如果S2/S3再次发生中断, 只能执行前半部没有任何意义。屏蔽S2/S3对其他中断没有任何影响。

============================
假设S2/S3的设备正在处理一个softirq时,其上的设备接收到了,比如最后一个数据包,在它的softirq部分屏蔽其硬件中断,潜在的问题是:1. 硬件中断的丢失, 2. 因为最后一个数据包接收的中断被屏蔽,hardirq无法进入,因此无法标记一个新的softirq需要处理,结果是最后一个数据包无法被接收...
   

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
12 [报告]
发表于 2012-02-21 13:44 |只看该作者
本帖最后由 linuxfellow 于 2012-02-21 13:49 编辑

回复 11# MagicBoy2010
你的这种情况即使S2/S3中断打开,还是丢包了。S2/S3中断打开,hardirq得以运行,但tasklet2不能运行, 数据还是得不到处理;反而没必要的运行了有S2/S3触发的hardirq. 我这里不是把中断信号INT屏蔽掉, 是屏蔽S2/S3中断源; S2/S3不能在触发中断到INT上,但S1还是可以继续中断的。

论坛徽章:
0
13 [报告]
发表于 2012-02-21 14:19 |只看该作者
你的这种情况即使S2/S3中断打开,还是丢包了。S2/S3中断打开,hardirq得以运行,但tasklet2不能运行, 数据还是得不到处理;反而没必要的运行了有S2/S3触发的hardirq. 我这里不是把中断信号INT屏蔽掉, 是屏蔽S2/S3中断源; S2/S3不能在触发中断到INT上,但S1还是可以继续中断的。

===============================================
兄弟,我认为我已经讲得很清楚了,"S2/S3中断打开,hardirq得以运行,但tasklet2不能运行, 数据还是得不到处理", hardirq部分可以raise_softirq_irqoff(TASKLET_SOFTIRQ),这样导致8楼中的代码在do...while...循环后的pending!=0,将goto restart,换句话说在一个softirq处理过程中处理了两次外部中断,而屏蔽S2/S3,8楼中的代码在do...while...之后的pending==0,这个softirq就结束了,它不会再去处理最后一个数据包了。8楼列出的代码我认为已经足够表述softirq的运作机制了:softirq部分,内核会主动打开硬件中断(local_irq_enable),这意味着要让处理器尽快可以接收外部中断。假设一个设备只会发生两次中断,A和B,在A发生时导致它的softirq部分执行,在softirq部分执行时,中断B发生,B最有可能的动作是标示一个新的softirq,但是B的hardirq部分结束后将不会重入A引起的softirq,详见do_softirq代码:if(in_interrupt()) return. 但是B标示的一个pending位被记录了下来,所以在A的softirq部分do...while...循环之后会重新读取pending = local_softirq_pending()。看来明天的博客内容又有新的题材了。。。



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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP