免费注册 查看新帖 |

Chinaunix

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

[中断] 关于local_irq_save [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-18 13:44 |只看该作者 |倒序浏览
小弟问一个问题:在驱动里面的调用local_irq_save这个函数,是否屏蔽了所有的中断?包括fiq irq?
谢谢!

论坛徽章:
0
2 [报告]
发表于 2012-07-18 16:27 |只看该作者

从代码里看
http://lxr.linux.no/linux+v3.4.5/arch/arm/include/asm/irqflags.h
  1.   13static inline unsigned long arch_local_irq_save(void)
  2.   14{
  3.   15        unsigned long flags;
  4.   16
  5.   17        asm volatile(
  6.   18                "       mrs     %0, cpsr        @ arch_local_irq_save\n"
  7.   19                "       cpsid   i"
  8.   20                : "=r" (flags) : : "memory", "cc");
  9.   21        return flags;
  10.   22}
复制代码
cpsid i  只禁用了IRQ, 没禁用FIQ。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
3 [报告]
发表于 2012-07-18 18:58 |只看该作者
本帖最后由 linuxfellow 于 2012-07-18 19:10 编辑

回复 2# wwxbei
是的 ,cpsid i 就是disable irq;  cpsid f 才disable fiq. fast irq硬件上已经自动保存了足够的上下文,这里的操作不会fiq发生而受影响。

   

论坛徽章:
0
4 [报告]
发表于 2012-07-19 09:24 |只看该作者
在我的内核版本上是这样子的。。。
#define local_irq_save(flags) \
        do { raw_local_irq_save(flags); trace_hardirqs_off(); } while (0)

/*
* Save the current interrupt enable state & disable IRQs
*/
#define raw_local_irq_save(x)                                        \
        ({                                                        \
                unsigned long temp;                                \
                (void) (&temp == &x);                                \
        __asm__ __volatile__(                                        \
        "mrs        %0, cpsr                @ local_irq_save\n"        \
"        orr        %1, %0, #128\n"                                        \
"        msr        cpsr_c, %1"                                        \
        : "=r" (x), "=r" (temp)                                        \
        :                                                        \
        : "memory", "cc");                                        \
        })
请问这样子是是否屏蔽了所有的中断?包括fiq irq?

论坛徽章:
0
5 [报告]
发表于 2012-07-19 09:35 |只看该作者
/*
* Save the current interrupt enable state & disable IRQs
*/
这个解释说明了只是屏蔽了IRQs,多谢!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP