2

网卡驱动中当 cpu 正在运行中断处理函数的时候来了另外一个包怎么处理

 1 year ago
source link: https://www.v2ex.com/t/901031
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  问与答

网卡驱动中当 cpu 正在运行中断处理函数的时候来了另外一个包怎么处理

  huangya · 4 小时 31 分钟前 · 430 次点击
1.只考虑接收包的场景
2.只考虑简单的不带 DMA 功能的网卡
3.网卡带一个输入缓冲队列

假设刚开始缓冲队列是空的。下面是我的理解:
当第一个包进入到输入缓冲队列的时候,网卡产生一个中断。CPU 进入中断处理函数。首先第一条指令就是屏蔽中断(原子操作,一条汇编指令)。然后处理包,主要的处理动作是把它 copy 到内存中。处理完后关中断(也是原子操作,一条汇编指令)

假设在处理过程中,来了第二个包,因为屏蔽了中断,包是不是只会放到缓冲队列?第一个包处理完后,怎么处理第二个中断丢失的包呢?我看有些驱动的处理函数在每个包处理完后,似乎都会检查一下网卡缓冲队列中是否还有包,但这样检查是原子操作吗?不会放过任何包吗?假设在检查之后,关中断之前来了一个包呢?

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK