免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3193 | 回复: 10
打印 上一主题 下一主题

关于中断的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-29 19:42 |只看该作者 |倒序浏览
在irq_exit函数中有preempt_enable_no_resched() 使抢占记数preempt_count减1,为什么在进入中断时没有使抢占记数加1?

论坛徽章:
0
2 [报告]
发表于 2008-06-30 13:38 |只看该作者
irq_enter的时候先给抢占计数加了HARDIRQ_OFFSET
irq_exit的时候先减了HARDIRQ_OFFSET - 1,最后又减了1

论坛徽章:
0
3 [报告]
发表于 2008-07-07 19:13 |只看该作者
可是ULK第191面明明说了在中断处理程序中内核会禁止抢占,而irq_enter并没有禁止强占

论坛徽章:
0
4 [报告]
发表于 2008-07-08 08:59 |只看该作者

回复 #3 specter117 的帖子

禁止了,硬中断计数器更改了
如baohuaihuai 所说
因为irq_exit要考虑软中断,所以要保持禁止抢占

论坛徽章:
0
5 [报告]
发表于 2008-07-08 10:27 |只看该作者
#define irq_enter()                                        \
        do {                                                \
                account_system_vtime(current);                \
                add_preempt_count(HARDIRQ_OFFSET);        \
        } while (0)
HARDIRQ_OFFSET即1<<16,所以irq_enter()只是增加了中断嵌套记数并没有禁止抢占呀

论坛徽章:
0
6 [报告]
发表于 2008-07-08 10:46 |只看该作者
原帖由 specter117 于 2008-7-8 10:27 发表
#define irq_enter()                                        \
        do {                                                \
                account_system_vtime(current);                \
                add_preempt_count(HARDIRQ_OFFSET);        \
        } while (0)
HARDIRQ_OFFSET即1

LZ去看看内核用什么方法判断当前是否可以抢占,不要只看了HARDIRQ_OFFSET宏就认为这只是中断计数,这样就断章取义了。
也可以参考一下这个帖子
http://linux.chinaunix.net/bbs/v ... p;extra=&page=1

论坛徽章:
0
7 [报告]
发表于 2008-07-08 12:53 |只看该作者
仔细看了下,有一句这样的话:kernel preemptability has to be disabled either when it has been explicitly disabled by the kernel code or when the kernel is running in interrupt context.我现在的疑问是在中断上下文中抢占怎样被禁止的?

论坛徽章:
0
8 [报告]
发表于 2008-07-08 13:02 |只看该作者
原帖由 specter117 于 2008-7-8 12:53 发表
仔细看了下,有一句这样的话:kernel preemptability has to be disabled either when it has been explicitly disabled by the kernel code or when the kernel is running in interrupt context.我现在的疑问是 ...

kernel如何判断当前是否可抢占?
把这个最基本的问题搞清楚了你这篇帖子里所有的问题都解决了。

论坛徽章:
0
9 [报告]
发表于 2008-07-08 13:19 |只看该作者
是不是preempt_count(不只是抢占记数)只有为0,才可以抢占

论坛徽章:
0
10 [报告]
发表于 2008-07-08 13:28 |只看该作者
原帖由 specter117 于 2008-7-8 13:19 发表
是不是preempt_count(不只是抢占记数)只有为0,才可以抢占

这不就对了,preempt_counter由硬中断计数器、软中断计数器、抢占计数器3部分构成,那么其中任何一个部分不为0,整个preempt_counter不就不为0了嘛
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP