单处理器上保护软中断使用的数据结构需要禁用本地软中断吗?

66 views
Skip to first unread message

章巍巍

unread,
Jul 15, 2011, 5:22:39 AM7/15/11
to Linux-...@zh-kernel.org
请教各位大侠:
《深入理解linux内核》中,内核同步章节有这样一段话
保护可延迟函数(软中断)所访问的数据结构应采取的措施:
单处理器上:在单处理器上不存在竞争条件,这是因为可延迟函数(软中断)的执行总是在一个CPU上串行执行--也就是说,一个可延迟函数不会被另一个可延迟函数中断。因此,根本不需要同步原语。

我觉得不太对啊,一个软中断虽然不会被另一个软中断“中断”,但是可能被硬中断“中断”,而硬中断最后还是要执行到软中断,因此还是会形成对资源的临界区访问。我觉得在保护软中断时,应该关闭本地软中断,比如用local_bh_disable

不知道这样理解对不对?
--
章巍巍
_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.org
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区: http://zh-kernel.org

徐阳

unread,
Jul 15, 2011, 6:05:31 AM7/15/11
to 章巍巍, Linux-...@zh-kernel.org
开始处理软中断的情况主要是
1、中断退出执行的irq_exit
2、内核线程ksoftirqd
3、local_bh_enable



asmlinkage void do_softirq(void)
{
unsigned long flags;
struct thread_info *curctx;
union irq_ctx *irqctx;
u32 *isp;

if (in_interrupt())
return;
....
}
可以看到,in_interrupt 判断,当前若是从硬件中断退出后执行的irq_exit进入的do_softirq,则立即返回,可以避免你说的情况


在 11-7-15,章巍巍<zhangw...@gmail.com> 写道:

jiangtao.jit

unread,
Jul 15, 2011, 6:31:04 AM7/15/11
to 徐阳, 章巍巍, Linux-kernel

如果系统调用访问软中断临界区的话
是否考虑禁用软中断呢?


2011-07-15



jiangtao.jit



发件人: 徐阳
发送时间: 2011-07-15 18:05:50
收件人: 章巍巍
抄送: Linux-kernel
主题: Re: 单处理器上保护软中断使用的数据结构需要禁用本地软中断吗?

章巍巍

unread,
Jul 15, 2011, 8:17:45 AM7/15/11
to 徐阳, Linux-...@zh-kernel.org
哦,清楚了,谢谢~
Reply all
Reply to author
Forward
0 new messages