工控机网卡中断重入问题

hkroc 2003-08-09 11:42:24
我使用的是奔腾工控机, 网卡是RTL8139, 驱动是参考Linux的8139驱动程序使用标准C写的,在驱动之上实现了一个简易的IP协议栈.一般情况下运行都很正常.
我最近在做大数据量测试,使用一台计算机对着这块网卡猛发PING包(每包100字节以内),基本上每秒能发出达到20000个包,此时就很容易发生堆栈溢出,经多此查找原因,发现是8139的中断程序发生了重入导致的.
在此驱动程序中,我是一进来就关中断的(CLI或者disable), 直到要返回时才开中断的
(STI或者enable).经过观察堆栈,我发现堆栈中的返回地址全是在STI后的那些退栈的语句(我是反汇编看到的),这些语句反汇编的结果是:
mov esp, ebp
pop ebp
...
popad
iretd
也就是说一开中断,就有中断,最后把堆栈搞溢出了.

我想请教大家:
1.如何能减少网卡中断的次数?
2.是否可能让系统把开中断和中断返回(IRET)这些代码当作一个原子操作,这样就不会重入了
...全文
143 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Clevor 2003-08-12
  • 打赏
  • 举报
回复
在你退出中断服务程序之前,可以再清除一次中断源。反正多了也处理不过来。清除了之后再开中断,返回。
asmzyd 2003-08-11
  • 打赏
  • 举报
回复
你可以屏蔽掉网卡的中断!这样的话,网卡产生的中断82C59A就不会响应了.
直到你开启屏蔽为止.

21,618

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧