zhuchubo
驱动牛犊
驱动牛犊
  • 注册日期2004-06-22
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1485回复:3

请教一个linux pci驱动的问题~

楼主#
更多 发布于:2004-09-27 09:55
我写了个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);
请问是出了什么问题?
xiaohaomei
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2005-08-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-10 08:27
你在共享中断的情况下会产生死机,我想可以是资源冲突造成的,你可能需要在释放中断之前,做下面的工作:

spin_lock_irq()/spin_lock_irqsave;
对PCI配置空间的一些寄存器进行操作;
对中断屏蔽寄存器等进行操作;
spin_unlock_irq()/spin_unlock_irq();

free_irq();

你不妨试试,如果你的问题解决了,请告诉我哦
zhuchubo
驱动牛犊
驱动牛犊
  • 注册日期2004-06-22
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-10 11:12
嗯 回去拿卡来试试.谢谢
不过按我的理解,spin_lock_irq之类的自旋锁是用于多处理器上锁定临界资源?并且禁止中断?~这样会不会造成其他共享了这个中断号的设备丢失中断?
呵呵,不知道我的理解对不对?
已经给分。呵呵

[编辑 -  10/10/04 by  zhuchubo]
zhuchubo
驱动牛犊
驱动牛犊
  • 注册日期2004-06-22
  • 最后登录2005-01-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-14 09:57
好像是和我硬件有关,faint,在其他人机器上原来的代码就可以正常运行了。
游客

返回顶部