真正落实工作的是这货 adapter->clean_rx(adapter, &adapter->rx_ring[0], &work_done, budget); 那clean_rx有是谁提供的函数呢? static const struct net_device_ops e1000_netdev_ops = { .ndo_open = e1000_open, .ndo_stop = e1000_close, .ndo_start_xmit = e1000_xmit_frame, .ndo_set_rx...
adapter->total_rx_bytes += total_rx_bytes; netdev->stats.rx_bytes += total_rx_bytes; netdev->stats.rx_packets += total_rx_packets; return cleaned; } 内容很多,我们捡主要的说, adapter->num_rx_queues 默认情况下, 驱动设置为1个队列,每个队列一个接受ring , ring中保存的是接受数据的描述符...