网卡中断函数 e1000_intr()
-------->加入napi链表 __napi_schedule()
-------->启动napi软中断 __raise_softirq_irqoff()
-------->软中断处理函数 net_rx_action()
-------->取napi链表节点,并针对该网卡轮询收包 poll()
-------->轮询完成 napi_complete()
-------->若有网卡组包功能及进行组包 napi_gro_complete()
-------->网卡接收完成,传递到协议栈netif_receive_skb()
-------->__netif_receive_skb()
-------->__netif_receive_skb_core()
-------->查找所有的网络协议处理函数 list_for_each_entry_rcu(ptype, &ptype_all, list) ,由dev_add_pack注册
-------->传递给协议处理函数 deliver_skb()
-------->进入一个协议处理函数atomic_inc(&skb->users)加一,释放kfree_skb(skb)减一,最后一次真正释放空间__kfree_skb
-------->加入napi链表 __napi_schedule()
-------->启动napi软中断 __raise_softirq_irqoff()
-------->软中断处理函数 net_rx_action()
-------->取napi链表节点,并针对该网卡轮询收包 poll()
-------->轮询完成 napi_complete()
-------->若有网卡组包功能及进行组包 napi_gro_complete()
-------->网卡接收完成,传递到协议栈netif_receive_skb()
-------->__netif_receive_skb()
-------->__netif_receive_skb_core()
-------->查找所有的网络协议处理函数 list_for_each_entry_rcu(ptype, &ptype_all, list) ,由dev_add_pack注册
-------->传递给协议处理函数 deliver_skb()
-------->进入一个协议处理函数atomic_inc(&skb->users)加一,释放kfree_skb(skb)减一,最后一次真正释放空间__kfree_skb