阅读:1519回复:3
请教一个linux pci驱动的问题~
我写了个pci板卡驱动,由于共享中断号,request_irq采用共享中断SA_SHIRQ的方式。cleanup_module时就死机了。不知道是出了什么问题。
如果没有共享中断,request_irq采用独占方式SA_INTERRUPT,cleanup_module就不会出问题。 cleanup_module大概是这样的 free_irq(irq_num,pdev);//释放irq iounmap(ptr); //释放映射到内核空间的2号基址指针 iounmap(ptr1); //释放映射到内核空间的0号基址指针 remove_proc_entry("trndrv", 0); 请问是出了什么问题? |
|
沙发#
发布于:2004-10-10 08:27
你在共享中断的情况下会产生死机,我想可以是资源冲突造成的,你可能需要在释放中断之前,做下面的工作:
spin_lock_irq()/spin_lock_irqsave; 对PCI配置空间的一些寄存器进行操作; 对中断屏蔽寄存器等进行操作; spin_unlock_irq()/spin_unlock_irq(); free_irq(); 你不妨试试,如果你的问题解决了,请告诉我哦 |
|
板凳#
发布于:2004-10-10 11:12
嗯 回去拿卡来试试.谢谢
不过按我的理解,spin_lock_irq之类的自旋锁是用于多处理器上锁定临界资源?并且禁止中断?~这样会不会造成其他共享了这个中断号的设备丢失中断? 呵呵,不知道我的理解对不对? 已经给分。呵呵 [编辑 - 10/10/04 by zhuchubo] |
|
地板#
发布于:2004-10-14 09:57
好像是和我硬件有关,faint,在其他人机器上原来的代码就可以正常运行了。
|
|