so return 1 and requeue this packet.6*/78spin_unlock_irq(&lp->lock);9if(net_debug) printk("cs89x0: Tx buffer not free!\n");10//当检测到网卡暂时无法发送数据时,会直接return 1,而没有调dev_kfree_skb (skb)。11
–分配skb,通常被设备驱动用在中断上下文中,它是alloc_skb的封装函数,因为在中断处理函数中被调用,因此要求原子操作(GFP_ATOMIC); 1/*legacy helper around netdev_alloc_skb()*/2staticinlinestructsk_buff *dev_alloc_skb(unsignedintlength)3{4returnnetdev_alloc_skb(NULL, length);5} 1/**2* netdev_a...
@@ -586,8 +586,7 @@ static void free_skb_pool(rtl8150_t *dev) int i; for (i = 0; i < RX_SKB_POOL_SIZE; i++) - if (dev->rx_skb_pool[i]) - dev_kfree_skb(dev->rx_skb_pool[i]); + dev_kfree_skb(dev->rx_skb_pool[i]); } static void rx_fixup(unsigned long ...
3.这个函数也可以从队列规则中返回error,NET_XMIT_DROP, 这个错误是一个整数,所以错误也有可能是整数,也验证了点2 ,所以在协议栈的上一层使用这个函数的时候,可能需要注意error的处理部分 4. 不管这个函数返回什么值,这个skb最终的宿命就是被consume,也就是free掉了... 所以这个时候上层不要尝试重发了... 除非...
具体是数据包到来,Qemu调用tap_send函数,将网络数据报通过e1000_receive函数写入网卡的缓存区,然后通过pci_dma_write将数据包拷贝至虚拟机对应的内存中。然后中断注入给虚拟机。虚拟机读取中断后引发VM-Exit,停止VM进程执行,进入root操作状态。KVM要根据KVM_EXIT_REASON判断原因。对于IO请求,其标志为KVM_EXIT_IO。因为...
dev_alloc_skb –分配skb,通常被设备驱动用在中断上下文中,它是alloc_skb的封装函数,因为在中断处理函数中被调用,因此要求原子操作(GFP_ATOMIC); 1/*legacy helper around netdev_alloc_skb()*/2staticinlinestructsk_buff *dev_alloc_skb(unsignedintlength)3{4returnnetdev_alloc_skb(NULL, length);5} ...