内核中的快速中断库函数有问题!!

jackadandy 2004-09-15 12:43:25
我用的内核版本linux--2.4.13
它提供了快速中断函数,我的机子里是在/usr/src/arm/linux/arch/arm/kernel/fiq.c 在该文件中,宏FIQ_START的值为64,那么在调用函数enable_fiq(fiq)时,他就会间接调用了enable_irq(fiq+FIQ_START)函数。其中enable_irq的参数会大于等于64,这样就出错了,因为下面数组irq_desc[]最大包含30个元素(struct irqdesc irq_desc[NR_IRQS]; NR_IRQS=30)

void enable_irq(unsigned int irq)
87 {
88 unsigned long flags;
89
90 spin_lock_irqsave(&irq_controller_lock, flags);
91 irq_desc[irq].probing = 0;
92 irq_desc[irq].triggered = 0;
93 irq_desc[irq].enabled = 1;
94 irq_desc[irq].unmask(irq);
95 spin_unlock_irqrestore(&irq_controller_lock, flags);
96 }

我在驱动中调用这个函数试就出错了!


还有一个
int claim_fiq(struct fiq_handler *f)
185 {
186 int ret = 0;
187
188 if (current_fiq) {
189 ret = -EBUSY;
190
191 if (current_fiq->fiq_op != NULL)
192 ret = current_fiq->fiq_op(current_fiq->dev_id, 1);
193 }
194
195 if (!ret) {
196 f->next = current_fiq;
197 current_fiq = f;
198 }
199
200 return ret;
201 }
中的current_fiq初始赋为 default_owner
而default_owner = {
89 name: "default",
90 fiq_op: fiq_def_op,
91 };
这样的话当第一次申请FIQ,调用claim_fiq时,current_fiq!=0(current_fiq->name!=NULL,current_fiq->fiq_op =NULL),这样的话,岂不是ret= -EBUSY,永远提示设备忙,不能申请啊?


谁了解,指点一下吧!!!

...全文
68 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jackadandy 2004-09-19
大家踊跃发言
有大奖。。。。
回复
jackadandy 2004-09-16
为什么要笑哪
我哭。。。。。
回复
suowei1979 2004-09-15
:)
回复
相关推荐
发帖
Linux_Kernel
创建于2007-08-27

4156

社区成员

Linux/Unix社区 内核源代码研究区
申请成为版主
帖子事件
创建了帖子
2004-09-15 12:43
社区公告
暂无公告