Chinaunix

标题: 请教网卡中的中断问题 [打印本页]

作者: yangfangood    时间: 2008-11-03 14:56
标题: 请教网卡中的中断问题
大家好,我最近在研究网卡驱动,看了很多文章都说,网卡在接收到报文后会产生中断,从而调用中断处理函数,于是我在中断处理函数中加入printk打印日志,发现当我把网线拔掉之后,也就是根本没有报文接收到的情况下,中断处理函数仍然会被不断的调用。请问这是什么在调用它呢?是什么在不停中断呢?
PS.我研究的是e1000的网卡,驱动比较新,其中的中断处理函数为e1000_intr()
作者: dreamice    时间: 2008-11-03 15:07
标题: 回复 #1 yangfangood 的帖子
我觉得是这样的,虽然拔掉了网线,但是网卡还是存在的,且接通了电源,所以属于正常工作状态的。
中断的发生可能基于一个原因:就是上层仍可能会发送数据包出去(没有网线就只是把数据包丢到网口),这样发送结束仍旧会产生中断。

我建议你看一下e1000手册,了解清楚中断发生的条件,这个是解决疑惑的关键。等你把结果告知出来。
作者: yangfangood    时间: 2008-11-03 15:30
原帖由 dreamice 于 2008-11-3 15:07 发表
我觉得是这样的,虽然拔掉了网线,但是网卡还是存在的,且接通了电源,所以属于正常工作状态的。
中断的发生可能基于一个原因:就是上层仍可能会发送数据包出去(没有网线就只是把数据包丢到网口),这样发送结 ...

谢谢版主的回答,你说的这个原因我也想到过,就是不清楚发送数据会调用中断处理函数吗?
PS.我的网卡工作在NAPI模式下
作者: dreamice    时间: 2008-11-03 15:38
标题: 回复 #3 yangfangood 的帖子
应该有一个发包结束的中断,就是说包成功发送出去后,会有一个中断,告知已发送成功。我觉得应该是这歌原因。
作者: yangfangood    时间: 2008-11-03 15:57
原帖由 dreamice 于 2008-11-3 15:38 发表
应该有一个发包结束的中断,就是说包成功发送出去后,会有一个中断,告知已发送成功。我觉得应该是这歌原因。

哦,如果是这样的话也是有可能的,因为我对网卡发送没有研究过,所以不清楚,我不知道发送也可能引发中断,呵呵。
作者: dreamice    时间: 2008-11-03 17:03
原帖由 yangfangood 于 2008-11-3 15:57 发表

哦,如果是这样的话也是有可能的,因为我对网卡发送没有研究过,所以不清楚,我不知道发送也可能引发中断,呵呵。



应该是这个问题。
通常,发送网络数据包的时候,如果此时网卡正在发送数据,那么只要把数据包发送到发送队列就是了;
如果网卡此时并没有发送数据,则需要把数据包投递到网卡,触发执行包的发送;包发送完了,肯定需要通知内核,这就是发送结束中断吧。
作者: yangfangood    时间: 2008-11-03 17:26
原帖由 dreamice 于 2008-11-3 17:03 发表



应该是这个问题。
通常,发送网络数据包的时候,如果此时网卡正在发送数据,那么只要把数据包发送到发送队列就是了;
如果网卡此时并没有发送数据,则需要把数据包投递到网卡,触发执行包的发送;包发送 ...

恩,谢谢啦




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2